FRAMEWORK DE IOC · INFRAESTRUCTURA
Circe
Framework de inversión de control para aplicaciones de Discord, construido sobre discord.js. El CLI de Circe posee el ciclo de vida de la aplicación, descubre comandos y listeners por convención de directorios, y enruta interacciones sobre Gateway WebSockets, HTTP Webhooks o un modo híbrido, sin tocar la lógica de interacción.
DUAL-TRANSPORT
Gateway, HTTP Webhooks o híbrido
- Cambia el transporte directamente en
circe.config.tssin modificar una sola línea de lógica de interacción. - Gateway: conexión WebSocket 24/7 con estado. HTTP: Webhooks serverless sin estado. Híbrido: ambos a la vez.
- Verificación de firma Ed25519 sub-milisegundo con
crypto.subtle.verifynativo, sin dependencias, para el transporte HTTP.
01 import { defineCirceConfig, defineConfig } from '@sxnnyside/circe'; 02 03 export default defineCirceConfig({ 04 config: defineConfig(schema), 05 transport: 'gateway', // "gateway" | "http" | "hybrid" 06 });
CONVENCIONES DE SISTEMA DE ARCHIVOS
Descubrimiento automático por directorio
commands/,command-groups/,context-menus/,events/,components/ymodals/se descubren solos.- Validación de forma en tiempo de escaneo con diagnósticos de nivel compilador — errores en desarrollo, no en producción.
- Árbol de subcomandos jerárquico ensamblado automáticamente hasta el límite de dos niveles de Discord, con guards heredados a nivel de grupo.
01 import { defineCommand } from '@sxnnyside/circe'; 02 import { SlashCommandBuilder } from 'discord.js'; 03 04 export default defineCommand({ 05 builder: new SlashCommandBuilder() 06 .setName('ping') 07 .setDescription('Replies with Pong'), 08 async execute(ctx) { 09 await ctx.interaction.reply('Pong!'); 10 }, 11 });
CROSS-RUNTIME
Bun, Node.js 22+ o Deno
- Mismo binario
circe, mismo comportamiento, en los tres runtimes — sin capas de compatibilidad. discord.js^14.16.0 como dependencia peer. Zod para validación de configuración tipada.- CLI de ciclo de vida completo:
circe initpara scaffolding,circe devcon hot-reload,circe starten producción,circe buildcomo verificación de contrato en CI.
$ bun add @sxnnyside/circe discord.js zod $ npm install @sxnnyside/circe discord.js zod $ deno add npm:@sxnnyside/circe npm:discord.js npm:zod $ bun x circe dev ✦ hot-reload watching src/**
RUTAS TIPADAS Y OBSERVABILIDAD
Guards, paginación y trazabilidad
- Rutas de componentes con patrones estilo URL —
ticket:close:[ticketId]:[action]— con inferencia de tipos completa. - Paginación sin colectores vía
createPaginator, con navegación opcional por dropdown (pageSelect). - Guards
cooldown()componibles en memoria o SQLite, IDs de correlación víaAsyncLocalStorage, y reporte de errores global cononError.
01 import { defineComponent, cooldown } from '@sxnnyside/circe'; 02 03 export default defineComponent({ 04 pattern: 'ticket:close:[ticketId]:[action]', 05 guards: [cooldown({ seconds: 5 })], 06 async execute(ctx) { 07 const { ticketId, action } = ctx.params; 08 }, 09 });
EMPIEZA AHORA
Instálalo y arranca.
Sin panel, sin dashboard, sin invitación de servidor — Circe vive en tu repositorio.
bun add @sxnnyside/circe discord.js zod
