Savoir si quelqu'un a un rôle
J'ai fait une simple citation de bot pour un serveur, mais l'admin ne veut mod+ les gens à être en mesure d'ajouter des guillemets pour éviter le spam. Je suis allé à la documentation, et a tout fait, mais je ne peux pas obtenir 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);
}
}
}
Il est très capricieux. Parfois, cela ne fonctionne pas si l'utilisateur a le mod rôle, la plupart du temps il l'habitude. Si je ne
console.log(message.memeber.roles.has(adminRole));
console.log(message.memeber.roles.has(modRole));
les deux seront de sortie pour de faux, mais les travaux?
Honnêtement, je n'ai aucune idée à ce stade.
OriginalL'auteur R. Gillie | 2017-07-26
Vous devez vous connecter pour publier un commentaire.
message.member.roles
est une collection. Au lieu d'obtenir des rôles de l'objet, puis de les chercher, il suffit de regarder pour le rôle directement dans la collection. Essayez ceci:Note, du nom de la fonction doit être le nom que vous avez mis dans la recherche, y compris toute émoticônes si il y a de tout dans le nom de rôle.
OriginalL'auteur Wright
La Carte.a méthode vérifie pour les touches, pas de valeurs, de sorte que vous aurez à utiliser les rôles les identifiants de la place.
message.member.roles.has(adminRole.id)
message.member.roles.has(modRole.id)
OriginalL'auteur bubmet
if(message.guild.roles.find(role => role.name === "VIP"))
OriginalL'auteur Kugel Blitz
L'discord.js l'api a été mis à jour et il ya une meilleure façon depuis
.exists()
a été désapprouvée.if (message.member.roles.some(role => role.name === 'Whatever')) {}
C'est mieux que
.find()
parce que.find()
retourne le rôle de l'objet (ou non) qui est ensuite convertie en une valeur de type boolean. Le.some()
méthode retourne un booléen par défaut..find()
OriginalL'auteur R. Gillie