web-dev-qa-db-fra.com

Savoir si quelqu'un a un rôle

J'ai créé un simple bot de cotation pour un serveur, mais l'administrateur ne veut que les mod + personnes puissent ajouter des guillemets pour éviter le spam. Je suis allé voir la documentation et j'ai tout fait, mais je ne peux pas que cela fonctionne. Voici ce que j'ai

//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);            
        }   
    }
}

C'est très capricieux. Parfois, cela fonctionnera si l'utilisateur a le rôle mod, la plupart du temps, il ne le fera pas. Si je fais 

console.log(message.memeber.roles.has(adminRole));
console.log(message.memeber.roles.has(modRole));

les deux vont afficher faux, mais vont-ils fonctionner? Honnêtement, je n'en ai aucune idée pour le moment.

5
R. Gillie

message.member.roles est une collection. Au lieu d'obtenir l'objet de rôles, puis de le rechercher, recherchez simplement le rôle directement dans la collection. Essaye ça:

else if (command === "addquote" && arg) {
    if(message.member.roles.find("name", "Admin") || message.member.roles.find("name", "Mod")){
        //Rest of your code
    }

Remarque , le nom du rôle doit être le nom que vous avez mis dans la recherche, y compris tous les émoticônes s'il y en a dans le nom du rôle.

9
Wright