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

Posted

技术标签:

【中文标题】向对机器人消息问题作出反应的用户添加角色【英文标题】:Add role to user who reacts to bot message problem 【发布时间】:2019-08-31 05:59:00 【问题描述】:

我有一个命令,机器人会回复一条消息并添加一个反应,如果输入命令的人对它做出反应,他们就会得到这个角色,但我希望任何人都能像我一样对它做出反应想打一次。它有效,但仅适用于输入命令的人。

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

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)
        
    );

控制台.log(user.id);打印所有做出反应的人,但仍然不会给他们角色。

【问题讨论】:

你不应该这样做。查找反应收集器。这将完全满足您的需求,而无需添加许多事件 【参考方案1】:

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 对象上,因为您只能为公会中的某个人添加角色。

【讨论】:

这给了我“user.addRole 不是函数” 啊,您的用户需要成为 GuildMember 尝试做var guildmember = guild.fetchMember(user); client.on('messageReactionAdd', (reaction, user) => if(reaction.emoji.name === "?") const guild = client.guilds.get('563851342532313088'); console.log(user.id); const role = guild.roles.find(role => role.name === 'Todosquad'); const guildmember = guild.fetchMember(user); guildmember.addRole(role); ); 还给了我“guildmember.addrole 不是函数” discord.js.org/#/docs/main/stable/class/… 确实如此 我对帖子进行了编辑,您错过了fetchMemberasync 并且需要.thenawait 的事实

以上是关于向对机器人消息问题作出反应的用户添加角色的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Discord API 代表用户添加对消息的反应?

Discord 机器人消息不收集反应

我的反应角色机器人编写了嵌入消息,但反应没有添加角色

当有人对消息做出反应时,我如何让我的 discord.js 机器人添加角色?

角色反应 Discord Bot

messageReactionAdd 事件不再赘述,无需解释