Patto Bot Template v1.3.0
Immutable
release. Only release title and notes can be modified.
[1.3.0] - 2026-05-09
🚀 Sharding y Sistema de Logging
Esta versión introduce soporte completo para sharding mediante ShardingManager de Discord.js, un sistema de logging profesional con niveles y scopes, y stores distribuidos con Redis para cooldowns y payloads de componentes interactivos.
✨ Added
-
Sistema de logging profesional (
src/utils/Logger.ts)- Clase
Loggercon niveles:DEBUG,INFO,WARN,ERROR,FATAL,SILENT - Colores ANSI en TTY (desactivables con
NO_COLOR; forzables conFORCE_COLOR) - Loggers hijos con scope via
logger.child('NombreModulo')para identificar el origen de cada mensaje - Tag automático
[SHARD X]cuando el proceso corre como worker de sharding - Serialización de
Errorcon stack trace, objetos como JSON indentado y strings planos - Errores (
ERROR,FATAL) dirigidos astderr; el resto astdout - Variable de entorno
LOG_LEVELpara control en runtime (case-insensitive) - Singleton
loggerexportado listo para usar
- Clase
-
Soporte para Sharding (
src/sharding.ts)- Entry point dedicado para modo
ShardingManager - Compatible con TypeScript (ts-node en desarrollo) y JavaScript compilado (producción)
- Respawn automático de shards caídos
- Eventos de ciclo de vida de shard:
ready,disconnect,reconnecting,death - Nuevos scripts:
npm run dev:shardingynpm run start:sharding
- Entry point dedicado para modo
-
Stores distribuidos para sharding (
src/core/store/)CooldownStore— interfaz para almacenar expiraciones de cooldown (get,set,delete)MemoryCooldownStore— implementación en memoria (default, single-instance / desarrollo)RedisCooldownStore— implementación con Redis viaioredis; TTL automático; prefijopatto:cooldown:RedisPayloadStore— implementación dePayloadStorecon Redis; prefijopatto:payload:StoreRegistry— registro centralizado para inyectar stores antes de queplugins.config.tsse evalúe
-
Nuevas variables de entorno
LOG_LEVEL— nivel de logging (DEBUG/INFO/WARN/ERROR/FATAL/SILENT; default:DEBUGen dev,INFOen producción)SHARDING_ENABLED— habilita el modo sharding (requiereREDIS_URL)REDIS_URL— URL de conexión a Redis (redis://orediss://); obligatoria siSHARDING_ENABLED=trueTOTAL_SHARDS— número de shards a lanzar oauto(default:auto)
-
Dependencia
ioredis— cliente Redis para los stores distribuidos
🔧 Changed
src/index.ts— migrado a funciónbootstrap()asíncrona con importaciones dinámicas; configura Redis stores antes de cargarplugins.config.ts; inyectaLogger.setShardId()desdeprocess.env.SHARDSantes deEnv.load()src/bot.ts— todos losconsole.*reemplazados porlogger.child('Bot')src/utils/Env.ts—console.*reemplazados porlogger.child('Env'); configuración cargada como objeto estructurado;REDIS_URLenmascarada en logs; nuevo métodomaskRedisUrl; validación del esquema deREDIS_URL; parseo robusto deTOTAL_SHARDSyLOG_LEVEL
🐛 Fixed
- Correcciones menores en command handler, loaders y componentes
📚 Documentation
- Actualizado
.env.templatecon sección de sharding y nuevas variables documentadas - Actualizados READMEs de
src/core/,src/events/,src/plugins/ysrc/utils/
⚠️ Notas
- El sharding requiere Redis; sin
REDIS_URLválida el proceso termina conFATALal iniciar. - Para bots con menos de ~2.500 servidores, usar el entry point normal (
npm run dev/npm start);SHARDING_ENABLEDdebe quedar enfalse. - Los stores de Redis deben configurarse antes de que
plugins.config.tssea evaluado. El bootstrap enindex.tsya lo garantiza con importaciones dinámicas.