Как отправить сообщение, когда команда не найдена?

#discord.py

#discord.py

Вопрос:

Я пытаюсь отправить сообщение, когда команда не найдена, но она не работает:

 @client.event
async def on_ready():
    change_status.start()
    print("----------------------")
    print("Logged In As")
    print("Username: %s" % client.user.name)
    print("ID: %s" % client.user.id)
    print("----------------------")
async def on_message(ctx, error):
    if isinstance(error, commands.CommandNotFound):
        text = ('Sorry {}, this command does not exist check $help for a more detailed list of').format(ctx.author.mention)
        msg = await ctx.send(text)
        await ctx.message.delete()
        await asyncio.sleep(5)
        await msg.delete()
    else:
        pass
    raise error
 

Ответ №1:

Вы ищете on_command_error событие

 @client.event
async def on_command_error(ctx, error):
    if isinstance(error, commands.CommandNotFound):
        await ctx.send("Command does not exist.")
 

Ссылка:

Комментарии:

1. Я пробовал это, но я все еще сталкиваюсь с той же проблемой.

2. и в чем же проблема?

3. Я выполнил код, но когда я запускаю несуществующую команду, она по-прежнему выдает команду not found, хотя предполагается, что она должна отправить сообщение.

4. вы добавили декоратора client.event ?

Ответ №2:

Я нашел ответ на свою проблему вместо того, чтобы запускать его через client.event декоратор, я запустил его через client.слушай, декоратор:

 @client.event
async def on_ready():
    change_status.start()
    print("----------------------")
    print("Logged In As")
    print("Username: %s" % client.user.name)
    print("ID: %s" % client.user.id)
    print("----------------------")
@client.listen()
async def on_command_error(ctx, error):
    if isinstance(error, commands.CommandNotFound):
        text = ('Sorry {}, this command does not exist check $help for a more detailed list of').format(ctx.author.mention)
        msg = await ctx.send(text)
        await ctx.message.delete()
        await asyncio.sleep(5)
        await msg.delete()
 

Ответ №3:

on_command_error Событие вызывается, когда при выполнении какой-либо команды возникает ошибка. и внутри on_command_error события вы можете проверить, является ли ошибка экземпляром CommandNotFound , который выдается, когда введенная команда не найдена, или она не существует. И если это так, вы можете отправить сообщение на канал, где была использована команда.

 @client.event
async def on_command_error(ctx, error):
    """Command error handler"""
    embed = discord.Embed(color=discord.Color.red())
    if isinstance(error, commands.CommandNotFound):
        embed.title = "Command not Found"
        embed.description = "Recheck what you've typed."
        #await ctx.send(embed=embed)