这是我目前使用的命令处理程序,它可以作为它应该。
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。