You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord机器人Bot2需区分Bot1消息触发场景的功能需求

解决方案

核心思路是区分Bot1的消息是否是回复用户的"check"指令:如果是回复消息,说明是用户触发的,直接忽略;如果是Bot1主动发起的无回复消息,再执行回复逻辑。

修改你的代码,在原有判断条件里增加not message.reference即可:

@client.event
async def on_message(message):
    if message.guild.id in svrs:
        # 新增判断:Bot1的消息不是回复消息时才响应
        if message.author.id == int(bot1) and f"<@{my_user_id}>" in message.content and not message.reference:
            await send_delayed_msg(message.channel, f"<@{my_user_id2}> im here", 1.91)

补充说明

  • message.reference是Discord.py里用来判断消息是否是回复某条消息的属性:如果Bot1的消息是回复用户的"check"指令,这个属性会指向用户的那条消息;如果是Bot1主动发的,这个属性为None,not message.reference就会成立。
  • 如果Bot1主动发的消息也存在回复其他消息的场景,你可以进一步判断回复的消息内容是否包含"check",比如:
    @client.event
    async def on_message(message):
        if message.guild.id in svrs:
            if message.author.id == int(bot1) and f"<@{my_user_id}>" in message.content:
                # 检查是否是回复消息,且回复内容包含check
                if message.reference:
                    referenced_msg = await message.channel.fetch_message(message.reference.message_id)
                    if "check" in referenced_msg.content.lower():
                        return  # 是用户触发的,跳过回复
                await send_delayed_msg(message.channel, f"<@{my_user_id2}> im here", 1.91)
    

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:50:03