npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cordly

v1.0.5

Published

A utility library for simplifying Discord bot development with discord.js.

Downloads

4

Readme

Cordly

Cordly es una biblioteca de utilidades diseñada para simplificar el desarrollo de bots de Discord utilizando discord.js. Proporciona una serie de herramientas que permiten a los desarrolladores manejar comandos, eventos y bases de datos de forma eficiente y estructurada.

Descripción

Desarrollar bots para Discord puede ser una tarea compleja, especialmente cuando se trata de manejar la lógica de comandos y eventos. Cordly aborda estas complejidades al ofrecer una API intuitiva y fácil de usar que permite a los desarrolladores centrarse en crear experiencias enriquecedoras para sus usuarios. Con características como soporte para múltiples tipos de bases de datos y un enfoque modular, Cordly está diseñado para ser extensible y adaptable a las necesidades de cualquier proyecto.

Características Clave

  • Gestión de Comandos y Eventos: Maneja comandos y eventos de manera sencilla, permitiendo una organización clara de la lógica del bot.
  • Soporte para Bases de Datos: Proporciona implementaciones para bases de datos en memoria y basadas en JSON, facilitando el almacenamiento de datos.
  • Documentación Clara: Documentación accesible y ejemplos prácticos para acelerar el proceso de integración.

Instalación

Para comenzar a utilizar Cordly, necesitas tener Node.js y npm instalados en tu máquina. Puedes descargar Node.js desde su página oficial. Una vez que tengas Node.js instalado, puedes agregar Cordly a tu proyecto utilizando npm. Ejecuta el siguiente comando en tu terminal:

npm install cordly

Logger

La clase Logger proporciona un sistema de registro de mensajes que permite a los desarrolladores realizar un seguimiento de los eventos y errores en su aplicación. Implementa diferentes niveles de log: debug, info, warn, y error. Además, admite la escritura de logs en un archivo y opcionalmente en la consola.

Características

  • Niveles de Log: Soporta cuatro niveles de log que permiten clasificar los mensajes:
  • debug: Mensajes detallados para depuración.
  • info: Mensajes informativos sobre el flujo de la aplicación.
  • warn: Advertencias sobre posibles problemas.
  • error: Errores o problemas graves.
  • Configuración Flexible: Permite configurar la ruta del archivo de log, el nivel mínimo de logs que se registran y la opción de mostrar logs en la consola. ### Opciones de Configuración La clase Logger acepta un objeto de configuración opcional al inicializarse. Las opciones disponibles son:

| Opción | Tipo | Descripción | Valor por defecto | |-----------------|-----------|-----------------------------------------------------------------------------|------------------------------| | filePath | string | Ruta del archivo donde se almacenarán los logs. | '../../logs/bot.log' | | logLevel | LogLevel| Nivel mínimo de logs que se van a registrar. | 'info' | | consoleLogging | boolean | Indica si se deben mostrar los logs en la consola además de registrarlos en el archivo. | true |

Ejemplo de Uso

JavaScript (.js)

const Logger = require('cordly').Logger;

// Crear una instancia del Logger con configuración personalizada
const logger = Logger.getInstance({ logLevel: 'debug', consoleLogging: true });

// Usar el logger
logger.debug('Este es un mensaje de depuración');
logger.info('La aplicación ha iniciado correctamente');
logger.warn('La memoria está cerca del límite');
logger.error('Error de conexión con la base de datos');

Module (.mjs)

import { Logger } from 'cordly';

// Crear una instancia del Logger con configuración personalizada
const logger = Logger.getInstance({ logLevel: 'debug', consoleLogging: true });

// Usar el logger
logger.debug('Este es un mensaje de depuración');
logger.info('La aplicación ha iniciado correctamente');
logger.warn('La memoria está cerca del límite');
logger.error('Error de conexión con la base de datos');

Métodos Disponibles -

getInstance(options)

: Método estático para obtener la instancia única del logger. Acepta opciones de configuración. -

debug(message)

: Registra un mensaje de nivel debug. -

info(message)

: Registra un mensaje de nivel info. -

warn(message)

: Registra un mensaje de nivel warn. -

error(message)

: Registra un mensaje de nivel error.

Ejemplo inizialicacion

const options = {
    filePath: '/var/logs/myapp.log',   // Ruta personalizada para el archivo de logs
    logLevel: 'debug',                  // Registra todos los niveles de logs
    consoleLogging: false                // Desactiva el logging en la consola
};

const logger = Logger.getInstance(options);

EventHandler

La clase EventHandler gestiona la carga, validación y ejecución de eventos en un bot de Discord. Permite cargar eventos desde archivos, validarlos y asignarlos al cliente de Discord para que sean ejecutados cuando ocurra el evento correspondiente.

Características

  • Carga Dinámica de Eventos: Permite cargar eventos desde un directorio específico, facilitando la gestión de eventos.
  • Validación de Eventos: Asegura que cada evento tenga un método de ejecución válido antes de ser registrado.
  • Soporte para Eventos Únicos: Permite que un evento se ejecute solo una vez o cada vez que ocurra, según se especifique.

Interfaz Event

La interfaz Event define la estructura básica de un evento para el bot de Discord, que incluye: | Propiedad | Tipo | Descripción | |-----------|-----------------------------------|-----------------------------------------------------------------------------------------------| | name | keyof ClientEvents | Nombre del evento que se registrará en el cliente de Discord. | | once | boolean | Indica si el evento debe ejecutarse solo una vez. | | execute | (...args: unknown[]) => Promise<void> | void | Método que se ejecuta cuando se activa el evento, recibiendo los argumentos del evento. |

Ejemplo de Uso

Para utilizar EventHandler, primero crea una instancia de la clase pasando el cliente de Discord. Luego, carga los eventos desde un directorio específico.

JavaScript (.js)

const { Client, GatewayIntentBits } = require('discord.js');
const EventHandler = require('cordly').EventHandler;

const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const eventHandler = new EventHandler(client);

// Cargar eventos desde el directorio './events'
eventHandler.loadEvents('./events');

// Iniciar sesión en Discord
client.login('YOUR_BOT_TOKEN');

Module (.mjs)

import { Client, GatewayIntentBits } from 'discord.js';
import { EventHandler } from 'cordly';

const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const eventHandler = new EventHandler(client);

// Cargar eventos desde el directorio './events'
eventHandler.loadEvents('./events');

// Iniciar sesión en Discord
client.login('YOUR_BOT_TOKEN');

Carga de Eventos

Los eventos se cargan desde archivos ubicados en un directorio especificado. Cada archivo debe exportar un objeto que implemente la interfaz Event. A continuación se muestra un ejemplo de cómo podría lucir un archivo de evento: Ejemplo de Archivo de Evento (ready.js)

module.exports = {
    name: 'ready',
    once: true,
    execute() {
        console.log('¡El bot está listo!');
    },
};

Ejemplo de Archivo de Evento (messageCreate.js)

module.exports = {
    name: 'messageCreate',
    execute(message) {
        if (message.content === '!ping') {
            message.reply('¡Pong!');
        }
    },
};

Métodos Disponibles -

loadEvents(eventsDir)

: Carga eventos desde un directorio específico. -

getLoadedEvents()

: Devuelve un mapa de los eventos que han sido cargados.

CommandHandler

La clase CommandHandler se encarga de la carga, registro y ejecución de comandos en un bot de Discord. Proporciona un sistema robusto para gestionar comandos, incluyendo características como cooldowns, verificación de roles, y soporte para comandos premium.

Características

  • Carga Dinámica de Comandos: Permite cargar comandos desde archivos ubicados en un directorio específico.
  • Soporte para Cooldowns: Evita el uso excesivo de un comando por parte de un usuario mediante cooldowns.
  • Verificación de Roles y Permisos: Restringe el uso de comandos basándose en roles específicos y permisos requeridos.
  • Soporte para Comandos Premium: Permite definir niveles de acceso premium para ciertos comandos.
  • Middlewares: Se pueden ejecutar funciones antes de la ejecución del comando.

Interfaz Command

La interfaz Command define la estructura básica de un comando para el bot de Discord, que incluye: | Propiedad | Tipo | Descripción | |-----------------|-------------------------------------------|-----------------------------------------------------------------------------------------------| | name | string | Nombre del comando. | | description | string | Descripción del comando. | | onlyOwner | boolean | Indica si el comando solo puede ser ejecutado por el propietario del bot. | | allowedRoles | string[] | Lista de IDs de roles permitidos para ejecutar el comando. | | premiumLevel | number | Nivel premium requerido para ejecutar el comando. | | enabled | boolean | Indica si el comando está habilitado. | | cooldown | number | Cooldown por usuario en segundos. | | aliases | string[] | Lista de alias para el comando. | | usage | string | Cómo se debe usar el comando. | | category | string | Categoría del comando. | | permissions | bigint[] | Lista de nuevos permisos requeridos para ejecutar el comando. | | execute | (message: Message, args: string[]) => Promise<void> | void | Función que se ejecuta al llamar al comando, recibiendo el mensaje y los argumentos. |

Ejemplo de Uso

Para utilizar CommandHandler, primero crea una instancia de la clase con el prefijo y el ID del propietario del bot. Luego, carga los comandos desde un directorio específico. JavaScript (.js)

const { Client, GatewayIntentBits } = require('discord.js');
const CommandHandler = require('cordly').CommandHandler;

const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const commandHandler = new CommandHandler('!', 'YOUR_OWNER_ID');

// Cargar comandos desde el directorio './comandos'
commandHandler.loadCommandsFromPath('./comandos');

// Manejar mensajes y ejecutar comandos
client.on('messageCreate', (message) =&gt; {
    commandHandler.handleMessage(message);
});

// Iniciar sesión en Discord
client.login('YOUR_BOT_TOKEN');

Module (.mjs)

import { Client, GatewayIntentBits } from 'discord.js';
import { CommandHandler } from 'cordly';

const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const commandHandler = new CommandHandler('!', 'YOUR_OWNER_ID');

// Cargar comandos desde el directorio './comandos'
await commandHandler.loadCommandsFromPath('./comandos');

// Manejar mensajes y ejecutar comandos
client.on('messageCreate', (message) =&gt; {
    commandHandler.handleMessage(message);
});

// Iniciar sesión en Discord
client.login('YOUR_BOT_TOKEN');

Carga de Comandos

Los comandos se cargan desde archivos ubicados en un directorio especificado. Cada archivo debe exportar un objeto que implemente la interfaz Command. A continuación se muestra un ejemplo de cómo podría lucir un archivo de comando: Ejemplo de Archivo de Comando (ping.js)

module.exports = {
    name: 'ping',
    description: 'Responde con Pong!',
    execute(message) {
        message.reply('Pong!');
    },
};

Métodos Disponibles -

registerCommand(command: Command)

: Registra un nuevo comando. -

loadCommandsFromPath(dirPath: string)

: Carga todos los comandos desde una ruta específica. -

handleMessage(message: Message)

: Maneja el mensaje y ejecuta el comando correspondiente. -

setPrefix(newPrefix: string)

: Cambia el prefijo de los comandos. -

setPremiumUser(userId: string, level: number)

: Establece o actualiza el nivel premium de un usuario. -

getCommandsList()

: Devuelve una lista de nombres de comandos registrados. -

exportCommands(filePath: string)

: Exporta comandos a un archivo JSON.

Consideraciones Finales

Asegúrate de que los archivos de comando estén correctamente estructurados y exporten un objeto que cumpla con la interfaz

Command

. Esto asegurará que el CommandHandler funcione correctamente y que los comandos se ejecuten como se espera. Con CommandHandler, puedes gestionar comandos de forma eficiente y organizada, facilitando la extensión y mantenimiento de tu bot de Discord.

SlashCommandHandler

La clase SlashCommandHandler gestiona la carga, validación, registro y ejecución de comandos Slash en un bot de Discord. Permite a los desarrolladores crear comandos interactivos que los usuarios pueden invocar a través de la interfaz de Discord.

Características

  • Carga Dinámica de Comandos: Permite cargar comandos desde archivos ubicados en un directorio específico.
  • Validación de Comandos: Asegura que los comandos tengan la estructura adecuada antes de ser registrados.
  • Registro en Discord: Registra los comandos en la API de Discord para que estén disponibles en el servidor.
  • Manejo de Interacciones: Escucha las interacciones de los usuarios y ejecuta la lógica correspondiente para cada comando.

Interfaz SlashCommand

La interfaz SlashCommand define la estructura básica de un comando Slash para el bot: | Propiedad | Tipo | Descripción | |-----------|-----------------------------------------------------------------|------------------------------------------------------| | data | ApplicationCommandData | Estructura estándar de un comando en Discord. | | execute | (client: Client, interaction: CommandInteraction) => Promise<void> | Lógica de ejecución del comando. |

Ejemplo de Uso

Para utilizar SlashCommandHandler, primero crea una instancia de la clase pasando el cliente de Discord y el directorio de comandos. Luego, carga los comandos y maneja las interacciones de los usuarios.

JavaScript (.js)

const { Client, GatewayIntentBits } = require('discord.js');
const SlashCommandHandler = require('cordly').SlashCommandHandler;

const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const handler = new SlashCommandHandler({
  client: client,
  commandsDir: './commands'
});

// Cargar comandos desde el directorio './commands'
await handler.loadCommands();

// Manejar interacciones de comandos Slash
client.on('interactionCreate', async (interaction) =&gt; {
  await handler.handleInteraction(interaction);
});

// Iniciar sesión en Discord
client.login('YOUR_BOT_TOKEN');

Module (.mjs)

import { Client, GatewayIntentBits } from 'discord.js';
import { SlashCommandHandler } from 'cordly';

const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const handler = new SlashCommandHandler({
  client: client,
  commandsDir: './commands'
});

// Cargar comandos desde el directorio './commands'
await handler.loadCommands();

// Manejar interacciones de comandos Slash
client.on('interactionCreate', async (interaction) =&gt; {
  await handler.handleInteraction(interaction);
});

// Iniciar sesión en Discord
client.login('YOUR_BOT_TOKEN');

Carga de Comandos

Los comandos se cargan desde archivos ubicados en un directorio específico. Cada archivo debe exportar un objeto que implemente la interfaz SlashCommand. A continuación se muestra un ejemplo de cómo podría lucir un archivo de comando: Ejemplo de Archivo de Comando (ping.js)

module.exports = {
  data: {
    name: 'ping',
    description: 'Responde con Pong!',
  },
  async execute(client, interaction) {
    await interaction.reply('Pong!');
  },
};

Métodos Disponibles -

loadCommands()

: Carga todos los comandos desde el directorio especificado y los registra en Discord. -

handleInteraction(interaction: CommandInteraction)

: Maneja las interacciones recibidas de comandos Slash.

Utilities

La clase Utilities proporciona una colección de funciones útiles que pueden facilitar diversas tareas comunes en JavaScript, como la manipulación de cadenas, la generación de identificadores únicos, la validación de correos electrónicos y URLs, y más.

Métodos Disponibles

1. generateUUID(structure: string = 'xxxxxxxxxxxxxxxx'): string Genera un UUID (Identificador Único Universal) basado en una estructura dada.

  • Parámetros: - structure: Estructura del UUID (por defecto: 'xxxxxxxxxxxxxxxx').

  • Ejemplo:

  const uuid = Utilities.generateUUID('xx-xx-#xx-##xx');
  console.log(uuid); // 'ab-12-c3d-45ef'

2. getRandomHexColor(): string Genera un color hexadecimal aleatorio. - Ejemplo:

const randomColor = Utilities.getRandomHexColor();
console.log(randomColor); // '#a3e12f'

3. capitalizeWords(str: string): string Convierte la primera letra de cada palabra de una cadena a mayúsculas. Ejemplo:

const result = Utilities.capitalizeWords('hola mundo');
console.log(result); // 'Hola Mundo'

4. toLowerCase(str: string): string Convierte una cadena a minúsculas. Ejemplo:

const lowerStr = Utilities.toLowerCase('Hola Mundo');
console.log(lowerStr); // 'hola mundo'

5. toUpperCase(str: string): string Convierte una cadena a mayúsculas. Ejemplo:

const upperStr = Utilities.toUpperCase('Hola Mundo');
console.log(upperStr); // 'HOLA MUNDO'

6. formatNumber(num: number): string Formatea un número agregando separadores de miles. Ejemplo:

const formatted = Utilities.formatNumber(1234567);
console.log(formatted); // '1,234,567'

7. roundToDecimals(num: number, decimals: number): number Redondea un número a una cantidad específica de decimales. Ejemplo:

const rounded = Utilities.roundToDecimals(3.14159, 2);
console.log(rounded); // 3.14

8. dateDifferenceInDays(start: Date, end: Date): number Calcula la diferencia entre dos fechas en días. Ejemplo:

const daysDiff = Utilities.dateDifferenceInDays(new Date('2023-01-01'), new Date('2023-01-10'));
console.log(daysDiff); // 9

9. getCurrentDate(): Date Obtiene la fecha y hora actual. Ejemplo:

const currentDate = Utilities.getCurrentDate();
console.log(currentDate); // Fri Jan 20 2023 14:35:27 GMT+0000 (UTC)

10. validateEmail(email: string): boolean Valida una dirección de correo electrónico. Ejemplo:

const isValid = Utilities.validateEmail('[email protected]');
console.log(isValid); // true

11. validateURL(url: string): boolean Valida una URL. Ejemplo:

const isValidUrl = Utilities.validateURL('https://www.example.com');
console.log(isValidUrl); // true

ModerationHandler

La clase ModerationHandler permite gestionar acciones de moderación en un bot de Discord utilizando Discord.js. Con este módulo, los desarrolladores pueden implementar funcionalidades como expulsar, banear, silenciar (timeout), quitar el silencio y desbanear a miembros de un servidor.

Características

  • Expulsar Miembros: Expulsa a un miembro de un servidor con una razón opcional.
  • Banear Miembros: Banea a un miembro del servidor, eliminando opcionalmente sus mensajes de los últimos días.
  • Silenciar Miembros (Timeout): Silencia temporalmente a un miembro por un tiempo específico.
  • Quitar Silencio: Quita el silencio de un miembro antes de que termine el tiempo asignado.
  • Desbanear Miembros: Desbanea a un usuario utilizando su ID.

Ejemplo de Uso

Para utilizar la clase ModerationHandler, debes crear una instancia pasándole un cliente de Discord. Luego puedes llamar a los métodos correspondientes para realizar las acciones de moderación.

JavaScript (.js)

const { Client, GatewayIntentBits } = require('discord.js');
const { ModerationHandler } = require('./ModerationHandler');

const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers] });
const moderationHandler = new ModerationHandler(client);

// Iniciar sesión en Discord
client.login('YOUR_BOT_TOKEN');

// Ejemplo: Expulsar a un miembro mencionado
client.on('messageCreate', async (message) => {
  if (message.content.startsWith('!kick')) {
    const member = message.mentions.members.first();
    if (member) {
      await moderationHandler.kickMember(member, 'Violación de las reglas');
    }
  }
});

Métodos Disponibles

kickMember(member: GuildMember, reason: string = 'No reason provided'): Promise<void> Expulsa a un miembro del servidor.

  • member: El miembro que será expulsado.
  • reason: (Opcional) Razón de la expulsión.
const member = message.mentions.members.first();
if (member) {
  await moderationHandler.kickMember(member, 'Reglas violadas');
}

banMember(member: GuildMember, reason: string = 'No reason provided', deleteMessageDays: number = 0): Promise<void> Banea a un miembro y opcionalmente elimina sus mensajes de los últimos días.

  • member: El miembro que será baneado.
  • reason: (Opcional) Razón del baneo.
  • deleteMessageDays: (Opcional) Número de días de mensajes a eliminar (0-7).
const member = message.mentions.members.first();
if (member) {
  await moderationHandler.banMember(member, 'Conducta inapropiada', 7);
}

muteMember(member: GuildMember, duration: number, reason: string = 'No reason provided'): Promise<void> Silencia (timeout) a un miembro durante un tiempo especificado.

  • member: El miembro que será silenciado.
  • duration: Duración del silencio en milisegundos.
  • reason: (Opcional) Razón del silencio.
const member = message.mentions.members.first();
if (member) {
  await moderationHandler.muteMember(member, 600000, 'Spam');
}

unmuteMember(member: GuildMember, reason: string = 'No reason provided'): Promise<void> Quita el silencio a un miembro antes de que se complete el tiempo asignado.

  • member: El miembro que será desilenciado.
  • reason: (Opcional) Razón para quitar el silencio.
const member = message.mentions.members.first();
if (member) {
  await moderationHandler.unmuteMember(member, 'Ha cumplido su castigo');
}

unbanMember(userId: string, reason: string = 'No reason provided'): Promise<void> Desbanea a un usuario usando su ID.

  • userId: El ID del usuario a desbanear.
  • reason: (Opcional) Razón del desbaneo.
await moderationHandler.unbanMember('123456789012345678', 'Ha apelado con éxito');

GiveawaysManager

La clase GiveawaysManager gestiona la creación, finalización, edición y eliminación de sorteos (giveaways) en Discord. Proporciona una interfaz sencilla para los desarrolladores que desean implementar sorteos en sus bots de Discord utilizando discord.js.

Características

  • Inicio y Finalización de Sorteos: Permite iniciar sorteos con opciones personalizables y finalizarlos automáticamente al expirar el tiempo establecido.
  • Gestión de Participantes: Maneja la adición y selección de ganadores de forma eficiente.
  • Persistencia de Datos: Utiliza una base de datos JSON para almacenar información sobre los sorteos y sus participantes.

Ejemplo de Uso

JavaScript (.js)

const { Client, GatewayIntentBits } = require('discord.js');
const GiveawaysManager = require('cordly').GiveawaysManager;

const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent] });
const giveawaysManager = new GiveawaysManager(client, 'giveaways.json');

client.once('ready', async () => {
    console.log(`Logged in as ${client.user.tag}!`);
    
    // Iniciar un nuevo sorteo
    const giveaway = await giveawaysManager.start('channelId', 'guildId', {
        duration: 86400000, // 24 horas
        prize: 'Un regalo especial',
        winnerCount: 1,
        reaction: '🎉',
        onStart: (messageId, channelId) => {
            console.log(`Giveaway iniciado en el canal ${channelId} con el mensaje ID ${messageId}`);
        }
    });
});

client.login('your-token-here');

Métodos Disponibles

start(channelId: string, guildId: string, options: GiveawayOptions): Promise<Giveaway>

  • Inicia un nuevo sorteo y lo guarda en la base de datos.

edit(messageId: string, options: Partial<GiveawayOptions>): Promise<Giveaway | null>

  • Edita un sorteo existente con nuevas opciones.

delete(messageId: string): Promise<boolean>

  • Elimina un sorteo existente de la base de datos.

Ejemplo de Inicialización

Para inicializar GiveawaysManager, simplemente crea una instancia pasando el cliente de Discord y el nombre del archivo donde se almacenarán los sorteos.

const giveawaysManager = new GiveawaysManager(client, './giveaways.json');

Interfaz GiveawayOptions

La interfaz GiveawayOptions define las opciones que se pueden pasar al iniciar un sorteo: | Propiedad | Tipo | Descripción | |--------------------|-----------|--------------------------------------------------------------| | duration | number | Duración del sorteo en milisegundos. | | prize | string | Descripción del premio del sorteo. | | winnerCount | number | Número de ganadores a seleccionar. | | reaction | string | Emoji que los usuarios deben reaccionar para participar. | | onStart | Function| Callback que se llama cuando se inicia el sorteo. | | onEnd | Function| Callback que se llama cuando finaliza el sorteo. | | onStartCallback | Function| Callback alternativo que se llama al iniciar el sorteo. | | onEndCallback | Function| Callback alternativo que se llama al finalizar el sorteo. |

Descripción de las Opciones de Callback

  • onStart: Se ejecuta cuando el sorteo comienza, recibiendo el ID del mensaje y el ID del canal.
  • onEnd: Se ejecuta cuando el sorteo finaliza, recibiendo los ganadores y el ID del canal.
  • onStartCallback: Similar a onStart, pero permite una ejecución adicional de lógica si se necesita.
  • onEndCallback: Similar a onEnd, permite una ejecución adicional de lógica si se necesita.