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

编写Discord.py Cog时on_message事件报缺少message参数错误如何解决

问题原因

你对on_message事件监听器的参数定义不符合Discord.py的规范:

  • Cog中的on_message事件监听器仅接收2个参数:第一个是Cog实例本身的self,第二个是触发事件的message对象,不存在默认传入的ctx参数,ctx是@commands.command()装饰的命令函数才会自动注入的参数。
  • 额外添加的ctx参数占用了本该传入message的参数位置,导致Discord.py触发事件时传参不匹配,抛出缺少message参数的错误。
  • 同时你的代码存在两个隐藏问题:异步发送消息需要加await关键字,且事件中没有ctx的情况下不能直接调用ctx.send。
修复方案

方案1:直接用message对象处理逻辑(推荐,符合事件使用规范)

修改后的代码如下:

@commands.Cog.listener()
async def on_message(self, message):
    if message.content.startswith('/test'):
        await message.channel.send("Test")

方案2:如果确实需要用到上下文对象,可以手动获取

@commands.Cog.listener()
async def on_message(self, message):
    if message.content.startswith('/test'):
        # 需保证Cog初始化时已经将bot实例赋值给self.bot
        ctx = await self.bot.get_context(message)
        await ctx.send("Test")

内容的提问来源于stack exchange,提问作者Skey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:03