Heartbeats.js Commander.js参数实例化超出预期

时间:2017-12-08 16:19:08

标签: javascript node.js discord.js node-commander

所以我试图用discord-js.commando和commander.js作为参数解析器制作一个discord bot ..

命令看起来像这样

!notif <command> [options]
!notif add alarm -b 2pm //will invoke heart('username').CreateEvent
!notif list //will show list of added CreateEvent
!notif cancel [alarm_id]

所以在示例中,如果我调用

!请注意添加警报

它将创建一个 heart ,其中包含调用该命令的用户的名称,并在名称末尾创建一个带有随机数的事件 alarm_123

第一次 我调用它会告诉用户“alarm_9已添加” 它第一次被调用,它工作得很好,但第二次我称之为它,它将创建2个事件而不是SUPPOSED只有1;

第二次 将按此输出

"Alarm_11 added"
"Alarm_13 added"

第三次 将按此输出

"Alarm_14 added"
"Alarm_15 added"
"Alarm_16 added"

所以当我查看!notif list时,它会显示我有超过预期的事件,每次调用事件时都会增加

我已经在 CREATEEVENT 之上添加了一些保护条款,只是为了确定具有该名称的心是否存在

add(options) {
if (!heartbeats.heart(author.username)) {
            this.heart = heartbeats.createHeart(2000, author.username);
            msg.reply(`${this.heart.name} is created`);
 }
....... // rest of code that CreateEvent
msg.reply('${alarmName} added'}
}

我的commander.js解析器看起来像这样,似乎每次调用它,它解析最后一个命令或者我不知道的任何东西,但它解析

const argument = require('commander');

    run(args, fake) {
    if (fake === true) args.unshift('', ''); //since commander.js are intended for CLI i need to unshift the parser, so it works with discord, 

    argument
      .version('0.0.1')
      .command('add <alarmName>')
      .option('-b, --before [time] <n>', 'before time')
      .option('-a, --after [time] <n>', 'after time')
      .action((alarmName, options) => {
        this.add(options); //
      });

    argument
      .command('list')
      .description('List added notification')
      .action(() => {

      });

    argument
      .command('cancel <objectName>')
      .description('Cancel current notification')
      .action((objectName) => {
        heartbeats.heart(this._options.owner).killEvent(objectName);
        console.log(`${objectName} is killed!`); //the second time it is called it will give 2 times output
      });

    argument
      .command('info')
      .action(() => {

      });

    argument.parse(args);

    return argument;
  }

这个问题的问题,我应该为每个调用它们的用户创建一个子进程,以便它们自己隔离空间吗?或哪种方式最好?...请点亮我。我已经尝试找到适合我的目标的npm包,大多数软件包已被弃用或不完全适合,只有心跳似乎工作,我需要某种计时器/间隔管理器,可以被杀死,添加到列表,也从那以后commander.js用于CLI我需要取消解析器,所以它适用于不和谐,

0 个答案:

没有答案