如何在命令文件夹中创建文件夹并使它在discord.js v12中工作

时间:2020-08-02 16:27:49

标签: javascript discord.js

所以我当前要创建它,以便可以在命令文件夹中创建文件夹,例如审核等。 这样我就可以清理更多了。但是我真的不知道该怎么做,因为每次都行不通。

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);
}

到目前为止,这是我当前的代码,因此,如果我创建另一个文件夹并在其中添加命令,它将无法正常工作并且无法启动。

预先感谢

2 个答案:

答案 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);
}