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