我有一个命令,机器人会响应并添加一条消息,如果键入命令的人对此做出了反应,他们将获得角色,但是我希望任何人都能对它做出反应,就像我只想要输入一次。它有效,但仅适用于键入命令的人。
我尝试使用其他解决方案,但似乎没有其他解决方法。
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);打印出所有有反应的人,但仍然不会赋予他们角色。
答案 0 :(得分:0)
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
对象上,因为您只能向行会中的某人添加角色。