我正在尝试执行“投票”命令,以查看谁投票。这是我当前的代码:
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
:我在做什么错了?
答案 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
仅是0
或1
。
要获取用户数量,您需要检查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`);
});