Javascript 设计一个discord机器人命令模块

Javascript 设计一个discord机器人命令模块,javascript,node.js,linux,discord,Javascript,Node.js,Linux,Discord,我目前正在设计一个Discord机器人。我正在开发一个模块,以便轻松地发出命令 这是当前我的命令模块 module.exports = { add: function(name, help, permissions, callback) { var command = {}; command['name'] = name; command['help'] = help; command['permissions'] = permissions; comma

我目前正在设计一个Discord机器人。我正在开发一个模块,以便轻松地发出命令

这是当前我的命令模块

module.exports = {
add: function(name, help, permissions, callback) {
    var command = {};
    command['name'] = name;
    command['help'] = help;
    command['permissions'] = permissions;
    command['callback'] = callback;

    list.push(command);
},

parse: function(message, data) {
    var args = message.split(' ');

    for (var i = 0; i < list.length; i++) {
        var command = list[i];

        if (command.name == args[0]) {
            isAuthorized(command.permissions, data, function() {
                console.log("RAN");
                command.callback(data, args);
            });
        }
    }
},

get: function() {
    return list;
}
}
这一切都很好,但我担心的设计。我不太喜欢它,因为它可能会让人讨厌。例如,上面的代码只需用空格解析命令。像这样:

!ping -d
它将调用ping函数并检查args的第一个元素是否包含“-d”标志。我希望这是类似于Linux终端,因为我可以得到。上面的内容很简单,但是一个接受多个标志的命令呢?例如:

!ping -d -help
这显然会打印出“ding”,如果实现,它还应该打印一些描述命令和它的参数的内容

但是如果我写了这样的东西呢

!ping -help -d -f -m
那怎么办?我宁愿没有一堆条件语句

权限

我考虑的另一个问题是权限级别。我在数据库中设置了每个角色

+----+-----------+
| id | name      | 
+----+-----------+
|  1 | guest     |
|  2 | member    |
|  3 | mod       |
|  4 | developer |
|  5 | admin     |
|  6 | master    |
|  8 | owner     |
+----+-----------+
这些角色是使用此命令创建的

roles.createRole = function(name) {
database.insert('roles', ['name'], ['"' + name + '"']);
}

commands.add('createrole', 'Create a new role.', ['master'], function(data, args) {
var role = args[1];

if (role) {
    roles.createRole(role);
}
 });
如果他们拥有名为“master”的权限,他们就可以创建一个角色

这就是我存储用户信息的方式

-------------------+ 
| id | username      | discord_id         | permissions                                           
|
+----+---------------+--------------------+-------------------------------------------------------+
|  1 | kurieita      | 000000000 |   {"test":true,"master":true,"admin":true,"guest":true} |
显然,我有这个角色,可以执行命令。但如果我把某人设为“管理员”,我也希望他们拥有版主权限。我还得给他们主持人的权力

想法

以下是我的想法(当我写这篇文章时)

  • 为database.roles添加“value”字段,并检查用户权限级别是否大于所需的权限字段

  • 我考虑采用更面向对象的方法。沿着这条线的东西

    var命令=新命令(名称、说明);
    setCallback(函数(){});
    setFlag(名称,函数(){})

    我真的没有想过这件事,也没有想过它会如何运作

  • 我的另一个想法与我现在的做法相似,就是

    命令。添加(名称、描述、权限、函数(数据、参数、标志){}

当名称和描述是字符串时,权限是一个索引数组。数据是一个基于不一致信息(userID、channelID等)的数组,args是一个带值的数组。例如:
!message text
“text”将是一个arg,标志将包含任何以“-”开头的内容。例如
!ping-d
,“d”将位于flags数组中

问题

  • 我将如何为我的discord机器人命令模块实现一个类似Linux的解析器
  • 处理权限级别的最佳方法是什么
感谢您的帮助。
感谢高级版。

这个问题可能太宽泛(可能是基于观点,但宽泛是更大的问题)。尽量避免一次问太多问题,这里有4个问题。好的,编辑并修复。
-------------------+ 
| id | username      | discord_id         | permissions                                           
|
+----+---------------+--------------------+-------------------------------------------------------+
|  1 | kurieita      | 000000000 |   {"test":true,"master":true,"admin":true,"guest":true} |