8.0 KiB
Executable File
Especificación del Proyecto Bot de Discord
1. Introducción
Este documento detalla los requisitos y funcionalidades para el desarrollo de un proyecto independiente que gestione un bot de Discord y su interfaz web asociada. El objetivo es crear una aplicación autónoma que permita la administración y operación de un bot de Discord, incluyendo la programación de mensajes, gestión de usuarios y funcionalidades avanzadas de interacción y traducción.
2. Requisitos Generales
- Lenguaje: PHP (versión compatible con las librerías).
- Base de Datos: MySQL/MariaDB.
- Gestor de Dependencias: Composer.
- Variables de Entorno: Uso de archivos
.envpara configuración sensible (tokens, credenciales DB, URLs de webhooks). - Logging: Implementación de un sistema de logging robusto (ej. Monolog).
- Seguridad: Protección contra CSRF en la web, validación de entradas.
3. Funcionalidades del Bot de Discord (Backend)
El bot de Discord debe ser una aplicación PHP que se conecta a la API de Discord y escucha eventos.
3.1. Conexión y Eventos
- Librería: Uso de
discord-php/DiscordPHPpara la interacción con la API de Discord. - Token: Conexión mediante
DISCORD_BOT_TOKEN(variable de entorno). - Intents: Configuración de
Intentsnecesarios (ej.GUILDS,GUILD_MESSAGES,DIRECT_MESSAGES,GUILD_MEMBERS,GUILD_MESSAGE_REACTIONS). - Eventos Escuchados:
ready: Confirmación de conexión y logging.GUILD_MEMBER_ADD: Para registrar nuevos miembros.INTERACTION_CREATE: Para manejar interacciones de botones.MESSAGE_CREATE: Para procesar mensajes entrantes.
3.2. Gestión de Usuarios y Modos de Chat
- Registro Automático:
- Cuando un nuevo miembro se une a un servidor, el bot debe registrarlo o actualizarlo en la tabla
recipients(ID de Discord, nombre,platform='discord',language_code).
- Cuando un nuevo miembro se une a un servidor, el bot debe registrarlo o actualizarlo en la tabla
- Modos de Interacción (en DM):
- Modo
agent(por defecto para nuevos DM): Presenta al usuario un menú con botones para elegir entre "Platicar con bot" o "Usar IA". - Modo
bot: El bot procesa los mensajes como comandos normales. - Modo
ia: Todos los mensajes del usuario son reenviados a un servicio de IA externo.
- Modo
- Cambio de Modo: Los usuarios deben poder cambiar de modo mediante botones o el comando
/agente(que los devuelve al modoagent). - Persistencia: El
chat_modedel usuario debe almacenarse en la tablarecipients.
3.3. Comandos y Mensajes
- Comandos Estándar:
!ping: Comando de prueba simple que responde "pong!"./setlang <código_idioma>: Permite al usuario establecer su idioma preferido (actualizarecipients.language_code)./bienvenida: Envía un mensaje de bienvenida configurable (desde la base de datos) con un botón de enlace./comandos: Lista todos los comandos#personalizados disponibles, con su descripción./agente <prompt>: Envía un prompt específico al agente de IA a través de N8N, similar al modoiapero como un comando único.
- Comandos Personalizados (
#<comando>):- El bot debe buscar el
<comando>en la tablarecurrent_messages. - Si se encuentra, el
message_content(HTML) debe ser convertido a Markdown compatible con Discord. - El mensaje debe ser enviado al chat.
- Botones de Traducción Dinámicos: Después de enviar un comando
#, el mensaje enviado debe ser editado para incluir botones que permitan la traducción manual a otros idiomas activos.
- El bot debe buscar el
3.4. Funcionalidades de Traducción
- Detección de Idioma: Capacidad para detectar el idioma de los mensajes entrantes.
- Traducción Manual (Botones):
- Los botones de traducción dinámica deben permitir al usuario solicitar una traducción de un mensaje específico a un idioma.
- La traducción debe mostrarse como un mensaje efímero o una respuesta directa.
- Traducción Automática (Mensajes Regulares):
- Los mensajes de texto que no son comandos deben ser encolados en la tabla
translation_queuepara ser traducidos automáticamente a todos los idiomas activos (excepto el idioma detectado). - Se asume un proceso externo (
process_translation_queue.php) que consumirá esta cola.
- Los mensajes de texto que no son comandos deben ser encolados en la tabla
- Conversión HTML: Los contenidos HTML almacenados en la base de datos deben ser convertidos a Markdown compatible con Discord antes de ser enviados.
3.5. Integración con IA (N8N)
- Webhook: Cuando el usuario está en modo
iao usa el comando/agente, los mensajes deben ser reenviados a un webhook externo (URL configurable en.env, ej.N8N_IA_WEBHOOK_URL_DISCORD). - Datos Enviados: El webhook debe recibir
chat_id,user_id,messageynamedel usuario.
4. Interfaz Web (para la Gestión del Bot de Discord)
Se requiere una interfaz web completa para administrar el bot de Discord. Esta interfaz debe ser una aplicación PHP independiente.
4.1. Autenticación y Seguridad
- Sistema de login/logout para usuarios administradores.
- Protección CSRF en formularios.
- Gestión de sesiones.
4.2. Dashboard
- Vista general de la actividad del bot de Discord.
- Estadísticas relevantes (ej. número de usuarios de Discord, mensajes enviados).
4.3. Gestión de Mensajes
- Creación/Edición de Mensajes: Interfaz para crear y editar mensajes que se usarán como respuestas a comandos
#.- Editor HTML para el contenido del mensaje.
- Asociación con un comando de Discord (ej.
#mi_comando).
- Mensajes Programados: Gestión de mensajes que se enviarán en fechas y horas específicas a usuarios o canales de Discord.
- Mensajes Recurrentes: Configuración de mensajes que se envían periódicamente.
4.4. Gestión de Usuarios de Discord
- Listado de todos los
recipientsde la plataformadiscord. - Posibilidad de ver/editar el
language_codeychat_modede los usuarios. - Posibilidad de enviar mensajes directos a usuarios específicos de Discord desde la web.
4.5. Configuración del Bot
- Idiomas Soportados: Gestión de los idiomas activos (
supported_languages), incluyendo código, nombre y emoji de bandera. - Mensaje de Bienvenida: Configuración del mensaje de bienvenida para nuevos miembros del servidor (texto, botón, enlace de invitación, activación/desactivación).
- Conexión: Interfaz para verificar la conexión del bot de Discord.
5. Componentes Técnicos Compartidos
Aunque el proyecto será independiente, se espera que utilice o replique la lógica de los siguientes componentes del proyecto original:
config/config.php: Para cargar variables de entorno y configuraciones.includes/db.php: Clase para la conexión a la base de datos (PDO Singleton).src/Translate.php: Clase para la detección y traducción de idiomas.src/CommandLocker.php: Clase para el bloqueo de comandos.src/DiscordSender.php: Clase para interactuar con la API de Discord.src/HtmlToDiscordMarkdownConverter.php: Clase para convertir HTML a formato Markdown de Discord.
6. Estructura de la Base de Datos (Relevante para Discord)
Se espera que el proyecto utilice tablas similares a las identificadas en el análisis:
recipients: Para usuarios de Discord.recurrent_messages: Para comandos#de Discord.supported_languages: Para idiomas activos.translation_queue: Para mensajes de Discord pendientes de traducción.telegram_bot_messages: (Nota: esta tabla podría necesitar ser renombrada o generalizada abot_messagessi contiene configuraciones para ambos bots, o se crearía unadiscord_bot_messagesespecífica).telegram_interactions: (Nota: esta tabla podría necesitar ser renombrada o generalizada abot_interactionssi contiene interacciones para ambos bots, o se crearía unadiscord_interactionsespecífica).activity_log: Para registrar actividades de la interfaz web.
--- End of content ---