Добавить роль пользователю, который реагирует на проблему с сообщением бота - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть команда, и бот отвечает сообщением и добавляет реакцию на нее, если человек, который набирает команду, реагирует на нее, он получает роль, но я хочу, чтобы кто-нибудь мог реагировать на нее, как только яхочу набрать его один раз.это работает, но только для человека, набирающего команду.

Я пробовал использовать другие решения, но ни одно другое, похоже, не работает.

client.on("message", (message) => {

    client.on('messageReactionAdd', (reaction, user) => {
        if(reaction.emoji.name === "?") {
            const guild = client.guilds.get('563851342532313088')
            const member = message.member;
            console.log(user.id);
            const role = guild.roles.find(role => role.name === 'Todosquad');
            member.addRole(role)
        }
    });

Console.log (user.id);печатает всех, кто отреагировал, но это все равно не даст им роли.

1 Ответ

0 голосов
/ 10 апреля 2019

Событие messageReactionAdd имеет два параметра - MessageReaction и User.
В вашем примере это будут reaction и user.Вы используете параметр reaction, чтобы убедиться, что реакция добавлена ​​именно так, как вам нужно.Однако, когда речь идет о добавлении роли к человеку, который добавил реакцию, вы ссылаетесь на member, который на самом деле является лицом, отправившим сообщение (message.member), а не лицом, добавившим реакцию к сообщению.

Чтобы добавить роль любому, кто реагирует, вам необходимо
Изменить:

member.addRole(role)

Для любого асинхронного события с: (client.on('messageReactionAdd', async (reaction, user) =>)

const guildmember = await guild.fetchMember(user);
guildmember.addRole(role);

Или выполните:

guild.fetchMember(user).then(guildmember => guildmember.addRole(role));

Редактировать: функция addRole существует только для объекта guildMember, так как вы можете только добавить кому-то рольв гильдии.

...