Discord.py предлагает другой способ обработки ошибки без необходимости вручную проверять каждый аргумент, автоматически вызывая on_command_error
, передавая контекст и возникающую ошибку. куча разных ошибок может быть передана, но единственное, что нас действительно волнует, это MissingRequiredArgument
, поэтому мы проверим это с помощью оператора if .
from discord.ext import commands
bot = commands.Bot(...)
...
@bot.event
async def on_command_error(ctx, error):
if isinstance(error, commands.errors.MissingRequiredArgument):
await ctx.send(f'Required arguments are missing for "{ctx.command}". \n'
f'```Usage: {ctx.prefix}{ctx.command} {ctx.command.signature}```')
# you might also like
# await ctx.send(f'Required arguments are missing for "{ctx.command}". '
# f'For help using this command, enter\n```{ctx.prefix}help {ctx.command.qualified_name}```')
Если вы не знакомы с некоторыми из приведенных выше утверждений (например, ctx.prefix
, ctx.command.qualified_name
), это может помочь проверить документацию для Context
и Command
.
Здесь первый ctx.send
печатает сообщение, похожее на
Отсутствуют обязательные аргументы для "погашения".
Usage: !redeem <arg1> <arg2> <arg3>
Второй ctx.send
печатает что-то вроде
Отсутствуют обязательные аргументы для "погашения". Чтобы получить справку по этой команде, введите
!help redeem
Отличительной особенностью этого является то, что он по умолчанию для всех команд. Это делает менее трудоемким проверку каждого аргумента.
Если вы хотите проверить, была ли ошибка вызвана определенной командой, просто вложите оператор if.
if isinstance(error, commands.errors.MissingRequiredArgument):
if ctx.command.name == 'redeem':
# do something special
...