Discord.py:一张支票有两个不同的错误输出

Discord.py: Have one check have two different error outputs

所以,我已经完成并为我的 discord 机器人添加了不同的功能。我正在努力使一个函数如果使用不当可能有两个不同的错误输出,具体取决于用户权限。

例如: 当我作为服务器管理员使用命令“!clear”时,我将它带到了我会得到错误的地方, “请指定要删除的邮件数量。”因为该命令应该像“!clear (amount)”这样使用。

但是当不是管理员的人运行此命令时,我希望填充一个不同的错误。 例如:普通用户尝试使用“!clear”,我希望错误输出显示 “错误:您没有执行此命令的权限。”

但我无法弄清楚如何将两种不同的错误输出应用于一个函数/命令。

每当我进入普通帐户并执行命令“!clear”时,它会填充“请指定要删除的消息数量。”,而我只想为管理员输出该错误。

我只想要输出“错误:您没有执行此命令的权限。”显示普通用户何时尝试使用管理机器人命令。

@client.command()
@commands.has_permissions(administrator=True) # Only allows administrators to use this command
async def clear(ctx, amount : int):
    await ctx.channel.purge(limit=amount)
    await ctx.send(f'**Messages have been cleared! :thumbsup:**')

@clear.error
async def clear_error(ctx, error):
    if isinstance(error, commands.MissingPermissions): # Error populates when someone with no permissions tries to run the command.
     await ctx.send(f'**Error: You do not have permissions for this command.**')
     

@clear.error
async def clear_error(ctx, error): # Error populates when the user does not specify the amount of messages to delete
    await ctx.send(f'**Please specify an amount of messages to delete. :memo:**')```


    

您可以只检查同一 clear_error 函数中出现的错误,例如:

@client.command()
@commands.has_permissions(administrator=True) # Only allows administrators to use this command
async def clear(ctx, amount : int):
    await ctx.channel.purge(limit=amount)
    await ctx.send(f'**Messages have been cleared! :thumbsup:**')
    
@clear.error
async def clear_error(ctx, error):
    if isinstance(error, commands.MissingPermissions): # Error populates when someone with no permissions tries to run the command.
        await ctx.send(f'**Error: You do not have permissions for this command.**')

    elif isinstance(error, commands.MissingRequiredArgument): # Error populates when the user does not specify the amount of messages to delete
        await ctx.send(f'**Please specify an amount of messages to delete. :memo:**')

您甚至可以添加更多类型的错误,更好的方法是提供更一般的错误消息。

并且为了避免在每个函数之前放置 @clear.error 装饰器,您可以覆盖 discord.py:

中的默认错误处理程序
@commands.Cog.listener()
async def on_command_error(self, ctx, error):
    if isinstance(error, commands.MissingPermissions): # Error populates when someone with no permissions tries to run the command.
        await ctx.send(f'**Error: You do not have permissions for this command.**')

    elif isinstance(error, commands.MissingRequiredArgument): # Error populates when the user does not specify the amount of messages to delete
        await ctx.send(f'**Please specify an amount of messages to delete. :memo:**')

文档: