使用 ReactionCollector 显示对消息做出反应的用户
Show users that reacted to a message with a ReactionCollector
我正在尝试创建一个 "vote" 命令,您可以在其中查看谁投票了。这是我当前的代码:
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`);
});
})
我一直在尝试用投票用户的姓名替换 "someone voted!":我该怎么做?
另一件事是,如果没有人做出反应,collected.size
就是 0
,但无论是 1 还是 5 个用户做出反应,它总是 1
:我做错了什么?
I've been trying to replace "someone voted!" with the name of the user who voted: how can I do this?
您无法从 'collect' 事件处理程序中获取用户,因为参数是 MessageReaction
:您只能获取 all 个用户反应了。
您唯一可以做的就是将过滤器修改为如下所示:
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
is 0
if no one reacted, but its always 1 no matter if 1 or 5 users reacted: what am I doing wrong there?
问题是 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`);
});
我正在尝试创建一个 "vote" 命令,您可以在其中查看谁投票了。这是我当前的代码:
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`);
});
})
我一直在尝试用投票用户的姓名替换 "someone voted!":我该怎么做?
另一件事是,如果没有人做出反应,collected.size
就是 0
,但无论是 1 还是 5 个用户做出反应,它总是 1
:我做错了什么?
I've been trying to replace "someone voted!" with the name of the user who voted: how can I do this?
您无法从 'collect' 事件处理程序中获取用户,因为参数是 MessageReaction
:您只能获取 all 个用户反应了。
您唯一可以做的就是将过滤器修改为如下所示:
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
is0
if no one reacted, but its always 1 no matter if 1 or 5 users reacted: what am I doing wrong there?
问题是 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`);
});