Discord Giveaway 机器人始终将机器人作为赢家

Posted

技术标签:

【中文标题】Discord Giveaway 机器人始终将机器人作为赢家【英文标题】:Discord Giveaway bot always gives the bot as winner 【发布时间】:2021-05-09 06:09:33 【问题描述】:

当没有人进入赠品时,机器人应该返回“没有人进入”,但即使是这样,它仍然会显示“@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 &lt; 1)

users.cache.size 将返回一个数字,而在 javascript!number 将返回一个布尔值。检查下面的sn-p:

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

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

这意味着在第二个 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`);

【讨论】:

那个解决方案给了我同样的输出.. "@dbot 是我们的赢家!:tada::tada::tada:"【参考方案2】:

您需要在 Discord 开发者控制台上启用 MEMBERS 意图并将该意图添加到您的 ClientOptions

【讨论】:

这与这个问题有什么关系? 我误读了这个问题,并将其视为“机器人总是选择自己”,这将解决这个问题。

以上是关于Discord Giveaway 机器人始终将机器人作为赢家的主要内容,如果未能解决你的问题,请参考以下文章

我将如何使用两个不同版本的 discord.js | Discord.js 机器人

如何将 discord.js 机器人部署到 Cloud Functions?

如何将等级添加到 discord.py 机器人的经验升级系统?

我正在做一个 Discord 机器人,在将机器人连接到语音频道时遇到问题,有啥建议吗?

如何将 discord.py 机器人状态设置为听/看/等

如何将此 discord.js 机器人连接到 uptimerobot.com?