You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:50:34