Discord.py邀请奖励Cog的on_message致命令重复响应问题
问题原因与解决方案
根本原因
你的InviteReward cog中的on_message监听器调用了await self.bot.process_commands(message),而Discord.py的Bot类默认已在自身的on_message方法中执行命令处理逻辑。当你的cog注册额外的on_message监听器后,每次收到消息时命令处理会被执行两次:一次由Bot默认的on_message触发,另一次由你的cog监听器中的process_commands调用触发,这直接导致所有命令出现重复响应。
解决方案
移除cog的on_message监听器中的await self.bot.process_commands(message)语句即可。Bot的默认行为会自动处理命令的解析与执行,无需在自定义监听器中重复调用。
修改后的on_message方法示例:
@commands.Cog.listener() async def on_message(self, message: discord.Message): # 保留你的消息处理逻辑 # processing # 移除以下重复调用的代码 # await self.bot.process_commands(message)
额外说明
如果你的主Bot类重写了on_message方法且未调用process_commands,则需要确保在某个位置(比如主Bot的on_message中)仅调用一次process_commands,避免重复执行。但根据你的描述,移除cog的监听器后功能恢复正常,说明你的Bot默认命令处理逻辑是正常运行的,因此只需移除重复调用即可。
内容的提问来源于stack exchange,提问作者Nitish Yadav
相关产品推荐
相关产品推荐

