显示对ReactionCollector对消息有反应的用户

时间:2019-03-11 01:19:21

标签: javascript discord discord.js

我正在尝试执行“投票”命令,以查看谁投票。这是我当前的代码:

message.channel.send("React with  to vote").then(Msent =>
  Msent.react('')).then(Msent => {
  const collector = Msent.message.createReactionCollector((reaction, user) => reaction.emoji.name === '', {
    time: 15000
  });

  collector.on('collect', r => {
    if (r.emoji.name === '') {
      message.channel.send("someone voted!");
    }
  });
  collector.on('end', collected => {
    message.channel.send(`${collected.size} users voted`);
  });
})

我一直试图替换“有人投票!”投票用户的名字:我该怎么做?

另一件事是,如果没有人做出反应,collected.size就是0,但是无论有1个或5个用户作出反应,它总是1:我在做什么错了?

1 个答案:

答案 0 :(得分:1)

  

我一直试图替换“有人投票!”投票用户的名字:我该怎么做?

您无法从'collect'事件处理程序中获取用户,因为参数是MessageReaction:您只能获取所有做出反应的用户。
您唯一可以做的就是将过滤器修改为如下形式:

const filter = (reaction, user) => {
  if (reaction.emoji.name === '') {
    message.channel.send(`${user} voted!`); // This will mention the user
    message.channel.send(`${user.tag} voted!`); // This will only say their name
    return true;
  } else return false;
}
const collector = Msent.createReactionCollector(filter, { time: 15000 });

  

collected.size如果没有人做出反应,则为0,但是无论1或5个用户做出了反应,它始终为1:我在哪里做错了?

问题是collected包含收集的反应,而不是用户,并且由于您的过滤器仅接受一个表情符号,因此其size仅是01
要获取用户数量,您需要检查MessageReaction.users.size

collector.on('end', collected => {
  let n_users = 0;
  if (collected.size > 0) { // Check if there was any vote
    let reaction = collected.first(); // Take the first (and only) 'type' of reaction
    n_users = reaction.users.size; // Get the number of users that used it
  }
  message.channel.send(`${n_users} users voted`);
});