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

Discord.py开发on_message聊天事件时消息无法发送问题求助

问题根因

  • 参数使用错误:on_message 事件的入参是Message对象而非命令上下文ctx,你当前调用的ctx.send本身存在逻辑错误。
  • 事件阻塞堆积:在全局on_message事件内嵌套调用bot.wait_for('message'),每收到一条消息就会生成一个等待任务,且没有过滤机器人自身发送的消息,机器人回复的oof也会触发on_message进入等待逻辑,导致等待任务持续叠加,事件处理队列默认上限为5,占满后就不再响应新消息,这是发5条消息后无回复的核心原因。
  • 弃用API调用:flatten()是discord.py v1.x的旧方法,v2.x版本中channel.history异步迭代器无需调用flatten(),直接遍历即可获取历史消息列表。

修正后的测试代码

@bot.event
async def on_message(message):
    # 过滤机器人自身发送的消息,避免循环触发
    if message.author.bot:
        return
    # 适配v2.x版本的历史消息获取逻辑
    messages = [msg async for msg in message.channel.history(limit=3)]
    await message.channel.send("oof")
    
    # 后续如果需要添加指令功能,保留下方代码,避免指令被on_message拦截
    # await bot.process_commands(message)

测试建议

如果你的业务确实需要实现「收到用户消息后等待该用户下一条消息再回复」的逻辑,建议放在单独的命令函数中使用wait_for,不要直接写在全局on_message事件里,避免全局事件被阻塞。

内容的提问来源于stack exchange,提问作者im correct Come on

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 22:45:02