如何在 guildMemberAdd 中使用 awaitReactions

2022-01-10 00:00:00 discord node.js javascript discord.js

我在用户连接到我的服务器时向他们发送消息,我想通过点击反应继续授权.
我怎样才能创建这个?我正在使用以下代码:

I send messages to users when they connect to my server, and I want to continue authorization by clicking on reactions.
How can I create this? I'm using the following code:

robot.on("guildMemberAdd", (gMembAdd) =>
{ 
      gMembAdd.send(`Hi ${gMembAdd.toString()} welcome to the server Test`).then(msg => {
       msg.react('✅')
      .then(() => msg.react('❎'));  
//--------------------Developmend-------------------------------------
  let filter = (reaction, user) => reaction.emoji.name === '✅' || reaction.emoji.name === '❎'; 

  let col = msg.createReactionCollector(filter); 

  col.on('collect', r => 
  {
      if (r.users.last().id !== msg.author.id)
      {
      gMembAdd.addRole(gMembAdd.guild.roles.find("name", "Autorize")).catch(console.error)

      r.remove(r.users.last().id); 

     console.log(` ${gMembAdd.user.id} и ${gMembAdd.user.username} and ${r.emoji}`);
      }
  });         

  //--------------------------------------------------------------------
  });

如果反应是肯定的,我需要进行反应检查和角色分配,否则就踢.我不明白如何继续.

I need a reaction check and role assignment if the response is positive and kick if not. I don't understand how to continue.

这段代码会正确使用吗?

Will this code be used correctly?

推荐答案

要检查反应,您可以使用 MesssageReaction.emoji.name,就像你在上面所做的那样.
对于另一件事,您可以使用 GuildMember.addRole() &GuildMember.kick().
以下是您可以查看的示例:

To check the reaction you can use MesssageReaction.emoji.name, as you did above.
For the other thing, you can use GuildMember.addRole() & GuildMember.kick().
Here's a sample you can check out:

robot.on('guildMemberAdd', async member => {
  let msg = await member.send(`Hi ${member} welcome to the server Test`);
  await msg.react('✅');
  await msg.react('❎');

  msg.createReactionCollection(r => ['✅', '❎'].includes(r.emoji.name))
    .on('collect', r => { 
      if (r.emoji.name == '✅') 
        member.addRole(member.guild.roles.find("name", "Authorize"))
          .then(() => { console.log(`Added ${member.user.username} (${member.id}).`); })
          .catch(console.error);
      else if (r.emoji.name == '❎') member.kick("You got rejected.");

      r.remove(r.users.last());
    });
});

您还可以使用 消息.awaitReactions(),这样比较好,因为加了reaction之后就不继续了:

You can also use Message.awaitReactions(), which is better because it doesn't go on after the reaction is added:

robot.on('guildMemberAdd', async member => {
  let msg = await member.send(`Hi ${member} welcome to the server Test`);
  await msg.react('✅');
  await msg.react('❎');

  msg.awaitReactions(r => ['✅', '❎'].includes(r.emoji.name), {max: 1})
    .then(collected => {
      let r = collected.first();

      if (r.emoji.name == '✅') 
        member.addRole(member.guild.roles.find("name", "Authorize"))
          .then(() => { console.log(`Added ${member.user.username} (${member.id}).`); })
          .catch(console.error);
      else if (r.emoji.name == '❎') member.kick("You got rejected.");

      r.remove(r.users.last())
    });
});

相关文章