Как использовать on_command_error() для обнаружения ошибки атрибута

#python #error-handling #discord.py

Вопрос:

Я пытаюсь определить, когда кто-то использует команду за пределами сервера. Я хочу иметь только одну функцию on_command_error (), поэтому я пытаюсь обнаружить ошибку атрибута: «NoneType» не имеет атрибута «id». Однако я сейчас не знаю, что ставить, я попробовал AttributeError, но он этого не обнаружил.

 @bot.event
async def on_command_error(ctx, error):
  if isinstance(error, AttributeError):
    await ctx.send('You Cannot Use This Command Outside Of The Server')
  else:
    print(error)
 

Кто-нибудь знает, что использовать для аргумента, который сейчас принимает AttributeError?
Спасибо!

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

1. Знаете ли вы, что заключительной кавычки нет?

2. Это было только здесь, я правильно записал это в коде.

Ответ №1:

На самом деле вам не следует обрабатывать подобные ошибки в обработчике ошибок, тем не менее, вы можете сделать это с помощью следующего:

 @bot.event
async def on_command_error(ctx, error):
    # If an error happens inside the command,
    # discord.py wraps it around with `commands.CommandInvokeError` 
    # which has the `original` attribute which is the "original" error
    error = getattr(error, "original", error)
    if isinstance(error, AttributeError):
        ...
    elif isinstance(error, commands.MissingPermissions):
 

Ответ №2:

Discord.py на самом деле есть встроенная проверка для команд только гильдии. commands.guild_only() .

Итак, прямо под (или перед) проверкой определения команды discord ( @bot.command() ) добавьте декоратора @commands.guild_only .

Если эта команда выполняется за пределами сервера, она вызовет исключение NoPrivateMessage. Вы можете использовать обработчик ошибок, чтобы поймать это и отправить соответствующее сообщение.