UNPKG

cdcommands

Version:

An advanced handler for Discord.js Bots with TypeScript and JavaScript support.

96 lines (92 loc) 3.82 kB
const { join } = require("path"); const Command = require("../Base/Command"); const { existsSync, readdirSync, lstatSync, mkdirSync } = require("fs"); /** * @param {string} commandsDir * @param {import("../Base/CDClient").CDClient} client * @param {boolean} customHelpCommand * @returns {import("../Base/CDClient").CDClient} */ async function Commands(commandsDir, client, customHelpCommand) { if (!existsSync(join(require.main.path, commandsDir))) { client.logWarn({ data: `No "${commandsDir}" directory found! Creating one...`, }); mkdirSync(join(require.main.path, commandsDir), { recursive: true }); } const folders = readdirSync(join(require.main.path, commandsDir)); for (const folder of folders) { if (lstatSync(join(require.main.path, commandsDir, folder)).isDirectory()) await Commands(`${join(commandsDir, folder)}`, client, customHelpCommand); else { if (require.main.filename.endsWith(".js") && folder.endsWith(".js")) { /** @type {Command} */ const command = require(join(require.main.path, commandsDir, folder)); if (command.name === "help" && !customHelpCommand) continue; if (client.commands.get(command.name)) { client.logError({ data: `Command ${command.name} has occured more than once. Please make sure you have unique "name" properties.`, }); continue; } if (!(command instanceof Command)) { client.logError({ data: `Command file ${join( require.main.path, commandsDir, folder, )} is an invalid command. Please make sure all files are setup correctly.`, }); continue; } client.commands.set(command.name, command); if (command.aliases && command.aliases.length > 0) for (const alias of command.aliases) { if (client.aliases.get(alias)) client.logError({ data: `Alias ${alias} has occured more than once. Please make sure you have unique "aliases" properties.`, }); client.aliases.set(alias, command.name); } if (command.init !== undefined) command.init(client); } else if ( require.main.filename.endsWith(".ts") && folder.endsWith(".ts") && !folder.endsWith(".d.ts") ) { /** @type {Command} */ const command = require(join(require.main.path, commandsDir, folder)) .default; if (command.name === "help" && !customHelpCommand) continue; if (client.commands.get(command.name)) { client.logError({ data: `Command ${command.name} has occured more than once. Please make sure you have unique "name" properties.`, }); continue; } if (!(command instanceof Command)) { client.logError({ data: `Command file ${join( require.main.path, commandsDir, folder, )} is an invalid command. Please make sure all files are setup correctly.`, }); continue; } client.commands.set(command.name, command); if (command.aliases && command.aliases.length > 0) for (const alias of command.aliases) { if (client.aliases.get(alias)) client.logError({ data: `Alias ${alias} has occured more than once. Please make sure you have unique "aliases" properties.`, }); client.aliases.set(alias, command.name); } if (command.init !== undefined) command.init(client); } } } return client; } module.exports = Commands;