discord.py中Cog的on_message事件无响应问题求助
问题排查与修复方案
核心错误点
- 事件参数签名错误:Discord.py 的
on_message监听器仅接收message一个参数,你额外添加的ctx参数会导致事件无法正常触发——系统不会自动传递该参数给监听器,直接造成事件逻辑完全不执行。 - 语法缺失错误:
await ctx.send("Dont say that again"缺少闭合括号,即便没触发显性报错,也会阻断后续代码执行。 - 匹配逻辑偏差:
msg_content in CurseWord是判断整个消息内容完全等于列表里的某个词,而非消息包含该词,大概率不符合你检测脏话的实际需求。 - 权限与加载问题:若Cog未正确加载到机器人实例,或机器人缺少
Manage Messages/Send Messages权限,也会导致无响应。
修复后的完整代码
@commands.Cog.listener("on_message") async def on_message(self, message: discord.Message): print(message) # 忽略机器人自身发送的消息 if message.author.id == self.bot.user.id: return msg_content = message.content.lower() curse_words = ['curse1', 'curse2'] # 检测消息是否包含脏话(需完全匹配则替换回原判断) if any(word in msg_content for word in curse_words): await message.delete() # 用message.channel.send替代ctx.send,on_message无ctx参数 await message.channel.send("Don't say that again!") # 若机器人同时使用命令装饰器,需添加该行以保证命令正常执行 await self.bot.process_commands(message)
额外检查项
- 确认Cog已通过
bot.add_cog(YourCogInstance(bot))正确加载。 - 验证机器人在目标服务器中拥有删除消息和发送消息的权限。
内容的提问来源于stack exchange,提问作者Louk0
相关产品推荐
相关产品推荐

