#javascript #node.js #discord #discord.js
#javascript #node.js #Discord #discord.js
Вопрос:
Итак, я попытался создать код, чтобы определенная команда выполнялась только тогда, когда у пользователя есть определенная роль, но это не сработало. Я не уверен, что это из-за того, что у меня слишком много ролей, но вот код:
case "test":
if (
!message.member.roles.cache.find(
(r) => r.name === "test1",
"test2",
"test3",
"test4",
"test5",
"test6"
)
)
return message.reply(
'You don't have permission to execute that command! The role "test1", "test2", "test3", "test4", "test5", or "test6" is needed to execute that command.'
);
message.channel.send("this is a test");
Ответ №1:
r.name === "test1", "test2", "test3", "test4", "test5", "test6"
использует оператор запятой, поэтому это эквивалентно just "test6"
, что, вероятно, не то, что вы имели в виду.
Попробуйте что-то вроде ["test1", "test2", "test3", "test4", "test5", "test6"].includes(r.name)
.
Ответ №2:
Как упоминал Томас:
r.name === "test1", "test2", "test3", "test4", "test5", "test6"
использует оператор запятой, поэтому это эквивалентно just"test6"
, что, вероятно, не то, что вы имели в виду.
Вместо этого вы должны использовать Array.prototype.includes
:
if (
!message.member.roles.cache.some((r) =>
['test1', 'test2', 'test3', 'test4', 'test5', 'test'].includes(r.name)
)
)
return message.reply(
'You don't have permission to execute that command! The role "test1", "test2", "test3", "test4", "test5", or "test6" is needed to execute that command.'
);
Вот пример фрагмента кода .includes()
метода в действии:
const word = 'hello'
// returns 'false', as none of the words in this array match `hello`
console.log(['greetings', 'salutations', 'good morning'].includes(word));
// but, if we add `hello` to the array...
console.log(['greetings', 'salutations', 'good morning', 'hello'].includes(word));
Ответ №3:
if(!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send('You dont have the right permissions to do that.')
Вы можете использовать эту строку кода. Также вы можете изменить «АДМИНИСТРАТОР» на что-то другое, например, «BAN_MEMBERS» или «KICK_MEMBERS» и т.д.