Discord Giveaway bot всегда отдает бота победителю

#javascript #node.js #discord.js

#javascript #node.js #discord.js

Вопрос:

Бот должен возвращать сообщение «никто не вошел», когда никто не участвует в розыгрыше, но даже если это так, он все равно говорит «победитель @Dbot». Я что-то упустил в коде?

     let msg = await message.channel.send(
      "**🥳GIVEAWAY🥳**",
      {
        embed: {
          title: `${(args.slice(2, args.length)).join(" ")}`,
          color: 3447003,
          description: `React with 🎉 to enter!nTime to enter: ${args[0]}nWinners: ${args[1]}`,
          footer: {
            text: `dbot 2021 © giveaway ends ${endTime.toLocaleTimeString()}`
          }
        }
      });
      await msg.react('🎉')
      setTimeout(() => {
          msg.reactions.cache.get('🎉').users.remove(msg.author.id)
          setTimeout(() => {
              let winner = msg.reactions.cache.get('🎉').users.cache.random();
              if (msg.reactions.cache.get('🎉').users.cache.size < 1) {
                msg.channel.send(`No one entered giveaway :sadge:`);
              }
              if (!msg.reactions.cache.get('🎉').users.cache.size < 1) {
                console.log(winner);
                msg.channel.send(`${winner} is our winner!🎉🎉🎉 check 1`);
              }
          }, 3000);
      }, timerMilliseconds);
 

Ответ №1:

Это потому, что вы сначала проверяете, если users.cache.size меньше 1, то if (!msg.reactions.cache.get('🎉').users.cache.size < 1) .

users.cache.size вернет число, а в JavaScript !number вернет логическое значение. Проверьте фрагмент ниже:

 const num0 = 0;
const num1 = 1;
const num2 = 2;

console.log(num0, !num0);
console.log(num1, !num1);
console.log(num2, !num2); 

Это означает, что с помощью вашего второго оператора if вы проверяете значение if false меньше, чем 1 , что верно в JavaScript.

Чтобы исправить это, вам просто нужно преобразовать второй оператор if в оператор else:

 if (msg.reactions.cache.get('🎉').users.cache.size < 1) {
  msg.channel.send(`No one entered giveaway :sadge:`);
} else {
  console.log(winner);
  msg.channel.send(`${winner} is our winner!🎉🎉🎉 check 1`);
}
 

Комментарии:

1. Это решение дает мне тот же результат.. «@dbot — наш победитель!:tada::tada:: tada:»

Ответ №2:

Вам нужно включить MEMBERS намерение в консоли разработчика Discord и добавить это намерение в свой ClientOptions .

Комментарии:

1. Как это связано с этим вопросом?

2. Я неправильно истолковал вопрос и воспринял его как «бот всегда выбирает себя», что и решило бы это.