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
相关产品推荐
相关产品推荐

