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

如何比较Discord服务器中保存的message.author与私信频道on_reaction_add事件返回的user对象

解决Discord中私信User与服务器Member的比较问题

这个问题我之前做Discord机器人时也踩过坑!其实关键在于Discord用户的唯一标识是全局通用的,和他们所在的频道是服务器还是私信完全无关。

核心思路

不管是私信频道on_reaction_add事件里的user对象,还是服务器on_message事件中获取的message.author(也就是Member对象),它们都属于Discord用户体系的一部分——Member本质是User的子类,继承了所有User的核心属性,其中最关键的就是**id属性**。这个ID是全局唯一的,同一个用户在任何上下文里的ID都不会变。

正确的比较方式

你不需要关心频道ID的问题,直接比较两者的id就可以判断是不是同一个用户:

# 假设你之前在on_message事件中保存了member
saved_member = message.author

# 在on_reaction_add事件中进行判断
async def on_reaction_add(reaction, user):
    # 通过ID比较确认是同一个用户
    if user.id == saved_member.id:
        print("这是同一个用户!")
        # 在这里执行你的逻辑

为什么不能直接比较对象实例?

可能你试过直接写if user == saved_member,结果发现返回False——这是因为虽然是同一个用户,但不同事件触发时生成的是不同的对象实例,内存地址不一样,所以直接比较对象会不相等。但它们的id是绑定到用户本身的,所以用ID比较才是可靠的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:27:28