You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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,逻辑更清晰,避免重复执行判断。
  • 移除错误的exitexit会直接终止整个机器人程序,完全不需要在这里使用。
  • 添加命令处理代码await client.process_commands(message)能确保你如果有其他命令(比如前缀式命令)时,不会被on_message事件阻塞。

为什么会出现重复消息?

当机器人发送提示消息时,这条消息本身也是频道内的新消息,会再次触发on_message事件。如果没有过滤机器人自身消息的判断,机器人会再次检查这条提示消息,发现它不是Tenor链接,然后又发送新的提示,陷入无限循环。

调整后机器人就只会响应人类用户的消息,不会再出现重复发送的问题了。

内容的提问来源于stack exchange,提问作者Hyper

火山引擎 最新活动