UNPKG

fenixenbot.js

Version:

Libreria Creacion De Bots De Discord

171 lines (160 loc) 5.91 kB
const Color = require('./Color'); const Discord = require('discord.js'); // Asegúrate de tener esto aquí arriba si no lo tienes function commands(commandsOptions) { const { name, description, execute, options, permissions } = commandsOptions; if (!name) { throw new Error( Color.red, '- El nombre del comando es obligatorio.', Color.reset ); } if (typeof execute !== 'function') { throw new Error( Color.red, `- La función 'execute' es obligatoria para el comando ${Color.blue}'${name}'.`, Color.reset ); } const { SlashCommandBuilder, PermissionFlagsBits } = Discord; // Extraemos solo lo necesario de Discord if (description) { if (!description) { throw new Error( Color.red, `- La descripción es obligatoria para comandos SLASH ${Color.blue}${name}'.`, Color.reset ); } const slashCommandData = new SlashCommandBuilder() .setName(name) .setDescription(description) .setDefaultMemberPermissions(permissions); if (options && Array.isArray(options)) { options.forEach((optionDef) => { if ( !optionDef.name || !optionDef.description || !optionDef.type || typeof optionDef.required === 'undefined' // Permitir que 'required' sea opcional en la definición ) { console.warn( Color.red, `- Opción inválida en comando SLASH${Color.blue} '${name}'${Color.reset}. Se requiere name, description y type. 'required' es opcional.`, Color.reset ); return; } switch (optionDef.type.toUpperCase()) { case 'STRING': slashCommandData.addStringOption(option => option.setName(optionDef.name) .setDescription(optionDef.description) .setRequired(optionDef.required) .setAutocomplete(optionDef.autocomplete === true) .addChoices(...(optionDef.choices || [])) ); break; case 'INTEGER': slashCommandData.addIntegerOption(option => option.setName(optionDef.name) .setDescription(optionDef.description) .setRequired(optionDef.required) .setAutocomplete(optionDef.autocomplete === true) .addChoices(...(optionDef.choices || [])) ); break; case 'NUMBER': slashCommandData.addNumberOption(option => option.setName(optionDef.name) .setDescription(optionDef.description) .setRequired(optionDef.required) .setAutocomplete(optionDef.autocomplete === true) .addChoices(...(optionDef.choices || [])) ); break; case 'BOOLEAN': slashCommandData.addBooleanOption(option => option.setName(optionDef.name) .setDescription(optionDef.description) .setRequired(optionDef.required) ); break; case 'USER': slashCommandData.addUserOption(option => option.setName(optionDef.name) .setDescription(optionDef.description) .setRequired(optionDef.required) ); break; case 'CHANNEL': slashCommandData.addChannelOption(option => option.setName(optionDef.name) .setDescription(optionDef.description) .setRequired(optionDef.required) ); break; case 'ROLE': slashCommandData.addRoleOption(option => option.setName(optionDef.name) .setDescription(optionDef.description) .setRequired(optionDef.required) ); break; case 'MENTIONABLE': slashCommandData.addMentionableOption(option => option.setName(optionDef.name) .setDescription(optionDef.description) .setRequired(optionDef.required) ); break; case 'ATTACHMENT': slashCommandData.addAttachmentOption(option => option.setName(optionDef.name) .setDescription(optionDef.description) .setRequired(optionDef.required) ); break; default: console.warn( Color.yellow, `- Tipo de opción desconocido '${optionDef.type}' en comando SLASH ${Color.blue}'${name}'${Color.reset}. Opciones válidas: STRING, INTEGER, NUMBER, BOOLEAN, USER, CHANNEL, ROLE, MENTIONABLE, ATTACHMENT.`, Color.reset ); } }); } return { data: slashCommandData, execute, name: name, }; } else { return { name: name, execute, }; } } function prefixCommands(prefixCommandOptions) { const { name, execute, aliases } = prefixCommandOptions; if (!name) { throw new Error( Color.red, '- El nombre del comando de prefijo es obligatorio.', Color.reset ); } if (typeof execute !== 'function') { throw new Error( Color.red, `- La función 'execute' es obligatoria para el comando de prefijo ${Color.magenta}'${name}'.`, Color.reset ); } return { name: name, aliases: aliases, execute: (message, args) => execute(message, args), }; } module.exports = { commands, prefixCommands };