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
相关产品推荐
相关产品推荐

