如何通过提及从用户获取GuildMember数据

时间:2018-10-29 20:27:46

标签: discord.js

我正在执行“用户信息”命令,该命令返回用户的Discord用户名,他们的ID,他们的服务器加入日期以及他们是否在线。我能够通过user.iduser.usernameuser.presence.status显示所有信息。但是,当我尝试使用user.joinedAt时,屏幕上会显示undefined

我知道这是因为User类和GuildMember类不同,并且GuildMember类包含一个User对象。
但是我的问题是:如何从用户提及中获取.joinedAt数据?

这是我当前的代码:

let user = message.mentions.users.first();
let embed = new Discord.RichEmbed()
  .setColor('#4286f4')
  .addField("Full Username:", `${user.username}#${user.discriminator}`)
  .addField("User ID:", `${user.id}`)
  .addField("Server Join Date:", `${user.joinedAt}`)
  .addField("Online Status:", `${user.presence.status}`)
  .setThumbnail(user.avatarURL);

message.channel.send(embed);

3 个答案:

答案 0 :(得分:0)

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

let user = message.mentions.users.first(),
  member;
if (user) member = message.guild.member(user);
if (member) embed.addField("Server Join Date:", `${member.joinedAt}`);

话虽如此,我不建议您这样做,因为这样做效率不高。只需从成员收藏中提及,然后再从中吸引用户即可。

let member = message.mentions.members.first(),
  user;
if (member) user = member.user;

这样做的缺点是,如果您也想从DM执行命令,则不能使用它。在这种情况下,您应该使用第一种方法。

答案 1 :(得分:0)

这是我的用户信息命令的代码:

if (msg.split(" ")[0] === prefix + "userinfo") {
  //ex `member @Rinkky
  let args = msg.split(" ").slice(1) // gets rid of the command
  let rMember = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0])) // Takes the user mentioned, or the ID of a user
  let micon = rMember.displayAvatarURL // Gets their Avatar

    if(!rMember) 
      return message.reply("Who that user? I dunno him.") // if there is no user mentioned, or provided, it will say this

      let memberembed = new Discord.RichEmbed()
      .setDescription("__**Member Information**__")
      .setColor(0x15f153)
      .setThumbnail(micon) // Their icon
      .addField("Name", `${rMember.username}#${rMember.discriminator}`) // Their name, I use a different way, this should work
      .addField("ID", rMember.id) // Their ID
      .addField("Joined at", rMember.joinedAt) // When they joined

      await message.channel.send(memberembed)
};

这将发送嵌入的用户信息,这是我当前的代码,并且

rMember.joinedAt

为我工作。

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

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

应该工作

答案 2 :(得分:0)

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