Таймер, использующий setInterval для объявления оставшегося времени - PullRequest
0 голосов
/ 28 января 2019

Я новичок с JS, но я пытаюсь учиться на практике!Я скачал бесплатный проект GitHub (https://github.com/MrWall112/advanced-discord-bot-easy-install) и пытаюсь настроить таймер.

До сих пор я добавил событие setInterval, чтобы каждые 30 секунд бот объявлял«30 секунд прошло!» 3 раза (обычно он будет работать в течение 30 с, 1 м, 1 м 30 с и 2 м, как для частного боевого сервера, чтобы синхронизировать отдельные раунды).

При использовании 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));
};
...