Здесь на самом деле нужно ответить на три разных вопроса.Все они связаны между собой, но у каждого есть разные прямые ответы.
Как проверить, есть ли у сообщения автор роли администратора ?
Итак, связав все это вместе:
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;