Discord.js 如何通过提及从用户处获取GuildMember数据

Discord.js 如何通过提及从用户处获取GuildMember数据,discord.js,Discord.js,我正在生成一个“用户信息”命令,返回用户的不一致用户名、ID、服务器加入日期以及是否在线。我可以通过user.id、user.username和user.presence.status显示所有信息。但是当我尝试使用user.joinedAt时,我会在显示屏上看到undefined 我知道这是因为User类和GuildMember类不一样,GuildMember类包含一个User对象。 但我的问题是:如何从我的用户那里获得.joinedAt数据 这是我目前的代码: let user=message

我正在生成一个“用户信息”命令,返回用户的不一致用户名、ID、服务器加入日期以及是否在线。我可以通过
user.id
user.username
user.presence.status
显示所有信息。但是当我尝试使用
user.joinedAt
时,我会在显示屏上看到
undefined

我知道这是因为
User
类和
GuildMember
类不一样,
GuildMember
类包含一个
User
对象。
但我的问题是:如何从我的用户那里获得
.joinedAt
数据

这是我目前的代码:

let user=message.notices.users.first();
let embed=new Discord.RichEmbed()
.setColor(“#4286f4”)
.addField(“完整用户名:”,`${user.Username}#${user.discriminator}`)
.addField(“用户ID:,`${User.ID}`)
.addField(“服务器加入日期:”,`${user.joinedAt}`)
.addField(“联机状态:,`${user.presence.Status}`)
.set缩略图(user.avatarURL);
message.channel.send(嵌入);

从技术上讲,你可以从公会获取成员,然后使用
GuildMember.joinedAt
:因为
User
类代表每个公会中的用户,所以你总是需要
GuildMember
来获取特定公会的信息

let user=message.notices.users.first(),
成员;
如果(用户)成员=message.guild.member(用户);
if(member)embed.addField(“服务器加入日期:”,“${member.joinedAt}”);
说到这里,我不建议你这么做,因为这不是很有效。只需从成员集合中获取提及,然后从中获取用户

let member=message.notices.members.first(),
用户;
如果(member)user=member.user;

这样做的缺点是,如果您希望您的命令也可以从DMs执行,那么就不能使用它。在这种情况下,您应该使用第一种方法。

您可以通过从公会获取成员,然后使用
GuildMember.joinedAt
:由于
User
类代表每个公会中的用户,因此您始终需要
GuildMember
来获取有关特定公会的信息

let user=message.notices.users.first(),
成员;
如果(用户)成员=message.guild.member(用户);
if(member)embed.addField(“服务器加入日期:”,“${member.joinedAt}”);
说到这里,我不建议你这么做,因为这不是很有效。只需从成员集合中获取提及,然后从中获取用户

let member=message.notices.members.first(),
用户;
如果(member)user=member.user;

这样做的缺点是,如果您希望您的命令也可以从DMs执行,那么就不能使用它。在这种情况下,您应该使用第一种方法。

以下是“我的用户信息”命令的代码:

if(msg.split(“”[0]==前缀+“userinfo”){
//前成员@Rinkky
让args=msg.split(“”).slice(1)//去掉该命令
让rMember=message.guild.member(message.indications.users.first()| | message.guild.members.get(args[0])//获取提到的用户或用户的ID
让micon=rMember.displayAvatarURL//获取他们的化身
如果(!rMember)
return message.reply(“那个用户是谁?我不知道他是谁。”)//如果没有提到或提供用户,它会这样说
让memberembed=newdiscord.RichEmbed()
.setDescription(“\uuu**成员信息**\uuuuuux”)
.setColor(0x15f153)
.set缩略图(micon)//它们的图标
.addField(“Name”,`${rMember.username}#${rMember.discriminator}`//他们的名字,我用了另一种方式,应该可以用
.addField(“ID”,rMember.ID)//它们的ID
.addField(“在加入时加入”,rMember.joinedAt)//当它们加入时
等待消息.channel.send(memberembed)
};
这将发送他们的用户信息嵌入,这是我的当前代码和

rMember.joinedAt
他对我有用

编辑: 在再次查看您的问题后,我发现我不需要发布所有内容,您无法获得加入,因为这只是提及。试试这个:

let user=message.guild.member(message.indications.users.first())

应该可以工作

以下是“我的用户信息”命令的代码:

const member = message.channel.guild.members.cache.find(member => member.user == message.mentions.users.first())
if(msg.split(“”[0]==前缀+“userinfo”){
//前成员@Rinkky
让args=msg.split(“”).slice(1)//去掉该命令
让rMember=message.guild.member(message.indications.users.first()| | message.guild.members.get(args[0])//获取提到的用户或用户的ID
让micon=rMember.displayAvatarURL//获取他们的化身
如果(!rMember)
return message.reply(“那个用户是谁?我不知道他是谁。”)//如果没有提到或提供用户,它会这样说
让memberembed=newdiscord.RichEmbed()
.setDescription(“\uuu**成员信息**\uuuuuux”)
.setColor(0x15f153)
.set缩略图(micon)//它们的图标
.addField(“Name”,`${rMember.username}#${rMember.discriminator}`//他们的名字,我用了另一种方式,应该可以用
.addField(“ID”,rMember.ID)//它们的ID
.addField(“在加入时加入”,rMember.joinedAt)//当它们加入时
等待消息.channel.send(memberembed)
};
这将发送他们的用户信息的嵌入,这是我当前的代码,并且

rMember.joinedAt
他对我有用

编辑: 在再次查看您的问题后,我发现我不需要发布所有内容,您无法获得加入,因为这只是提及。试试这个:

let user=message.guild.member(message.indications.users.first())
应该有用

const member = message.channel.guild.members.cache.find(member => member.user == message.mentions.users.first())