Files
wehub-resource-sync bb5c75ce05
Component Security Validation / Security Audit (push) Has been cancelled
Deploy to Cloudflare Pages / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:38:58 +08:00

314 lines
9.1 KiB
Markdown

# Discord Bot Setup - Vercel Serverless
Discord bot para claude-code-templates integrado con Vercel Functions usando webhooks. Este enfoque es más eficiente que mantener un bot tradicional con conexión persistente.
## 🚀 Ventajas de la Arquitectura Serverless
-**Sin servidor permanente**: Solo se ejecuta cuando hay interacciones
-**Escalabilidad automática**: Vercel maneja el scaling
-**Integrado con tu infraestructura**: Mismo proyecto, mismo deployment
-**Costo reducido**: Solo pagas por ejecuciones reales
-**Cache inteligente**: Reutiliza datos entre invocaciones
## 📋 Comandos Disponibles
### Comandos Básicos (Fase 1)
1. **`/search <query> [type]`** - Buscar componentes
2. **`/info <name> [type]`** - Información detallada
3. **`/install <name> [type]`** - Comando de instalación
4. **`/popular <type> [limit]`** - Componentes más populares
5. **`/random <type>`** - Descubre componentes aleatorios
## 🛠️ Setup Paso a Paso
### 1. Crear Discord Application
1. Ve a [Discord Developer Portal](https://discord.com/developers/applications)
2. Click "New Application" y dale un nombre
3. En la sección "General Information":
- Copia el **Application ID** → Esto es tu `DISCORD_APP_ID`
4. Ve a la sección "Bot":
- Click "Add Bot"
- Copia el **Bot Token** → Esto es tu `DISCORD_BOT_TOKEN`
- Habilita "Message Content Intent" si lo necesitas
5. En "General Information" nuevamente:
- Copia el **Public Key** → Esto es tu `DISCORD_PUBLIC_KEY`
### 2. Configurar Variables de Entorno
#### En Local (para testing)
Crea/actualiza tu archivo `.env`:
```bash
# Discord Bot Configuration
DISCORD_APP_ID=123456789012345678
DISCORD_BOT_TOKEN=MTIzNDU2Nzg5MDEyMzQ1Njc4.AbCdEf.GhIjKlMnOpQrStUvWxYz
DISCORD_PUBLIC_KEY=abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890
DISCORD_GUILD_ID=987654321098765432 # Opcional, para testing en un server específico
# API Configuration
COMPONENTS_API_URL=https://aitmpl.com/components.json
```
#### En Vercel (para producción)
1. Ve a tu proyecto en Vercel Dashboard
2. Settings → Environment Variables
3. Agrega estas variables:
- `DISCORD_APP_ID`
- `DISCORD_BOT_TOKEN`
- `DISCORD_PUBLIC_KEY`
- `COMPONENTS_API_URL` (opcional, por defecto usa aitmpl.com)
### 3. Instalar Dependencias
```bash
npm install
```
Esto instalará:
- `discord-interactions` - Para verificar requests de Discord
- `axios` - Para cargar components.json
- `dotenv` - Para variables de entorno
### 4. Registrar Comandos con Discord
```bash
npm run discord:register
```
Output esperado:
```
📦 Registering Discord slash commands...
Registering to guild: 987654321098765432
✅ Successfully registered 5 commands!
📝 Registered commands:
1. /search - Search for components by keyword
2. /info - Get detailed information about a specific component
3. /install - Get the installation command for a component
4. /popular - View the most popular components by download count
5. /random - Discover a random component
```
### 5. Deploy a Vercel
```bash
vercel --prod
```
O usa el deployment automático de GitHub si lo tienes configurado.
Después del deploy, copia tu URL de producción:
```
https://your-project.vercel.app
```
### 6. Configurar Interactions Endpoint en Discord
1. Ve a Discord Developer Portal → Tu aplicación
2. Ve a "General Information"
3. En **Interactions Endpoint URL**, pega:
```
https://your-project.vercel.app/api/discord/interactions
```
4. Click "Save Changes"
Discord intentará verificar la URL enviando un PING. Si todo está bien configurado, verás un ✅.
### 7. Invitar el Bot a tu Servidor
1. En Discord Developer Portal → OAuth2 → URL Generator
2. Selecciona scopes:
- ✅ `bot`
- ✅ `applications.commands`
3. Selecciona permisos del bot:
- ✅ Send Messages
- ✅ Embed Links
- ✅ Read Message History
4. Copia la URL generada y ábrela en tu navegador
5. Selecciona tu servidor y autoriza
## 🧪 Testing Local
Para testear localmente antes de hacer deploy:
```bash
# 1. Instala Vercel CLI si no lo tienes
npm i -g vercel
# 2. Inicia el servidor de desarrollo
vercel dev
```
Esto correrá en `http://localhost:3000`
Para que Discord pueda enviar webhooks a tu localhost, necesitas un túnel:
```bash
# Opción 1: ngrok
ngrok http 3000
# Opción 2: Vercel dev con --listen
vercel dev --listen 3000
```
Usa la URL pública del túnel en Discord Interactions Endpoint.
## 📁 Estructura del Proyecto
```
api/
└── discord/
├── interactions.js # Endpoint principal de webhooks
├── register-commands.js # Script para registrar comandos
├── handlers/ # Handlers de cada comando
│ ├── search.js
│ ├── info.js
│ ├── install.js
│ ├── popular.js
│ └── random.js
└── utils/ # Utilidades compartidas
├── componentsLoader.js # Cache de components.json
└── embedBuilder.js # Generador de embeds
```
## 🔍 Cómo Funciona
### Flujo de una Interacción
1. Usuario ejecuta `/search security` en Discord
2. Discord envía POST a `https://your-domain.vercel.app/api/discord/interactions`
3. Vercel ejecuta `api/discord/interactions.js`
4. El handler verifica la firma (seguridad)
5. Identifica el comando y llama al handler correspondiente
6. Handler carga components.json (desde cache si existe)
7. Ejecuta la búsqueda y genera un embed
8. Retorna respuesta a Discord
9. Discord muestra el resultado al usuario
### Cache de Componentes
El sistema mantiene `components.json` en memoria por 5 minutos:
- Primera request: Descarga desde aitmpl.com
- Siguientes requests (< 5 min): Usa cache
- Después de 5 min: Actualiza automáticamente
Esto reduce latencia y requests a la API.
## 🐛 Troubleshooting
### Error: "Invalid request signature"
**Causa**: La PUBLIC_KEY no está configurada o es incorrecta
**Solución**:
1. Verifica que `DISCORD_PUBLIC_KEY` esté en las variables de entorno de Vercel
2. Asegúrate de copiar la Public Key correcta del Developer Portal
3. Redeploy después de cambiar variables de entorno
### Error: Discord no puede verificar la URL
**Causa**: El endpoint no responde correctamente al PING
**Solución**:
1. Verifica que el deployment fue exitoso
2. Prueba manualmente: `curl https://your-domain.vercel.app/api/discord/interactions`
3. Revisa los logs en Vercel Dashboard → Functions
### Comandos no aparecen en Discord
**Causa**: No se registraron o falta scope
**Solución**:
1. Ejecuta `npm run discord:register` nuevamente
2. Si usaste `DISCORD_GUILD_ID`, los comandos solo aparecen en ese server
3. Quita el bot del server y vuelve a invitarlo con el scope `applications.commands`
4. Espera unos minutos (comandos globales pueden tardar hasta 1 hora)
### Bot no responde
**Causa**: Error en el handler o falta de permisos
**Solución**:
1. Revisa logs en Vercel Dashboard → Functions
2. Verifica que el bot tenga permisos de "Send Messages" y "Embed Links"
3. Prueba con un comando simple como `/random`
### "Components data not loaded"
**Causa**: No puede acceder a components.json
**Solución**:
1. Verifica que `https://aitmpl.com/components.json` sea accesible
2. Revisa la variable `COMPONENTS_API_URL` si usas una URL custom
3. Chequea los logs de Vercel para ver el error específico
## 📊 Monitoreo
### Vercel Dashboard
Ve a tu proyecto en Vercel → Functions para ver:
- Invocaciones totales
- Errores
- Tiempo de respuesta
- Logs en tiempo real
### Discord Logs
Cada comando registra en consola:
```
🔹 Command received: /search
✅ Components data loaded
```
Revisa estos logs en Vercel Functions.
## 🚀 Próximos Pasos
### Fase 2: Comandos Interactivos
- `/stats` - Estadísticas de la plataforma
- `/new` - Componentes recientes
- `/daily` - Componente del día
### Fase 3: Botones y Menús
- Agregar botones de acción a los embeds
- Select menus para filtros avanzados
- Modal forms para búsqueda compleja
### Fase 4: Integración Avanzada
- Tracking de instalaciones vía Discord
- Notificaciones automáticas de releases
- Sistema de votación y reviews
## 💡 Tips y Mejores Prácticas
1. **Testing**: Usa `DISCORD_GUILD_ID` para testing rápido en tu server
2. **Production**: Quita `DISCORD_GUILD_ID` para comandos globales
3. **Cache**: Ajusta `CACHE_DURATION` en `componentsLoader.js` según tus necesidades
4. **Errores**: Todos los errores retornan embeds ephemeral (solo visibles para el usuario)
5. **Logs**: Los logs en Vercel te ayudan a debuggear problemas en producción
## 📚 Recursos
- [Discord Developer Portal](https://discord.com/developers/applications)
- [Discord Interactions Documentation](https://discord.com/developers/docs/interactions/receiving-and-responding)
- [Vercel Functions Documentation](https://vercel.com/docs/functions)
- [discord-interactions npm](https://www.npmjs.com/package/discord-interactions)
## 🤝 Soporte
Si tienes problemas:
1. Revisa los logs en Vercel Dashboard
2. Verifica todas las variables de entorno
3. Prueba los endpoints manualmente con curl
4. Abre un issue en GitHub con los logs relevantes
---
**¡Listo!** Tu bot de Discord está corriendo en Vercel Functions 🎉