Как проверить, есть ли у определенного пользователя c роль? Discord js - PullRequest
2 голосов
/ 07 апреля 2020

Я знаю, как проверить, имеет ли отправитель сообщения роль:

if(message.member.roles.has(role.id)) {
  console.log(`Yay, the author of the message has the role!`);
} else {
  console.log(`Nope, noppers, nadda.`);
}

Однако как я могу проверить, имеет ли указанный c пользователь (с помощью идентификатора пользователя) указанную c роль?

    var authorID = "111111111111111111"

    //Find role
    var role = message.guild.roles.find(role => role.name === "Private Splash Ping");
    //Find member
    let member = message.guild.members.get(authorID);

    console.log(member.roles.has(role))
    if(member.roles.has(role)) {
        roleadded = "User already has Private spalsh role."
    } else {
        message.member.addRole(role);
        roleadded = "Added private splash role."
    }

member.roles.has (role) всегда возвращает false, и я подтвердил, что переменные-члены и роли корректны с помощью точек останова.

Есть ли что-то, что я здесь упускаю?

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

message.member.roles считается GuildMemberRoleManager ( Документация ), для доступа к коллекции ролей необходимо получить доступ к свойству .cache, которое является коллекцией. Эта коллекция затем имеет функцию метода .has(...). ( Документация )

Таким образом, вместо этого вы хотите получить доступ к message.member.roles.cache.has(...)

0 голосов
/ 08 апреля 2020

В версии 12.0.x (в версии v12.1.1) есть еще много изменений. Основным из них является команда message.channel.send и кеш.

Один из них - это

Извините, что опоздал.

...