0

そこで、引数パーサーとして discord-js.commando と commander.js を使用して、discord ボットを作成しようとしました..

コマンドは次のようになります

!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]

たとえば、私が呼び出すと

!notif アラームを追加

そのコマンドを呼び出したユーザーの名前でハートを作成し、名前の末尾に乱数を付けてイベントを作成します ( alarm_123 )

初めて呼び出すと、最初に呼び出されたときに「alarm_9が追加されました」とユーザーに が、問題なく動作しますが、2回目に呼び出すと、SUPPOSED 1つだけではなく2つのイベントが作成されます。

2回目はこのように出力さ

"Alarm_11 added"
"Alarm_13 added"

3回目はこのように出力さ

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

そのため、!notif リストで確認すると、予想以上のイベントがあり、イベントを呼び出すたびに増加することが示されます

その名前のハートが存在するかどうかを確認するために、すでに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 を対象としています。パーサーを unshift する必要があるため、discord で動作します。

4

0 に答える 0