Discord.py命令运行两次

时间:2020-06-29 23:58:35

标签: python python-3.x discord.py discord.py-rewrite

我最近才使用discord.py和discord.ext命令扩展来创建机器人时遇到问题

当我调用命令时,它运行两次,从而导致许多错误和错误。添加命令后才开始发生

@commands.command()
    async def afk(self, ctx, userMessage):

        #if user is already afk, remove them from the afk dict, if not add them to it
        if ctx.message.author in self.afkUsers:
            self.afkUsers.pop(ctx.message.author)
        else:
            self.afkUsers[ctx.message.author] = userMessage

但是,删除此命令不能解决问题。我是在heroku上托管的,但停止了它,然后在自己的PC上运行它进行测试,但问题仍然存在。我在命令中使用了打印功能来测试它们是否运行了两次,并且其中的字符串被输出了两次

我也有一个on_message事件

@commands.Cog.listener()
    async def on_message(self, message):
        
        #if a member is mentioned but the member is afk, a message is sent
        textChannel = message.channel
        afkChannel = self.client.get_channel(690550327975346176)
        
        for member in message.mentions:
            if member in self.afkUsers:
                await textChannel.send(f"user is afk- {self.afkUsers[member]}")
            elif member in afkChannel.members:
                await textChannel.send("user is afk")
            

        #allows commands to work with on_message event
        await self.client.process_commands(message)

编辑:我的主文件中的某些命令上也会发生这种情况,但奇怪的是只有其中一些命令受到了影响

1 个答案:

答案 0 :(得分:1)

您要为同一封邮件两次致电process_commands。这是因为默认的on_message侦听器已经调用了process_commands。因此,来自您齿轮的on_message侦听器将其称为第二次。您应该从齿轮process_commands中删除on_message呼叫。