首页 > 解决方案 > 定时器使用 setInterval 来宣布剩余时间

问题描述

我是 JS 的菜鸟,但我正在尝试边做边学!我已经下载了一个免费的 GitHub 项目(https://github.com/MrWall112/advanced-discord-bot-easy-install),我正在尝试自定义计时器。

到目前为止,我已经添加了一个setInterval事件,以便机器人每 30 秒宣布“30 秒过去了!” 3次。(通常,它将运行 30s、1m、1m30s 和 2m,因为它是用于私人战斗服务器的,以计时单个回合)。

使用setInterval,机器人宣布 30 秒剩余 3 次,即使计时器已经过去(.timer 60s,机器人仍然宣布 30 秒后超时)

我的问题是:有没有一种方法可以调整/更改setInterval,以便机器人可以宣布:

msg.channel.send(msg.author.toString() + ` 60 SECONDS REMAINING! `)
msg.channel.send(msg.author.toString() + ` 30 SECONDS REMAINING! `)
msg.channel.send(msg.author.toString() + ` 10 SECONDS REMAINING! `)

那么,不是宣布 30 秒过去了 3 次,而是在特定秒内宣布剩余时间?

这是我当前的 JS 代码:

var ms = require('ms')

exports.run = (bot, msg, params) => {

  let Timer = params[0];

  if(!params[0]){
    return msg.channel.send(":x: " + "| Please Enter a time period followed by \"s or m or h\"");
  }

  if(params[0] <= 0){
    return msg.channel.send(":x: " + "| Please Enter a time period followed by \"s or m or h\"");
  }

  msg.channel.send(":white_check_mark: " + "| Timer Started for: " + `${ms(ms(Timer), {long: true})}`)


  var i = 0;
  var a = setInterval(function() {
    if (i === 3) {
      clearInterval(a);
    }
    else {
      msg.channel.send(msg.author.toString() + ` 30 seconds passed! `)
      i++;
    }
  }
  , 30 * 1000);


  setTimeout(function(){
    msg.channel.send(msg.author.toString() + ` The Timer Has FINISHED!, it lasted: ${ms(ms(Timer), {long: true})}`)

  }, ms(Timer));
};

标签: javascriptnode.jstimerdiscorddiscord.js

解决方案


推荐阅读