Мне нужно получить все роли от пользователя, который сделал реакцию, с помощью кода вроде:

module.exports = {
    name: 'messageReactionAdd',
    async execute(reaction, user) {

        if (user.partial) {
            try {
                await user.fetch();
            }
            catch (error) {
                console.error('Erreur en récupérant le user : ', error);
                return;
            }
            console.log(user.roles);
        }
    },
};

Журнал возвращает «неопределенное»

Но я понятия не имею, как это сделать правильно после прочтения документации, и я не знаю, сколько вопросов о stackoverflow.

Я надеюсь, что кто-то может помочь мне.

0
Photo Cale 20 Сен 2022 в 21:55
Что не так с вашей попыткой? Есть ошибки? Неожиданное поведение?
 – 
caTS
20 Сен 2022 в 21:59
У меня в логе "не определено".
 – 
Photo Cale
20 Сен 2022 в 22:01
У пользователей нет ролей. Члены делают.
 – 
caTS
20 Сен 2022 в 22:01

1 ответ

Лучший ответ

У пользователей нет ролей, поэтому вы не можете использовать user.roles для получения их ролей. Вы должны проверить, из какой гильдии пришло сообщение, и получить члена из гильдии. Получите гильдию с помощью reaction.message.guild, но сначала проверьте, существует ли она, потому что если сообщение было в ЛС, то гильдии в ней не будет.

if (reaction.message.guild) {
    const member = reaction.message.guild.members.cache.get(user.id);
}

После этого вы можете получить член, как обычно, через кеш. Имейте в виду, что член может не существовать в кеше, поэтому вам также необходимо проверить, существует ли член, прежде чем получать его роли:

if (reaction.message.guild) {
    const member = reaction.message.guild.members.cache.get(user.id);

    if (member) console.log(member.roles);
}
0
caTS 20 Сен 2022 в 22:08
Хорошо, теперь я получил это, это работает. Большое тебе спасибо.
 – 
Photo Cale
20 Сен 2022 в 22:13