Как сделать папки внутри папки команд и заставить их работать в разногласиях. js v12 - PullRequest
1 голос
/ 02 августа 2020

Итак, я сейчас хочу сделать это так, чтобы я мог создавать папки внутри моей папки команд, например, модерация и т. Д. c. Просто чтобы я мог почистить больше. Однако я действительно не знаю, как это сделать, поскольку каждый раз, когда я это делаю, это не работает.

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 голосов
/ 02 августа 2020

Я создал функцию для рекурсивного чтения файлов в каталоге и всех его подкаталогах.

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);
}
0 голосов
/ 02 августа 2020

Вы можете использовать вложенные циклы for для чтения каждого подкаталога и файлов в этих подкаталогах. Допустим, у вас есть папка ./commands, и в этой папке находятся другие папки, сгруппированные с вашими командами - модерация, развлечения, publi c, et c, и эти папки содержат ваши командные файлы.

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