Я пытался заменить "кто-то голосовал!"с именем пользователя, который проголосовал: как я могу это сделать?
Вы не можете получить пользователя из обработчика события '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 независимо от того, отреагировал ли 1 или 5 пользователей: что я там не так делаю?
Проблема в том, что 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`);
});