UserInfo Discord Bot命令。 TypeError:无法读取null的属性“角色”

时间:2020-09-08 11:47:45

标签: javascript node.js discord discord.js

我的命令:它可以执行所需的操作。我可以提及用户或使用其ID

let args = message.content.split(' ');

if (args.length > 2) return message.channel.send('Only mention one user!');
if (!args[1]) return message.channel.send('Mention someone!');

if (args[1]) {
 let member = message.guild.member(
  message.mentions.members.first() || message.guild.members.cache.get(args[1])
 );

 let roles = member.roles.cache
  .filter((r) => r.name !== '@everyone')
  .map((role) => role.name)
  .join('\n');
 if (roles.length === 0) roles = '-';

 if (member) {
  let embed = new Discord.MessageEmbed()
   .setColor(tesseract.Constants.COLORS.TEAL)
   .setTitle('User Info')
   .setThumbnail(member.user.displayAvatarURL())
   .setAuthor(
    `${member.user.tag} (${member.id})`,
    member.user.displayAvatarURL()
   )
   .addField('**Username:**', `${member.user.username}`, true)
   .addField('**Discriminator:**', `${member.user.discriminator}`, true)
   .addField('**ID:**', `${member.user.id}`, true)
   .addField('**Status:**', `${member.user.presence.status}`, true)
   .addField('**Joined On:**', `${member.joinedAt.toLocaleString()}`, true)
   .addField(
    '**Created On:**',
    `${member.user.createdAt.toLocaleString()}`,
    true
   )
   .setDescription(roles)
   .setFooter(
    `© ${message.guild.me.displayName}`,
    this.client.user.displayAvatarURL()
   );

  message.channel.send(embed);
 } else {
  message.channel.send(`Could not find that member`);
 }
}

现在我想补充一点,就是我可以搜索不和谐之外的用户。 (Bot被添加到2个不和谐中)所以我想在第二个不和谐中执行user命令,并从第一个不和谐中搜索用户。我用client.users.cache.get('user id')完成了此操作,但是由于角色功能,我得到了TypeError: Cannot read property 'roles' of null。如果我删除角色功能,它将正常工作。 在搜索client.users.cache.get('user id')

时如何忽略角色函数

1 个答案:

答案 0 :(得分:0)

错误告诉您membernull。当args[1]不是有效的ID或用户不在行会中时,就会发生这种情况。

在获得成员角色之前,请检查是否提供了有效成员:

// You don't need to wrap this in a message.guild.member()
let member = message.mentions.members.first() || message.guild.members.cache.get(args[1]);
if (member) {
  let roles = member.roles.cache
    .filter((r) => r.name !== '@everyone')
    .map((role) => role.name)
    .join('\n');
  // rest of code...
}