我正在尝试将其包裹住,我确定这是一个容易解决的问题,但是任何人都可以帮助使输出合理。
while len(full) == 3:
x = random.random()
if 0 <= x <.33:
if full[0].isEmpty() == True:
full.pop(0)
else:
Runway.enqueue(airplane)
没有抓住用户并与输出一起显示
答案 0 :(得分:0)
我想你想做的就是让做出反应的人成为现实。我认为它不起作用的原因是,消息需要保存在缓存中才能进行编辑或从中获取响应。我建议您有一个单独的命令,完成后将存储执行此操作的人员的姓名。然后,当计时器用尽时,它将取出存储的数据并从那里进行抽奖。
答案 1 :(得分:0)
我猜你的问题出在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
语句,解释为什么结果中的单词为“ have”而不是“ has”。
所以这是我尝试解决您的问题。尝试一下这段代码,让我知道发生了什么。
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