NodeJS,DiscordJS。用{}分隔参数

时间:2019-05-23 14:05:35

标签: javascript node.js discord.js

如何使它正常工作,我不确定这里做错了什么。

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}

2 个答案:

答案 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()与代码中的一样。