所以我尝试制作一个不和谐的机器人,用 discord-js.commando 和 command.js 作为参数解析器..
命令看起来像这样
!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 added” 第一次调用它,它工作得很好,但我第二次调用它,它会创建 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'}
}
我的 command.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 包,大多数包已被弃用或不完全适合,只有心跳似乎有效,我需要某种计时器/间隔管理器,可以被杀死,添加到列表中,也因为command.js 是为 CLI 设计的