Discord.JS命令问题

时间:2020-05-12 00:02:07

标签: javascript bots discord.js

我一直在处理此命令(我有一个问题),当用户说u?hi时,机器人会在将您放入集合之前进行回复。然后,您将超时20秒钟,并且在超时期间,如果键入u?hi,则漫游器会回复gotta wait x seconds。超时结束后,他们可以输入u?hi并且周期继续进行。

但是,我遇到了一个问题。在我的代码中,完成u?hi之后,我陷入了超时(就像我计划的那样)。但是,在超时期间,如果我输入u?hi,而让超时时间为1秒,则机器人会说gotta wait 19 more seconds而不是机器人说gotta wait 19 more seconds,然后开始递减所有方式为0。这就是我的意思(屏幕截图):

Bot is counting all the way down

这是我的代码:

const intervalSet = new Set();

bot.on("message", msg => {
  let args = msg.content.substring(prefix.length).split(" ");
  switch (args[0]) {
    case "hi":

      var interval = 20;
      var intervalID;

      if (intervalSet.has(msg.author.id)) {
        intervalID = setInterval(() => {
          interval -= 1;
          if (interval !== 0 && args[0] === 'hi') {
            msg.channel.send(`gotta wait ${interval} more seconds`);
          }
          if (interval === 0) {
            clearInterval(intervalID);
            msg.channel.send(`Ended`);
            intervalSet.delete(msg.author.id);
          }
        }, 1000);
      } else {
        intervalSet.add(msg.author.id);
        msg.channel.send("heyy");
      }
  }
});

我尝试移动

 if (interval !== 0 && args[0] === 'hi') {
            msg.channel.send(`gotta wait ${interval} more seconds`);
          }

分开编写代码的其他位置并进行修改,但似乎没有任何效果。我该怎么办?

1 个答案:

答案 0 :(得分:0)

是的,这在您的代码中是正常的。您需要做的是创建一个名为cooldown的地图。用户ID将与时间相关联,因此您可以计算用户的冷却时间。

这是您代码的更新:

const cooldown = new Map();

bot.on("message", msg => {
  let args = msg.content.substring(prefix.length).split(" ");
  switch (args[0]) {
    case "hi":

      var interval = 20000; // use milliseconds instead of seconds
      var intervalID;

      if (cooldown.has(msg.author.id)) {
        let cooldownTime = Date.now() - cooldown.get(msg.author.id);
        let timeToWait = (interval-cooldownTime)/1000;
        if(cooldownTime < interval) {
            return message.channel.send(`gotta wait ${timeToWait} more seconds`);
        }
      }

      cooldown.set(msg.author.id, Date.now());
      msg.channel.send("heyy");
  }
});

如有任何疑问,请随时发表评论!