Ciclo de vida del módulo
Los módulos en Zumito Framework exponen hooks del ciclo de vida que permiten ejecutar código en momentos específicos durante la inicialización del bot.
Declaración de dependencias
Sección titulada «Declaración de dependencias»Los módulos pueden declarar dependencias de otros módulos mediante propiedades estáticas. El framework resuelve estas dependencias y carga los módulos en el orden correcto usando ordenamiento topológico (dependencias primero).
moduleName
Sección titulada «moduleName»Cada módulo puede declarar su propio nombre, usado para la resolución de dependencias:
import { Module } from 'zumito-framework';
export class MyModule extends Module { static moduleName = 'my-module';}Si no se declara moduleName, se usa el nombre de la carpeta como nombre del módulo.
dependencies
Sección titulada «dependencies»Declara dependencias requeridas — módulos que deben cargarse antes que este:
import { Module } from 'zumito-framework';
export class MyModule extends Module { static dependencies = ['logger-module', 'admin-module'] as const;}Si una dependencia requerida no se encuentra, el módulo no se cargará y se registrará un error.
optionalDependencies
Sección titulada «optionalDependencies»Declara dependencias opcionales — módulos que deben cargarse primero si están presentes, pero no impiden la carga si están ausentes:
import { Module } from 'zumito-framework';
export class MyModule extends Module { static optionalDependencies = ['sentry'] as const;}API legada requeriments.modules
Sección titulada «API legada requeriments.modules»La propiedad legada requeriments.modules sigue siendo soportada y se combina con el array dependencies:
export class MyModule extends Module { static requeriments = { modules: ['admin-module'], services: [], custom: [], };}Dependencias circulares
Sección titulada «Dependencias circulares»Las dependencias circulares se detectan y se reportan como errores. Los módulos afectados se omiten durante la carga:
[📦❌] Circular dependency detected involving: ModuleA, ModuleBinitialize()
Sección titulada «initialize()»Este método se llama automáticamente cuando el módulo se carga. Se encarga de:
- Cargar comandos desde la carpeta
commands/ - Registrar eventos desde la carpeta
events/ - Cargar traducciones desde la carpeta
translations/ - Registrar rutas desde la carpeta
routes/
Puedes sobrescribirlo si necesitas lógica de inicialización personalizada, pero asegúrate de llamar a super.initialize():
import { Module } from 'zumito-framework';
export class MyModule extends Module {
async initialize() { await super.initialize(); // Código de inicialización personalizado }
}onAllReady()
Sección titulada «onAllReady()»Este hook se ejecuta después de que todo el framework esté listo — cliente de Discord conectado, todos los módulos cargados, slash commands refrescados y servidor API iniciado. Es el lugar ideal para código que depende de que el bot esté completamente operativo.
import { Module } from 'zumito-framework';
export class MyModule extends Module {
async onAllReady() { // El bot está completamente listo console.log(`Conectado como ${this.framework.client.user?.tag}`); }
}Evento ready del framework
Sección titulada «Evento ready del framework»Como alternativa, puedes escuchar el evento ready emitido por el emitter del framework. Esto es útil cuando quieres reaccionar desde una clase de evento sin tocar la clase del módulo:
import { FrameworkEvent } from 'zumito-framework';
export class OnFrameworkReady extends FrameworkEvent {
source = 'framework'; once = true;
async execute(): Promise<void> { console.log('¡El framework está listo!'); }
}Orden de ejecución
Sección titulada «Orden de ejecución»- El cliente de Discord se conecta y emite
ready - Todas las clases de módulos se cargan y sus dependencias se resuelven
- Los módulos se ordenan topológicamente (dependencias primero)
- Cada módulo se instancia en orden ordenado
- Se llama a
initialize()de cada módulo en orden ordenado - Se refrescan los slash commands
- Se inicia el servidor API
- Se emite el evento
readydel framework - Se llama a
onAllReady()de cada módulo - Se ejecuta el callback del usuario (configurado en
zumito.config.ts)