带有子分类文件夹的命令处理程序

清醒XIV

这是我目前使用的命令处理程序,它按预期工作。

try {
  let ops = {
    active: active
  }

  let commandFile = require(`./commands/${cmd}.js`)
  commandFile.run(client, message, args, ops);
} catch (e) {
  console.log(e);
}

但正如您所看到的,它只是读入命令文件夹并.js从那里提取文件。
我想要做的是根据我自己的“强迫症”目的对命令进行子分类,以便我可以更好地跟踪它们。
这个命令处理程序有什么办法可以这样做吗?

此外,我已经尝试过discord.js-commando,但我个人并不喜欢它使用的命令结构。

费德里科·格兰迪

我会使用这个require-all包。

假设您有一个如下的文件结构:

commands:
  folder1:
    file1.js
  folder2:
    subfolder:
      file2.js

您可以使用require-all完全要求所有这些文件:

const required = require('require-all')({
  dirname: __dirname + '/commands', // Path to the 'commands' directory
  filter: /(.+)\.js$/, // RegExp that matches the file names
  excludeDirs: /^\.(git|svn)|samples$/, // Directories to exclude
  recursive: true // Allow for recursive (subfolders) research
});

上面的required变量将如下所示:

// /*export*/ represents the exported object from the module
{
  folder1: { file1: /*export*/ },
  folder2: { 
    subfolder: { file2: /*export*/ } 
  }
}

为了获得使用递归函数扫描该对象所需的所有命令:

const commands = {};

(function searchIn(obj = {}) {
  for (let key in obj) {
    const potentialCommand = obj[key];

    // If it's a command save it in the commands object
    if (potentialCommand.run) commands[key] = potentialCommand;
    // If it's a directory, search recursively in that too
    else searchIn(potentialCommand);
  }
})(required);

当你想执行命令时,只需调用:

commands['command-name'].run(client, message, args, ops)

您可以在repl 中找到工作演示(带字符串)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法在处理程序命令中做子文件夹?

多文件夹命令处理程序

批处理脚本复制带有文件的文件夹结构跳过特定的子文件夹

使用 Windows 命令行复制带有文件的文件夹和子文件夹,但跳过根文件夹中的文件

在批处理文件的所有子文件夹中运行命令

批处理命令删除所有具有特定名称的子文件夹

修改命令以处理文件夹中的所有文件

在子文件夹中删除带有通配符的文件

简单的Windows批处理文件,它将文件复制到文件夹,并创建带有时间戳的子文件夹

删除所有旧文件,文件夹和子文件夹的命令

Windows 批处理覆盖文件夹和子文件夹中的现有文件

为什么在执行批处理脚本时将带有空格的子文件夹识别为文件?

CakePHP带有子文件夹的路由

包括带有子文件夹的标题

gnus:带有子文件夹树的nnmaildir(maildir)

Windows批处理-匹配文件夹名称中带有点(。)的文件夹

lshistory命令没有给出子文件夹的日志?

纱线是否有安装子文件夹的命令?

批处理命令删除所有具有特殊字符的特定名称的子文件夹

使用带有子文件夹的.htaccess隐藏文件夹

需要复制带有子文件夹的文件夹而不回答提示

如何使用定义的变量创建带有子文件夹的文件夹?

带有测试的Ruby命令行应用程序的建议文件夹结构是什么?

.gitignore,排除文件夹中的所有文件...,但保留其中带有.gitkeep的那些子文件夹?

带有移动文件夹的 SVN 子文件夹到 GIT 迁移

列出文件夹和子文件夹中的文件,并带有.txt文件的路径

更改命令以排除子文件夹

将命令放入子文件夹

AngularJS:处理子文件夹中的根和子应用程序