Javascript 如何检查用户是否有任何角色discord.js

Javascript 如何检查用户是否有任何角色discord.js,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,我正在使用discord.js v12在我的discord bot中生成一个用户信息命令。我唯一的问题是,如果用户没有任何角色,最高的角色显示为@everyone,而不是@everyone。所以我想避免它,如果用户没有任何角色,它会说“这个用户在这个服务器上没有角色”。我的代码在这里(仅与角色有关的部分): const{DiscordAPIError}=require(“discord.js”); const Discord=require(“Discord.js”); 恒力矩=要求(“力矩”)

我正在使用discord.js v12在我的discord bot中生成一个用户信息命令。我唯一的问题是,如果用户没有任何角色,最高的角色显示为@everyone,而不是@everyone。所以我想避免它,如果用户没有任何角色,它会说“这个用户在这个服务器上没有角色”。我的代码在这里(仅与角色有关的部分):

const{DiscordAPIError}=require(“discord.js”);
const Discord=require(“Discord.js”);
恒力矩=要求(“力矩”);
module.exports={
名称:“个人资料”,
description:“机器人将返回有关用户的信息”,
执行(消息,参数){
让userinfoget=message.indications.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'))
log(`Highest role=${highestRoleID}`);
log(`User=${userinfoget}`);
log(userinfoget.roles)
如果(!userinfoget.roles)console.log('无角色')
const embed=new Discord.MessageEmbed()
.setColor(userinfoget.displayHexColor)
.setAuthor(`${userinfoget.user.tag}`,userinfoget.user.displayAvatarURL())
addFields先生(
{name:`User ping`,
值:``}
)
addFields先生(
{name:`User ID`,
值:`${userinfoget.id}`}
)
addFields先生(
{name:'已加入服务器',
值:矩(userinfoget.joinedAt).format('LLLL')+''+timeFromJoiningServerMessage}//或矩(userinfoget.joinedAt).format('DD/MM/YY,HH:MM:ss'))
)
addFields先生(
{name:'加入了不和谐',
值:矩(userinfoget.user.createdAt).format('LLLL')}//或矩(userinfoget.createdAt.format('DD/MM/YY,HH:MM:ss'))
)
addFields先生(
{name:'最高角色',
值:``}
)
addFields先生(
{name:'联机状态',
值:`${status}`}
)
addFields先生(
{name:'是机器人吗?',
值:`${isBot}`}
)
.setFooter('mkpanda制作的Bot')
message.channel.send(嵌入);
}
如您所见,我尝试过执行
!userinfoget.roles
,但在记录时,它会显示有关用户的所有信息,而不仅仅是角色。我如何检测用户是否具有任何角色?提前感谢:)

您可以使用此功能

userinfoget.roles.cache.size==1?“没有角色”:userinfoget.roles.cache.map(r=>”).join(“,”)
因为如果没有用户没有角色,那么他们将仅为“@everyone”,因此角色大小为1。您可以使用此信息查看用户是否有角色

是a(非常类似于a)。 因此,您可以使用并检查的名称是否等于
@everyone
。这将从中删除
@everyone
角色,并且您可以检查是否有任何角色


.addFields({
名称:'最高角色',
值:message.member.roles.cache.filter(role=>role.name!==“@everyone”).size>0?message.member.roles.highest:“此成员没有角色。”
})

我强烈建议您访问有用的链接:


我强烈建议使用以下方法过滤掉名为“@everyone”的角色。哦,是的,我们可以使用:
userinfoget.roles.cache.filter(r=>r.name!='@everyone').map(r=>'')| |“None”
您不需要进行
>0
比较;如果
size
属性是
0
,那么它就已经是错误的了。使用
addFields()
的关键在于您可以一次添加多个字段。我建议您压缩嵌入结构。
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);
}