Discord.py on_message事件无限循环发消息问题修复咨询
问题原因
死循环的核心是对机器人自身消息的拦截判断错误。你现有代码中if message.author == client:的判断逻辑永远不成立:client是Discord客户端实例,而message.author是用户对象,二者不可能相等。这就导致机器人自己在指定频道发送的bgmi、news消息也会触发on_message事件,进而反复发送新消息形成死循环。
修正方案
将自身消息拦截的判断改为匹配client.user即可,修正后代码如下:
@client.event async def on_message(message): # 正确拦截机器人自身发送的消息,避免触发循环 if message.author == client.user: return if message.channel.id == 885569828436447254: await message.channel.send(bgmi) await message.channel.send(news)
补充注意事项
- 如果你后续添加了前缀指令相关功能,需要在
on_message函数末尾加上await client.process_commands(message),否则所有指令会被事件拦截无法正常触发。 - 如果需要缩小触发范围避免误发,可在频道ID判断后追加额外校验逻辑,比如仅响应包含指定关键词的消息、仅响应特定权限组用户的消息等。
内容的提问来源于stack exchange,提问作者Jaguar000212
相关产品推荐
相关产品推荐

