如何对 cog discord.py 上的特定命令做出错误响应

时间:2021-06-10 18:27:56

标签: python discord.py

我在一个 cog 中有一个 kick 命令,它可以工作。但是我为 kick 命令设置的错误事件触发了我在其他齿轮中设置的所有其他错误事件。例如,我有一个禁止命令 (ban.py) 和一个踢命令 (kick.py)。每个人都有自己的错误事件代码,如下面的代码。但我希望它们有自己的错误,如 @kick.error@ban.error,因为当我在其中一个命令上出现错误时,它会显示它们两个的错误。但遗憾的是 @kick.error@ban.error 在齿轮中不起作用。请帮我解决这个问题。

@commands.Cog.listener()
async def on_command _error(self, ctx, error):
   if isinstance(error, commands.MissingRequiredArgument):
        await ctx.send('(text here)')
    if isinstance(error, commands.MissingPermissions):
        await ctx.send("(text here)")

2 个答案:

答案 0 :(得分:0)

您可以覆盖 Cog.cog_command_error 为 cog 创建本地错误处理程序:

class SomeCog(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    async def cog_command_error(self, ctx, error):  # no need for a decorator
        ...  # handle errors here

答案 1 :(得分:0)

Łukasz Kwieciński 版本已经有道理,但这里有一个稍微修改的版本,也许这个版本会有所帮助:

class ErrorCog(commands.Cog):

    def __init__(self, bot):
        self.bot = bot

    @commands.Cog.listener()
    async def on_command_error(self, ctx, error):
        try:
            if isinstance(error, commands.CommandNotFound):
                pass
            elif isinstance(error, commands.MissingRequiredArgument):
                # Do what you want to do.
            elif isinstance(error, commands.MissingPermissions):
                # Do what you want to do.
            else:
                await ctx.send(f"{error}")
        except Exception as error:
            print(f"{error}")

def setup(bot):
    bot.add_cog(ErrorCog(bot))
  • 我们使用相同的事件 (on_command_error)
  • 我们将 class 添加到 bot