我的命令:它可以执行所需的操作。我可以提及用户或使用其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')
答案 0 :(得分:0)
错误告诉您member
是null
。当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...
}