Discord.py 重写自定义错误

Discord.py Rewrite custom errors

我是编码的新手,我想知道如何在此处实现 "missing a dev role" 等自定义错误:

    @bot.command()
@commands.has_any_role("Temp.", "Owner")
async def sh(ctx):
    await ctx.message.add_reaction(':true:508022488093949973')
    await ctx.send("<a:siren:507952050181636098> `Shutting down` <a:siren:507952050181636098>")
    await bot.logout()

我有一个像这样的简单处理程序

@bot.event
async def on_command_error(ctx, error):
    await ctx.message.add_reaction(':false:508021839981707304')
    await ctx.send("<a:siren:507952050181636098> `Invalid command` <a:siren:507952050181636098>")

但它总是输出无效命令

您可以检查 error 的 class 以确定您正在处理的错误类型。如果将此与特定命令 error handler 配对,您可以编写一个响应,告诉用户他们缺少什么:

@sh.error
async def sh_error(ctx, error):
    if isinstance(error, commands.CheckFailure):
        await ctx.send("You do not have the correct roles Temp. or Owner")

@bot.event
async def on_command_error(ctx, error):
    if not isinstance(error, commands.CheckFailure): 
        await ctx.message.add_reaction(':false:508021839981707304')
        await ctx.send("<a:siren:507952050181636098> `Invalid command` <a:siren:507952050181636098>")