bot.on('messageReactionAdd', async (reaction, user) => {
// Define the emoji user add
let role = message.guild.roles.find(role => role.name === 'Alerts');
if (message.channel.name !== 'alerts') return message.reply(':x: You must go to the channel #alerts');
message.member.addRole(role);
});
那是我的bot.js的一部分。我希望用户在某个频道中做出反应并收到角色警报
答案 0 :(得分:1)
这是一个快速答案,尽管为时已晚。因此,我将使用Discord.js v.12.x(或与Discord.js Master相同)来更新答案
bot.on('messageReactionAdd', async (reaction, user) => {
//Filter the reaction
if (reaction.id === '<The ID of the Reaction>') {
// Define the emoji user add
let role = message.guild.roles.cache.find((role) => role.name === 'Alerts');
if (message.channel.name !== 'alerts') {
message.reply(':x: You must go to the channel #alerts');
} else {
message.member.addRole(role.id);
}
}
});
答案 1 :(得分:0)
您还没有真正说明问题是什么,什么起作用,什么不起作用,但是我会在某些引起我注意的地方大加刺探。
对于初学者,您正在调用变量message
上的属性,而在提供的代码中,您并未创建/设置名为message
的变量。我的猜测是您想要添加了反应的消息。为此,您必须使用messageReactionAdd
事件中提供的MessageReaction
参数作为reaction
。
从此处开始,您可以在提供的代码中的任何地方将message.<something>
替换为reaction.message.<something>
。
还要注意的一点是,您将角色警报添加到message.member
。这将无法满足您的要求,因为它将把“警报”角色赋予原始邮件的作者。
您想要做的(是我想做的)是获取刚刚对表情符号做出反应的用户,并为其分配警报角色。您必须首先在行会中找到该成员,然后为他们分配警报角色。为此,您必须使用User
参数并找到正确的Member
,因为您不能向User对象添加角色,但可以向Member对象添加角色。下面是一些代码,有望使您走上正确的轨道。
// Fetch and store the guild (the server) in which the message was send.
const guild = reaction.message.guild;
const memberWhoReacted = guild.members.find(member => member.id === user.id);
memberWhoReacted.addRole(role);
答案 2 :(得分:0)
尽管未定义@(...)
,但您仍在使用message.member
变量。