Finden Sie heraus, wenn jemand eine Rolle
Habe ich ein einfaches Zitat bot für einen server, aber der admin will nur mod+ Menschen werden in der Lage, fügen Sie Anführungszeichen, um spam zu vermeiden. Ich ging an die Dokumentation und Tat alles, aber ich kann nicht ankommen dieses zu wirken. Hier ist, was ich habe:
//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);
}
}
}
Es ist sehr pingelig. Manchmal wird es funktionieren, wenn der Benutzer über die mod-Rolle, die meisten der Zeit es nicht. Wenn ich
console.log(message.memeber.roles.has(adminRole));
console.log(message.memeber.roles.has(modRole));
beide wird der Ausgang auf false, aber funktionieren???
Ehrlich gesagt, ich habe keine Ahnung an dieser Stelle.
InformationsquelleAutor R. Gillie | 2017-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
message.member.roles
ist eine Sammlung. Statt die Rollen-Objekt, dann suchen Sie, suchen Sie einfach die Rolle direkt in die Sammlung. Versuchen Sie dies:Hinweis, die Rolle, der name muss den Namen, die Sie in das finden, einschließlich aller emojis, wenn es irgendeine in den Namen der Rolle ein.
InformationsquelleAutor Wright
Den Karte.hat Methode prüft die Schlüssel, nicht die Werte, so müssen Sie die Rollen-id' s statt.
message.member.roles.has(adminRole.id)
message.member.roles.has(modRole.id)
InformationsquelleAutor bubmet
if(message.guild.roles.find(role => role.name === "VIP"))
InformationsquelleAutor Kugel Blitz
Den discord.js -api wurde aktualisiert und es gibt einen besseren Weg, da
.exists()
ist veraltet.if (message.member.roles.some(role => role.name === 'Whatever')) {}
Dies ist besser als
.find()
weil.find()
gibt das role-Objekt (oder undefiniert) die wird dann umgewandelt in einen booleschen Wert. Die.some()
Methode gibt einen boolean-standardmäßig..find()
InformationsquelleAutor R. Gillie