Discord JS //通过响应消息来尝试添加角色

时间:2019-11-27 11:58:43

标签: javascript bots discord.js args

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的一部分。我希望用户在某个频道中做出反应并收到角色警报

3 个答案:

答案 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变量。