Python开发Discord机器人关键词触发后无限重复回复该如何解决?
问题原因
on_message事件监听器会捕获当前服务器所有可见的新消息,包含机器人自身发送的内容。你设置的触发规则是消息内容包含abc,而机器人回复的内容abc def本身就命中触发条件,所以机器人每发一次回复都会再次触发监听逻辑,陷入无限循环。
修复方法
在监听器逻辑最前端增加过滤规则,直接跳过机器人账号发送的所有消息即可,修改后的代码如下:
@commands.Cog.listener() async def on_message(self, message): # 过滤所有机器人发送的消息,避免循环触发 if message.author.bot: return if "abc" in message.content.lower(): await message.channel.send('abc def')
如果你的使用场景存在多个机器人共存、且需要响应其他机器人发送的含abc的消息,可以替换成仅过滤自身ID的写法:
@commands.Cog.listener() async def on_message(self, message): # 仅跳过当前机器人自身发送的消息 if message.author.id == YOUR_BOT_USER_ID: return if "abc" in message.content.lower(): await message.channel.send('abc def')
只需把代码中的YOUR_BOT_USER_ID替换为你自己的机器人账号数字ID即可。
内容的提问来源于stack exchange,提问作者tal
相关产品推荐
相关产品推荐

