我目前有一个Discord.JS命令处理程序,它加载命令文件夹中的所有命令。然而,由于所有的命令,它现在变得有点混乱,因此我一直在尝试实现子文件夹。这将清理命令文件夹中的文件,将它们组织到文件夹组中。
我目前有以下代码来加载同一文件夹中的命令。
但是我被困在如何进入命令目录下的每个文件夹并加载命令。如果有人能帮我,我将不胜感激。
const allCommands = fs.readdirSync('./commands');
for (const command of allCommands) {
try {
const loadedCommand = require(`./commands/${command}`);
commands.set(loadedCommand.name, loadedCommand);
for(const alias of loadedCommand.aliases || [])
commands.set(alias, { ...loadedCommand, alias: true });
logger.info(`Loaded command ${loadedCommand.name} (${command})`);
} catch (error) {
logger.error(`Failed to load command ${command}. **Please report the following error:**`);
logger.error(error);
}
}
将所有内容移动到其自己的函数中,并将路径作为参数。每次找到一个文件夹时,使用文件夹路径调用该函数。
(function readdir(path='./commands') {
const allCommands = fs.readdirSync(path);
for (const command of allCommands) {
if(fs.statSync(`${path}/${command}`).isDirectory()) {
readdir(`${path}/${command}`);
continue;
}
try {
const loadedCommand = require(`${path}/${command}`);
commands.set(loadedCommand.name, loadedCommand);
for(const alias of loadedCommand.aliases || [])
commands.set(alias, { ...loadedCommand, alias: true });
logger.info(`Loaded command ${loadedCommand.name} (${path}/${command})`);
} catch (error) {
logger.error(`Failed to load command ${path}/${command}. **Please report the following error:**`);
logger.error(error);
}
}
})();
老实说,我不建议这样导入。如果你将每条命令都导入到一个单独的javascript文件中,那么你的运气可能会更好,然后从那里导出每条命令,这会使你的控制器级代码更容易阅读