Discord机器人如何仅在用户回复自身消息时触发自动回复
Discord机器人仅响应回复自身消息的逻辑调整方案
问题根源
原有代码只判断了消息是否携带引用结构,没有校验引用的目标消息发送者身份,导致用户引用任意对象的消息只要匹配关键词就会触发机器人响应。
原有问题代码:
if message.reference: if "How are" in message.content.lower(): await asyncio.sleep(3) await message.channel.send(random.choice(list4), reference=message)
修复方法
补充一层身份校验:获取被引用的原消息对象,判断原消息的发送者是否为机器人本身,只有校验通过才执行回复逻辑。
带容错的修复后完整代码:
if message.reference: if "How are" in message.content.lower(): try: # 根据引用存储的频道ID获取对应频道实例 target_channel = client.get_channel(message.reference.channel_id) # 拉取被引用的原消息完整内容 replied_msg = await target_channel.fetch_message(message.reference.message_id) except: # 拉取失败场景(原消息已删除、无频道历史权限等)直接跳过,不触发响应 return # 核心校验:原消息作者不是机器人自身则直接终止逻辑 if replied_msg.author.id != client.user.id: return await asyncio.sleep(3) await message.channel.send(random.choice(list4), reference=message)
注意事项
- 需提前给机器人开通对应频道的
查看消息历史权限,否则拉取原消息的接口会调用失败 - 上述判断逻辑完全兼容Discord全场景引用规则,不会误触发普通公屏发言、@机器人、引用其他用户消息的场景,也不会漏掉合法的回复机器人的消息
- 如果需要更细粒度的控制,还可以在校验逻辑里补充判断被引用的机器人消息ID、消息内容等,实现指定机器人消息才触发对应回复的效果
内容的提问来源于stack exchange,提问作者Salih Erdem
相关产品推荐
相关产品推荐

