首页 > 解决方案 > Discord.JS 命令问题

问题描述

我一直在研究这个命令(我有问题),当用户说 时u?hi,机器人会在将你放入集合之前回复。然后,您将进入 20 秒的超时状态,当您处于超时状态时,如果您键入u?hi,机器人会回复gotta wait x seconds。当超时结束时,他们可以打字u?hi并且循环继续进行。

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

Bot 一直在倒数

这是我的代码:

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`);
          }

部分到代码的其他地方并对其进行更改,但似乎没有任何效果。我能做些什么呢?

标签: javascriptbotsdiscord.js

解决方案


是的,这对您的代码很正常。您需要做的是创建一个名为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");
  }
});

如果您有任何问题,请不要犹豫发表评论!


推荐阅读