Полагаю, ваша проблема в функции setTimeout
.Давайте разберем ваш код.
var peopleReacted = embedSent.reactions.get("?").users;
var index = Math.floor(Math.random() * peopleReacted.length);
Прежде всего, ваш код выбирает всех пользователей, которые отреагировали «" », и сохраняет его в массиве peopleReacted
.После этого вы получаете случайный индекс из массива peopleReacted
, который, как я полагаю, вы позже захотите использовать для получения случайного победителя.
var winners = [];
var winnerMsg = "";
for (var i = 0; i < winners.length; i++){
winnerMsg += (winners[i].toString() + " ");
}
Затем мы попадаем в этот блок, гдеЯ думаю, что ваша проблема лежит.Здесь вы создаете пустой массив с именем winners
.Тогда у вас есть цикл for
для этого пустого массива.Поскольку массив пуст, цикл for
не будет запускаться ни разу.Следовательно, winnerMsg
остается пустым, и вы не получаете имя пользователя.
var haveHas = "has";
if (winners.length == 1){
haveHas = "has";
}
else{
haveHas = "have";
}
После этого это происходит.Вы определяете переменную, которой хотите присвоить значение «имеет» или «иметь» в зависимости от количества победителей.Вы проверяете длину массива winners
, но, как мы уже обсуждали ранее, этот массив пуст.Пустой массив имеет длину 0
, поэтому он войдет в оператор else
, объясняя, почему в результате вместо слова has есть слово "have".
Итак, вот моя попытка исправить вашу проблему.Попробуйте этот код и дайте мне знать, что происходит.
setTimeout(function() {
var peopleReacted = embedSent.reactions.get("?").users;
var winners = [];
// Checks if fewer people reacted than the winnerCount allows users to win
if (peopleReacted.length >= winnerCount) {
winners = peopleReacted;
} else {
// Gets as many random users from the peopleReacted as winnerCount allows users to win
for (var i = 0; i < winnerCount; i++){
var index = Math.floor(Math.random() * peopleReacted.length);
winners.push(peopleReacted[index]);
// After adding a user to winners, remove that item from the array to prevent him from winning multiple times
peopleReacted.splice(index, 1);
}
}
var winnerMsg = "User(s) ";
for (var i = 0; i < winners.length; i++){
// Add each winner to the winnerMsg
winnerMsg += (winners[i].toString() + ", ");
}
var haveHas;
if (winners.length === 1){
haveHas = "has";
}
else {
haveHas = "have";
}
message.channel.send(`${winnerMsg} ${haveHas} won ${item}`);
}, time * 1000); //--conversting seconds into miliseconds