Discord.py机器人重复消息问题求助:GIF频道开发故障排查
解决Discord.py机器人重复消息的问题
看起来你的机器人触发了消息循环——当机器人发送提示消息时,这条消息也会触发on_message事件,导致它反复执行相同的逻辑。另外你的代码里还有几个小细节需要修正,我帮你一步步调整:
1. 阻止机器人响应自己的消息
在on_message函数最开头添加判断,直接跳过机器人自身发送的消息,这是解决循环问题的核心:
@client.event async def on_message(message): # 先过滤掉机器人自己的消息,避免触发循环 if message.author.bot: return # 你的原有逻辑放在这里 with open("gif_chater.json", "r+") as file: data = json.load(file) if str(message.channel.id) in data: if message.content.startswith("https://tenor.com/"): print("wOw") elif not message.content.startswith("https://tenor.com/"): # 修正用户ID的类型判断:ID是整数,不是字符串 if message.author.id != 760083241133932544: await message.channel.send("lol pls use gifs in this channel : )") await message.delete() # 如果你用了命令前缀(比如@client.command()),必须加这行保证命令正常工作 await client.process_commands(message)
2. 修正其他细节问题
- 用户ID类型错误:
message.author.id是整数类型,你之前用字符串"760083241133932544"做比较会导致判断失效,改成整数即可。 - 冗余条件优化:把两个独立的
if改成if...elif,逻辑更清晰,避免重复执行判断。 - 移除错误的
exit:exit会直接终止整个机器人程序,完全不需要在这里使用。 - 添加命令处理代码:
await client.process_commands(message)能确保你如果有其他命令(比如前缀式命令)时,不会被on_message事件阻塞。
为什么会出现重复消息?
当机器人发送提示消息时,这条消息本身也是频道内的新消息,会再次触发on_message事件。如果没有过滤机器人自身消息的判断,机器人会再次检查这条提示消息,发现它不是Tenor链接,然后又发送新的提示,陷入无限循环。
调整后机器人就只会响应人类用户的消息,不会再出现重复发送的问题了。
内容的提问来源于stack exchange,提问作者Hyper




