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 < 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 机器人的经验升级系统?