#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. Вы можете использовать обработчик ошибок, чтобы поймать это и отправить соответствующее сообщение.