user.joinedAt显示为当前时间而非用户加入日期该如何解决?
问题原因
User是 Discord 平台的全局用户对象,仅存储用户名、ID、头像这类全平台通用的用户属性,本身不存在joinedAt字段。你调用user.joinedAt返回当前时间,通常是两个原因:要么是你的代码逻辑中提前给user对象额外赋值了当前时间的joinedAt属性,要么是依赖的封装库对不存在的属性做了默认返回当前时间的兜底处理。- 你查到的
member.joinedAt才是正确的属性:Member是用户在单个服务器内的成员对象,joinedAt存储的就是该用户加入当前服务器的时间。
解决方法
你已经有定义完成的 user 对象,只需要通过用户ID从当前服务器的成员列表中拉取对应的 member 对象即可,参考代码:
// 需保证你的 bot 已经开启 GUILD_MEMBERS 网关意图,且拥有读取服务器成员列表的权限 // guild 为当前消息/交互所属的服务器对象,user 为你已经定义好的用户对象 const targetMember = await guild.members.fetch(user.id); console.log(targetMember.joinedAt); // 输出对应用户的加入服务器时间
如果你的代码是在消息回复、斜线命令交互的回调逻辑中,很多场景可以直接从事件参数中获取 member 对象,无需额外拉取,比如斜线命令回调中直接取 interaction.member 即可。
内容的提问来源于stack exchange,提问作者rainbow
相关产品推荐
相关产品推荐

