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

discord.py自定义on_message事件导致join指令无法运行问题

问题根因

自定义on_message事件会覆盖discord.py框架内置的默认消息处理逻辑,框架默认的指令前缀匹配、上下文构造、指令分发流程都会失效,因此@client.command装饰的所有指令都无法被触发。
默认状态下commands.Bot实例会在自带的on_message逻辑中完成指令解析全流程,重写该事件后默认逻辑不会自动执行。

修复方法

在自定义on_message函数的末尾添加await client.process_commands(message),将消息对象交还给框架的指令处理器即可恢复指令功能。
修复后的on_message代码参考:

@client.event
async def on_message(message):
  # 过滤机器人自身消息,避免触发无限响应循环
  if message.author.bot:
    return
  if message.content.lower() == "!poisson":
    await message.delete()
    with open('myimage.png', 'rb') as f:
      picture = discord.File(f)
      await message.channel.send(file=picture)
  # 交还消息给指令处理器,必须添加
  await client.process_commands(message)
补充说明
  • pass_context=True是discord.py 1.0版本之前的旧参数,1.0及之后版本会默认向指令回调传入上下文对象,不需要额外配置该参数
  • 必须保留机器人自身消息过滤逻辑,否则机器人发送的消息会再次触发on_message,造成死循环占用资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.15 16:16:02