【问题标题】: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);打印所有做出反应的人,但仍然不会给他们角色。

【问题讨论】:

  • 你不应该这样做。查找反应收集器。这将完全满足您的需求,而无需添加许多事件

标签: discord discord.js


【解决方案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 不是函数”
  • 我对帖子进行了编辑,您错过了fetchMemberasync 并且需要.thenawait 的事实
猜你喜欢
  • 1970-01-01
  • 2020-07-16
  • 2020-11-21
  • 2021-11-13
  • 2021-09-12
  • 2017-11-01
  • 2021-05-22
  • 2021-01-18
  • 2021-05-01
相关资源
最近更新 更多