Как я могу проверить, есть ли у автора сообщения роль администратора с помощью Discord.js? - PullRequest
0 голосов
/ 08 июля 2019

Я создаю бот Discord и хочу иметь оператор if, который будет выполняться только в том случае, если у автора сообщения есть роль администратора в гильдии.разрешения, но это означает, что на всех серверах, на которых работает бот, должна быть одна и та же роль имени.

Как проверить, есть ли у автора сообщения роль администратора?(Роль имеет разрешение администратора.)

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Здесь на самом деле нужно ответить на три разных вопроса.Все они связаны между собой, но у каждого есть разные прямые ответы.


Как проверить, есть ли у сообщения автор роли администратора ?

Итак, связав все это вместе:

if (message.member.roles.get('roleIDHere')) console.log('User is an admin.');

или

if (message.member.roles.find(role => role.name === 'Admin')) console.log('User is an admin.');

Как проверить, имеет ли роль автора сообщения разрешение администратора ?

  • Опять же, нам нужно использовать GuildMember из Message.member.
  • И снова нам нужно использовать коллекцию GuildMember.roles.
  • И ... дежа вю ... вы можетеискать в коллекции с помощью Collection.find().
  • . На этот раз вам нужно специально проверить Role.hasPermission() в функции предиката.

Например:

if (message.member.roles.find(role => role.hasPermission('Administrator'))) console.log('User is an admin.');

Вы также можете применить эту концепцию к любой конкретной роли.


Bestметод для этой ситуации ...

Как проверить, есть ли у сообщения у автора разрешение администратора ?

  • Мы продолжаем использовать Message.member для доступа к GuildMember.
  • Однако вы можете проверить все разрешений участника сразу с помощью метода GuildMember.hasPermission().

Рассмотрим этот короткий пример:

if (message.member.hasPermission('ADMINISTRATOR')) console.log('User is an admin.');

Быстрый, верно?


Убедитесь, что вы проверяете, что сообщение, которое получает ваш клиент, не DM перед попыткой проверить, является ли пользователь администратором.Message.member не определено, когда сообщение не отправлено в гильдию, и попытка его использования приведет к ошибкам.

Используйте это условие, которое прекратится, если сообщение является DM:

if (!message.guild) return;
0 голосов
/ 08 июля 2019

Для объекта GuildMember доступна функция hasPermission .Таким образом, вы можете просто сделать member.hasPermission('ADMINISTRATOR')

Если вас интересуют все другие строки, которые разрешаются разрешением, вы можете найти их в discord.js документах .

...