Почему мой код разрешения роли не работает? (discord.js )

#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» и т.д.