# Este paquete requiere una connección de mongodb obligatoria, no intentes usarlo sin ello

[![Discord](https://img.shields.io/discord/838166325708324885?color=blue&label=server)](https://discord.gg/pTgHyUXGFc)
[![Package](https://img.shields.io/npm/v/blx-discord_commands?color=green&label=package)](https://www.npmjs.com/package/blx-discord_commands)
[![Size](https://img.shields.io/bundlephobia/min/blx-discord_commands)](https://www.npmjs.com/package/blx-discord_commands)
[![Paypal](https://img.shields.io/badge/donate-paypal-blue)](https://www.paypal.me/blazingx)
[![Twitter](https://img.shields.io/twitter/follow/IBlazingX?style=social)](https://www.twitter.com/IBlazingX)

[![NPM](https://nodei.co/npm/blx-discord_commands.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/blx-discord_commands)

# Contenido
- [Setup (Codigo principal)](#setup-codigo-principal)
  - [Setup (Comandos)](#setup-comandos)
  - [Ejemplos](#ejemplos)
  - [Caracteristicas](#caracteristicas)

## Setup (Codigo principal)
```js
const DiscordJS = require('discord.js')
const blxDC = require('blx-discord_commands')

const client = new DiscordJS.Client()

blxDC(client, {
  commands: "commands", // Directorio de comandos
  database: "URI", // URI de la database en mongodb

  prefix: "!", // Prefijo por defecto del bot
  
  disable_commands: [
    'help', // Quita esto de la lista para habilitar el comando, dejalo para deshabilitarlo
    'roles', // Quita esto de la lista para habilitar el comando, dejalo para deshabilitarlo
    'prefix', // Quita esto de la lista para habilitar el comando, dejalo para deshabilitarlo
  ],
  errors: { // Mensaje de un error, ej: te salta un error del cooldown
    serversOnly: 'Solo servers`', // Si no estas en algun server del bot
    ownersOnly: 'Solo dueños`', // Si no eres dueño del bot
    permissions: 'Permisos insuficientes`', // Si te faltan permisos
    cooldown: 'Espera `{TIME}`', // Si estas en cooldown [{TIME} => tiempo restante del cooldown]
    args: 'Usa `{ARGS}`', // Si no cumples los argumentos mínimos y/o máximos [{ARGS} => lo q tengas escrito en la propiedad 'joinArgs']
  },

  owners: [], // Dueños del bot (ids)
  servers: [], // Servidores del bot (ids)
})

client.login('TOKEN DE SU BOT')
```

### Setup (Comandos)
En la carpeta de comandos creas un nuevo archivo que contenga:
```js
let filename = __filename.slice(__dirname.length + 1, -3)

module.exports = {
  ignore_bots: false, // Si el comando lo puede usar un bot (false) o si no puede (true)
  ownersOnly: false, // Si el comando solo puede ser usado por los dueños del server (true) de lo contrario (false)
  serversOnly: false, // Si el comando solo puede ser usado en los servidores del bot (true) de lo contrario (false)

  permissions: [], // Permisos necesarios para utilizar el comando, EJ: ['ADMINISTRATOR'] (https://discord.com/developers/docs/topics/permissions)
  cooldown: -1, // El delay antes de volver a usar el comando (-1 para desactivarlo)

  name: '', // El nombre del comando (filename para que tenga el nombre del archivo)
  aliases: [''], // Los aliases del comando (es otra forma de ejecutar el comando)

  category: '', // Categoría del comando
  description: '', // Descripción del comando

  joinArgs: '', // Argumentos ddel comando, EJ: '<tag>'
  minArgs: 0, // Argumentos mínimos requeridos del comando
  maxArgs: -1, // Argumentos máximos del comando
  


  callback: async ({ // Codigo del comando
    client, // Cliente de tu bot
    args, // Argumentos escritos
    msg, // Objeto 'message' de DiscordJS
    prefix, // Prefijo del bot
    _commands, // Lista de comandos
  }) => {
    msg.channel.send('Comando ejecutado') // Codigo de ejemplo
  },
}
```

### Ejemplos
> Como usar la propiedad '_commands':
> ```js
> let filename = __filename.slice(__dirname.length + 1, -3)
> 
> module.exports = {
>   name: filename,
> 
>   callback: async ({
>     _commands,
>   }) => {
>     for (const cmd of _commands) {
>    
>       console.log(cmd)
>     }
>   },
> }
> ```

### Caracteristicas
- [x] Constructor de comandos
  - [x] Prefijo por defecto
  - [x] Database
  - [x] Carpeta
  - [x] Mensajes de errores
  - [x] Desactivar comandos por defecto
  - [x] Dueños del bot
  - [x] Servidores del bot

- [x] Propiedades de comandos
  - [x] Ignorar bots
  - [x] Solo servidores del bot
  - [x] Solo dueños del bot
  - [x] Permisos
  - [x] Cooldown
  - [x] Nombre
  - [x] Aliases
  - [x] Categoría
  - [x] Descripción
  - [x] Argumentos esperados, mínimos y máximos
  - [x] Callback (codigo del comando)

- [x] Funciones para comandos
  - [x] Roles permitidos (cofiguralos con el comando 'roles')
  - [x] Lista de comandos (propiedad: "_commands")

- [x] Comandos por defecto (Se pueden desactivar)
  - [x] 'roles' (configura los roles permitidos de un comando)
  - [x] 'prefix' (cofigura el prefijo del servidor)
  - [x] 'help' (obtiene información de comandos)
