所以我当前要创建它,以便可以在命令文件夹中创建文件夹,例如审核等。 这样我就可以清理更多了。但是我真的不知道该怎么做,因为每次都行不通。
const Discord = require(`discord.js`);
const client = new Discord.Client();
const commandFiles = readdirSync(join(__dirname, "commands")).filter(file => file.endsWith(".js"));
client.commands = new Discord.Collection();
for (const file of commandFiles) {
const command = require(join(__dirname, "commands", `${file}`));
client.commands.set(command.name, command);
}
到目前为止,这是我当前的代码,因此,如果我创建另一个文件夹并在其中添加命令,它将无法正常工作并且无法启动。
预先感谢
答案 0 :(得分:0)
您可以使用嵌套的for循环读取这些子目录中的每个子目录和文件。
假设您有一个./commands
文件夹,并且在该文件夹中有更多文件夹将您的命令分组-审核,娱乐,公共等,并且这些文件夹包含您的命令文件。
const cmdDirs = fs.readdirSync('./commands');
/* Loop through subdirectories in commands directory */
for (let dir of cmdDirs) {
/* Read every subdirectory and filter for JS files */
let commandFiles = fs.readdirSync(`./commands/${dir}`)
.filter(f => f.endsWith('.js'));
/* Loop through every file */
for (let file of commandFiles) {
/* Set command file */
let command = require(`./commands/${dir}/${file}`);
client.commands.set(command.name, command);
};
};
答案 1 :(得分:0)
我创建了一个函数来递归读取目录及其所有子目录中的文件。
const Discord = require("discord.js");
const client = new Discord.Client();
function readFiles(dir) {
const paths = readdirSync(dir, { withFileTypes: true });
return paths.reduce((files, path) => {
if (path.isDirectory()) {
files.push(...readFiles(join(dir, path.name)));
} else if (path.isFile()) {
files.push(join(dir, path.name));
}
return files;
}, []);
}
const commandFiles = readFiles("commands").filter(file => file.endsWith(".js"));
client.commands = new Discord.Collection();
for (const file of commandFiles) {
const command = require(join(__dirname, file));
client.commands.set(command.name, command);
}