discord.py使用cogs后命令重复执行及Unknown Message报错如何解决
问题原因分析
指令重复执行原因
discord.ext.commands.Bot 实例默认会自动调用process_commands解析执行用户指令,你在Embed cog中自定义的on_message监听器内额外手动调用了一次await self.client.process_commands(message),导致每条用户消息都会触发两次指令解析,最终指令重复执行两次。
错误码10008 Unknown Message原因
你的clear指令第一行逻辑为删除触发指令的用户消息await ctx.message.delete(),由于指令重复执行,第二次运行到该逻辑时,目标消息已经被第一次执行的流程删除,调用删除不存在的Discord消息就会抛出该404错误。后续你取消embed指令内删除相关代码的注释后,也会出现同样的报错。
修复方案
- 直接删除
Embedcog内的整个on_message监听器代码即可,无需手动调用指令解析逻辑,Bot实例会默认处理。 - (可选优化)删除main.py内冗余的cog导入代码:你已经实现了遍历
cogs目录自动加载所有py文件的逻辑,上方注释的手动导入embed_command、music、定义cogs数组的代码无实际作用,可直接删除,避免后续误操作取消注释导致cog重复加载。 - (可选容错)如果需要避免后续其他场景下删除不存在的消息导致报错,可以给删除逻辑加异常捕获:
try: await ctx.message.delete() except discord.NotFound: # 消息已被删除,无需处理 pass
内容的提问来源于stack exchange,提问作者Witalik Zarscikov
相关产品推荐
相关产品推荐

