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.
- Dashboard con tus bots — conectas un bot pegando su token, y ves su estado (encendido, apagado, con avisos, error) con un vistazo.
- Chat con IA (Groq) — un copiloto por bot que te escribe la persona, propone embeds, textos de bienvenida e ideas de comandos. Con un clic puedes guardar su respuesta como persona del bot.
- Creador de embeds — formulario, vista previa fiel a Discord, generación con IA a partir de una descripción, plantillas guardadas y envío inmediato a un canal.
- Respuesta automática en Discord — el bot lee los mensajes recientes de su canal y contesta con IA cuando lo mencionan (o a todo, si activas la auto-respuesta).
- Tokens cifrados — cada token de Discord se guarda con AES-256-GCM y nunca vuelve al navegador.
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.
- Crea una aplicación en el Discord Developer Portal.
- En Bot → Reset Token y copia el token.
- Invita el bot a tu servidor con los permisos View Channels, Send Messages y Read Message History.
- Pega el token en el dashboard (+ Conectar). Se valida contra Discord antes de guardarse.
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.
- No hay gateway: la respuesta llega en el siguiente ciclo del intervalo (15 min en el plan gratuito) o cuando pulsas Ejecutar ahora. Para tiempo real haría falta un proceso siempre vivo.
- Un canal por bot: el bot lee y responde en un único canal, el configurado en Ajustes.
- Límite de bots: 25 por usuario (constante
MAX_BOTS_PER_USERendb.ts).