我正在使用discord.js v12在discord机器人中执行用户信息命令。我唯一遇到的问题是,如果用户没有任何角色,则最高角色显示为@@ everyone,而不是@everyone。因此,我想避免这种情况,如果用户没有任何角色,它将说“此用户在此服务器上没有角色”。我的代码在这里(仅与角色有关的位):
const { DiscordAPIError } = require("discord.js");
const Discord = require("discord.js");
const moment = require("moment");
module.exports = {
name: "profile",
description: "The bot will return the info about the user",
execute(message, args){
let userinfoget = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member
var highestRoleID = userinfoget.roles.highest.id;
var joined = moment(userinfoget.joinedAt).format('DD/MM/YY, HH:mm:ss')
console.log(`Highest role = ${highestRoleID}`);
console.log(`User = ${userinfoget}`);
console.log(userinfoget.roles)
if(!userinfoget.roles) console.log('no roles')
const embed = new Discord.MessageEmbed()
.setColor(userinfoget.displayHexColor)
.setAuthor(`${userinfoget.user.tag}`, userinfoget.user.displayAvatarURL())
.addFields(
{name: `User ping`,
value: `<@${userinfoget.id}>`}
)
.addFields(
{name: `User ID`,
value: `${userinfoget.id}`}
)
.addFields(
{name: 'Joined Server',
value: moment(userinfoget.joinedAt).format('LLLL') + ' ' + timeFromJoiningServerMessage} // or moment(userinfoget.joinedAt).format('DD/MM/YY, HH:mm:ss')
)
.addFields(
{name: 'Joined Discord',
value: moment(userinfoget.user.createdAt).format('LLLL')} // or moment(userinfoget.createdAt).format('DD/MM/YY, HH:mm:ss')
)
.addFields(
{name: 'Highest role',
value: `<@&${highestRoleID}>`}
)
.addFields(
{name: 'Online Status',
value: `${status}`}
)
.addFields(
{name: 'Is a bot?',
value: `${isBot}`}
)
.setFooter('Bot made by mkpanda')
message.channel.send(embed);
}
如您所见,我尝试做!userinfoget.roles
,但是在记录它时,它显示了有关用户的所有信息,而不仅仅是角色。如何检测用户是否有任何角色?在此先感谢:)
答案 0 :(得分:1)
GuildMember.roles.cache
是Collection
(非常类似于Array
)。
因此,您可以使用Collection#filter
并检查Role
的名称是否等于@everyone
。这将从Collection
中删除@everyone
角色,您可以检查GuildMember
是否具有任何角色。
.addFields({
name: 'Highest role',
value: message.member.roles.cache.filter(role => role.name !== "@everyone").size > 0 ? message.member.roles.highest : "This member has no roles."
})
答案 1 :(得分:-2)
您可以使用此;
userinfoget.roles.cache.size === 1 ? 'No roles' : userinfoget.roles.cache.map(r => '<@&' + r.id + '>').join(', ')
因为如果没有用户没有角色,那么他们将只是“ @everyone”,因此角色大小将为一个。您可以使用此信息来查看用户是否具有角色