discord.py中使用on_raw_reaction_add时如何检测机器人添加了消息反应
检测反应添加者是否为机器人的实现方法
on_raw_reaction_add 事件触发时会传入 RawReactionActionEvent 类型的 payload 对象,其中携带了添加反应的用户ID,你只需要通过该ID拉取用户对象,判断内置的bot属性即可完成区分。
核心实现代码
你可以直接在事件函数开头加入判断逻辑,匹配机器人触发的场景后走对应处理分支即可:
@client.event # 如果你用的是Bot实例就替换为@bot.event async def on_raw_reaction_add(payload): # 拉取添加反应的用户完整对象 reaction_user = await client.fetch_user(payload.user_id) # 判断是否为机器人 if reaction_user.bot: # 此处编写机器人添加反应后的处理逻辑 print(f"检测到机器人{reaction_user.name}添加了反应:{payload.emoji}") return # 下方编写普通用户添加反应后的处理逻辑
注意事项
- 如果你已经开启了
members网关意图,也可以用client.get_user(payload.user_id)替代fetch_user,不需要异步等待性能更高,但如果用户不在本地缓存中会返回None,通用性弱于fetch_user。 - 不要直接通过
payload.member判断身份,如果反应添加在私聊消息中,payload.member会返回None,通过用户ID拉取用户对象的方式兼容所有场景。
内容的提问来源于stack exchange,提问作者Shlok Sharma
相关产品推荐
相关产品推荐

