Javascript 找出某人是否有角色

Javascript 找出某人是否有角色,javascript,node.js,roles,discord.js,Javascript,Node.js,Roles,Discord.js,我为服务器制作了一个简单的报价机器人,但管理员只希望mod+用户能够添加报价以避免垃圾邮件。我查阅了文档,做了所有的事情,但是我不能让它工作。以下是我所拥有的: //other code else if (command === "addquote" && arg) { let adminRole = message.guild.roles.find("name", "Admin"); let modRole = message.guild.roles.find(

我为服务器制作了一个简单的报价机器人,但管理员只希望mod+用户能够添加报价以避免垃圾邮件。我查阅了文档,做了所有的事情,但是我不能让它工作。以下是我所拥有的:

//other code
else if (command === "addquote" && arg) {
    let adminRole = message.guild.roles.find("name", "Admin");
    let modRole = message.guild.roles.find("name", "Mod");

    if(message.member.roles.has(adminRole) || message.member.roles.has(modRole)){
        const hasArr = arr.some((el) => {
            return el.toLowerCase().replace(/\s/g, '') === arg.toLowerCase().replace(/\s/g, '');
        });

        if(hasArr){
            message.channel.send(arg.replace(/\s+/g,' ').trim() + " is already a Quote");
        } else {
            fs.appendFileSync('./Quotes.txt', '\r\n' + arg);
            message.channel.send("Quote added: " + arg);
            arr.push(arg);            
        }   
    }
}
这很挑剔。有时,如果用户具有mod角色,它会起作用,但大多数情况下不会。如果我这样做

console.log(message.memeber.roles.has(adminRole));
console.log(message.memeber.roles.has(modRole));
两者都将输出为false,但是否有效?
老实说,我现在还不知道。

message.member.roles是一个集合。与其获取roles对象,然后查找它,不如直接在集合中查找角色。试试这个:

else if (command === "addquote" && arg) {
    if(message.member.roles.find(r => r.name === "Admin") || message.member.roles.find(r => r.name === "Mod")){
        // The rest of your code.
    }
注意,角色名称必须是您在find方法中输入的名称,包括角色名称中的任何表情符号。

该方法检查键,而不是值,因此您必须使用角色ID

message.member.roles.has(adminRole.id)


message.member.roles.has(modRole.id)
if(message.guild.roles.find(role=>role.name==“VIP”)
discord.js api已经更新,并且有更好的方法,因为
.exists()
已经被弃用

if(message.member.roles.cache.some(role=>role.name==='where')){}


这比
.find()
更好,因为
.find()
返回角色对象(或未定义),然后将其转换为布尔值。默认情况下,
.some()
方法返回一个布尔值。

这在12.2.0版中适用

if(message.member.roles.cache.find(r => r.name === "Admin")) {
    // Your code
}

您也可以使用
r.id
来检查角色id

我可能晚了,但我也遇到了同样的问题,我解决问题的方法是搜索角色,然后检查变量是否有任何内容。 假设我想检查邮件作者是否具有管理员角色:

client.on('message',message =>{

     adminrole = message.member.roles.cache.find(role => role.name == "Admin");
     if(adminrole != null){memberIsAdmin = true;}else{memberIsAdmin = false;}

}
也许这会对某人有所帮助,请注意,我对js tho不是很有经验:)
祝你们度过愉快的一天,这在最新版本的Discord.js(v12)中不起作用。您需要添加
if(message.guild.roles.cache.find(roles=>role.name==“VIP”)
Discord.js版本:v12(稳定)。

如果您有
角色ID
,则可以使用
.has()
检查GuildMember对象上的
.roles
集合是否包含它。如果您不知道ID,并且希望检查类似“Mod”角色的内容,您可以使用
.some()

示例IF


啊,谢谢,但是当我进行更正并添加.id部分时,我在执行if语句时遇到了一个错误,错误是“找不到null的属性”。这将从服务器返回角色,但不会验证它是否已应用于用户。@JackNicholson
if(!message.member.roles.some(role=>role.name=='where'))
这似乎适用。这是最新的答案。
member.roles.cache.has('role-id-here');
// returns true if the member has the role

member.roles.cache.some(role => role.name === 'Admin');
// returns true if any of the member's roles is exactly named "Admin"
const roleById = member.roles.cache.has('123456...');
//or if you want in message
const rolebyIdMessage = message.member.roles.cache.has('12346....');

if(member.roles.cache.has(roleById) return message.reply("Member With Role!");