Aloja bots de Discord con IA en Val Town: dashboard para gestionarlos, personajes que responden con Groq, y un creador de embeds con vista previa.
Rendering mermaid diagram...
Val Town no puede mantener abierta una conexión de gateway de Discord (los vals son efÃmeros y no
aceptan WebSockets entrantes). Por eso cada bot funciona por polling REST: el intervalo runtime.ts
recorre los bots encendidos cada 15 minutos y, además, puedes forzar un ciclo al instante con
âš¡ Ejecutar ahora desde el dashboard.
| Variable | Para qué sirve |
|---|---|
DISCORD_CLIENT_ID | Login con Discord (obligatorio para entrar) |
DISCORD_CLIENT_SECRET | Client Secret de la misma app de Discord |
GROQ_API_KEY | Chat con IA, respuestas del bot y generación de embeds |
ENCRYPTION_KEY | Clave de cifrado de los tokens de Discord (32+ caracteres aleatorios) |
Crea una app en el Discord Developer Portal y, en OAuth2 → Redirects, añade como URL de redirección:
https://<tu-endpoint>.web.val.run/auth/discord/callback
El Client ID y el Client Secret están en ese mismo apartado OAuth2. No hacen falta más scopes
que identify y email (el val los pide solo).
La pantalla de inicio del dashboard te muestra la URL exacta que corresponde a tu despliegue.
En la pestaña Ajustes elige el canal, escribe (o pÃdele a la IA) la persona, ajusta el modelo y la temperatura, y pulsa Encender bot. A partir de ahà responde a las menciones en ese canal.
| Archivo | Rol |
|---|---|
main.ts | Entrada HTTP: dashboard, /api/*, OAuth con Discord, assets |
api.ts | API JSON (bots, chat, embeds, envÃo a Discord) |
bots.ts | Configuración del bot y ciclo tickBot() |
discord.ts | Cliente REST de Discord v10 |
groq.ts | Cliente de Groq + prompts (persona, copiloto, embeds) |
db.ts | SQLite: usuarios, sesiones, bots, mensajes, embeds |
auth.ts | Sesiones en cookie HttpOnly + OAuth de Discord |
crypto.ts | Cifrado AES-256-GCM de tokens |
runtime.ts | Interval val: revisa los bots encendidos cada 15 min |
frontend/ | React + Twind: shell, API cliente, UI y componentes |
| Método | Ruta | Descripción |
|---|---|---|
GET | /api/config | Estado de las integraciones y modelos disponibles |
GET | /api/me | Usuario de la sesión |
GET POST | /api/bots | Listar / conectar bot (valida el token) |
GET PATCH DELETE | /api/bots/:id | Ver / configurar / eliminar bot |
POST | /api/bots/:id/state | Encender o apagar |
POST | /api/bots/:id/tick | Ejecutar un ciclo de lectura y respuesta ahora |
GET | /api/bots/:id/channels | Canales de texto del servidor |
POST | /api/bots/:id/send | Enviar texto y/o embed a un canal |
GET POST DELETE | /api/bots/:id/messages | Historial del copiloto |
GET POST DELETE | /api/bots/:id/embeds | Plantillas de embeds |
POST | /ai/embed | Generar un embed a partir de una descripción |
Todas las rutas de bots filtran por el usuario de la sesión: nunca se puede leer ni tocar un bot ajeno.
MAX_BOTS_PER_USER en db.ts).