向对机器人消息问题做出反应的用户添加角色

时间:2019-04-09 21:06:10

标签: discord discord.js

我有一个命令,机器人会响应并添加一条消息,如果键入命令的人对此做出了反应,他们将获得角色,但是我希望任何人都能对它做出反应,就像我只想要输入一次。它有效,但仅适用于键入命令的人。

我尝试使用其他解决方案,但似乎没有其他解决方法。

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 :(得分:0)

messageReactionAdd事件具有两个参数-MessageReactionUser
在您的示例中,这些将是reactionuser。您正在使用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对象上,因为您只能向行会中的某人添加角色。