如何比较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
相关产品推荐
相关产品推荐

