PROYECTO EN PRODUCCIÓN · 2025 — 2026 (ACTUALIDAD)

Nexo Bot

Bot de comunidad desarrollado en TypeScript con tipado estricto, salas de voz automáticas, tickets y comandos slash de baja latencia.

TypeScript Node.js 22 LTS discord.js v14 SQLite Embebido Docker Container En producción 24/7

Qué es

Nexo es un servidor de Discord (voz activa, social, gaming, anime, gatos). El bot cubre VoiceMaster, economía nexocoin, bandas y policía, asaltos cooperativos, un juego de Pokémon, perfil con reputación, misiones, RPG, counting y tickets con Neko.

La restricción a un guild no es un “todo”. Es un producto cerrado: slash commands se despliegan solo ahí (src/index.ts) y GuildCreate en otro ID llama a guild.leave().

Cómo está montado

src/index.tsboot
→
handlerscommands + events
→
modules/*motores
↔
SQLite WALschema.ts
→
dist/node 22

Un contenedor. TypeScript se compila a dist/ (Dockerfile multi-stage). Los slash viven en src/commands/ agrupados por área; la lógica gorda está en src/modules/. Los events de discord.js son finos: delegan en los motores (XP, automod, VoiceMaster, invites…).

Al apagar (SIGTERM) se reembolsan mesas de casino abiertas (economy/tables.ts) y se destruye el cliente con gracia de 25 s en Compose.

Módulos

Moderación

moderation/actions.ts casos warn/kick/ban/timeout/softban, DM con botón de apelación. Masivos hasta 15 objetivos.

AutoMod

Spam por ventana, invites, enlaces, caps, bad words. Hits en tabla automod_hits.

VoiceMaster

Hub ➕ crear sala. Panel: lock, hide, rename, límite, claim, transfer, kick. Tabla temp_voices.

Niveles

XP chat + minutos en VC (×1.5 boosters), role rewards, tarjeta Canvas al subir.

Tickets

Categorías, claim, cierre, transcripciones HTML. Neko responde hasta que staff reclama el ticket.

Backup

ZIP con roles, canales, emojis, bans, casos, niveles, tickets y mensajes. Restore con mapeo de IDs.

Economía

nexocoin: work/daily/crime, tienda, P2P, subastas, trading, minería, propiedades, préstamos, impuestos semanales. Cada movimiento se registra (transactionLogger.ts).

Asaltos y bandas

/asalto cooperativo: roles, objetivos, QTE, HUD Canvas, reliquias y eventos. /banda crea sindicatos, territorios y tributo. /policia es el otro lado.

Pokémon

/pokemon captura, equipo, Pokédex, gimnasios, duelos, intercambio y evolución. Sustituye a las mascotas sueltas.

Perfil y comunidad

/perfil con tarjeta y tema. /rep da reputación. Siguen cumpleaños, matrimonios, counting, bumps e invites.

Logs

/logs asigna canales. Deletes, edits, voz, audit log, tickets y boosts van a cada tipo.

Welcome / boosts

Tarjetas Canvas (welcome, level-up, boost). Tracker de Server Boosts para sorteos ponderados.

Giveaways

Requisitos de rol, nivel o booster. Entradas extra por boosts e invites.

IA de soporte (Neko)

modules/ai/client.ts arma una cola de intentos y se queda con el primero que responde. Si un proveedor da 429, lo enfría (cooldown) y sigue. Orden:

local (Ollama) → Groq → Gemini (varias claves) → OpenRouter → Cohere → Cloudflare Workers AI → OpenAI.

La memoria del ticket (ai/memory.ts) guarda un resumen y hechos en SQLite para no reenviar todo el hilo. El prompt de normas se carga con /ticket ia prompt:.

Sitios del código que importan

Eventos delgados, motores gordos. messageCreate.ts no es un switch de mil líneas: llama a automod, XP, counting, bump y chatbot. Eso se deja testear y no se mezcla con los slash.

Schema explícito. database/schema.ts declara decenas de tablas (casos, tickets, economía, RPG, pets, misiones, counting…). WAL y foreign keys. No es un JSON suelto.

Canvas de marca. Welcome, level-up y boost usan las PNG de assets/images/ y fuentes Inter. El logo de esta ficha es media/nexo.png.

Operación

Un compose: docker compose up -d --build. Datos en ./data, backups en ./backups. Token y claves de IA en .env (Zod al cargar). El repo público no lleva la base ni los ZIP de restore.