如何使它正常工作,我不确定这里做错了什么。
let args = message.content.substring(PREFIX.length).split(" ");
const a = args;
const items = a.slice(a.indexOf('{') + 1, a.lastIndexOf('}')).split('}{')
switch(args[0]) {
case 'status':
message.channel.send("**Current Status:**");
con.query("SELECT * FROM games", function(err, result, fields) {
if(err) throw err;
Object.keys(result).forEach(function(key) {
var row = result[key];
message.channel.send('**' + row.name + '**' + ' - ' + '(' + row.description + ')' + ' - ' + '**' + row.status + '**');
});
});
break;
case 'add':
let name = items[1];
let desc = items[2];
let status = items[3];
console.log(items);
break;
我正尝试用{}分隔!ADD命令参数,以便该系统知道{}内的所有其他字符串都是下一个命令
!add {this is a argument}{another argument}{another argument sitting here}
答案 0 :(得分:1)
我认为问题是您正在拆分消息以解析出初始命令(添加),但是在进行下一个拆分之前没有将其重新结合在一起。我想您要将第二行更改为:
const a = args.slice(1).join(' ');
那应该使项数组为['this is a argument', 'another argument', 'another argument sitting here']
访问items数组时,请确保还使用了正确的索引。在此示例中,只有3个项目,因此有效索引将为(0,1,2)。 (在您的代码中,您正在访问3)
答案 1 :(得分:0)
使用轻量正则表达式的方法可能是:
let line="!add {this is a argument}{another argument}{another argument sitting here}"
let [command,argumentlist]=line.match(/!([^\s]+)\s+\{(.*)\}/).splice(1);
let arguments=argumentlist.split("}{");
console.log(command);
console.log(arguments);
match()
东西从最前面的!
对开始剥去{}
,然后split()
与代码中的一样。