Discord机器人时间间隔混乱

时间:2018-10-08 23:26:30

标签: javascript node.js discord discord.js

我正在尝试在Discord机器人上执行倒计时计时器之类的操作。 这是我正在使用的rn。

        //Command base
    client.on("message", async message => {

      var sender = message.author;

      const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
      const command = args.shift().toLowerCase();

      //timetestvars
      var starttimer = 0;
      var counter = 10;

        //countdown timer
          if (command === 'testcount'){
              while(starttimer <= 9){
                setTimeout(function(){message.channel.send(counter), starttimer++, counter--},1*1)
              }

          };
});

但是当我键入命令时,什么也没有发生,就像...什么都没有。该僵尸程序只是崩溃了,我知道我做错了什么,但我不知道该怎么办。

任何人都可以告诉我我做错了什么,我该如何解决,该代码如何真正起作用,为什么会发生冲突?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

args.shift()返回一个数字,因此当您运行args.shift().toLowerCase()时,会抛出TypeError

尝试使用args.slice(1)获取除第一个元素外的每个元素的新数组。

此外,args.slice(1)返回一个数组,该数组与.toLowerCase()方法不兼容。

尝试更换

const command = args.shift().toLowerCase();

使用

const command = args.slice(1)[0].toLowerCase();

----或----

const command = args[0].toLowerCase();

答案 1 :(得分:0)

您崩溃的原因是因为机器人在 starttimer甚至达到9前多次尝试重复同一件事而耗尽了内存。

while (starttimer <= 9) {
    setTimeout(function(){message.channel.send(counter), starttimer++, counter--},1*1) // Note that setTimeout waits in milliseconds, not seconds (also 1*1=1) so the correct number to put here would be 1000
}

正确的方法是这样的:

var starttimer = 10; // set this to your desired start time
for (let i=0; i <= starttimer; i++) {
    setTimeout(function(){
        message.channel.send(i);
    }, 1000*(starttimer-i));
}

您甚至可以通过执行var starttimer = args[0]来获取开始时间,因此您将使用!testcount 10的命令(假设您将前缀设置为!)来启动10秒计时器。请注意,如果有延迟,则是由于Discord API冷却造成的,除了将计时器设置得更慢(例如将1000*(starttimer-i)更改为2000*(starttimer-i))之外,没有太多解决方法。

P.S。我只是注意到这个问题是一年多以前问的,但我希望这对某人有帮助:P