Discord JS Giveaway命令,输出

时间:2018-11-29 23:20:58

标签: javascript output discord discord.js

我正在尝试将其包裹住,我确定这是一个容易解决的问题,但是任何人都可以帮助使输出合理。

while len(full) == 3:
x = random.random()
if 0 <= x <.33:
    if full[0].isEmpty() == True:
        full.pop(0)
    else:
    Runway.enqueue(airplane)

没有抓住用户并与输出一起显示

2 个答案:

答案 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