Files
lastwar/DOCUMENTACION_SISTEMA.md

28 KiB
Executable File

Documentación Técnica del Sistema de Bots de Mensajería

1. Visión General del Sistema

Este es un sistema de mensajería multiplataforma desarrollado en PHP que permite gestionar y enviar notificaciones automatizadas a través de Discord y Telegram. El sistema incluye:

  • Programación de mensajes (una vez o recurrentes)
  • Traducción automática mediante LibreTranslate
  • Galería de imágenes para usar en mensajes
  • Plantillas de mensajes recurrentes
  • Panel de administración completo
  • Integración con n8n para automatización/IA

2. Tecnologías y Herramientas Utilizadas

Backend

  • PHP 8.3+ - Lenguaje principal del servidor
  • MySQL 9.5+ - Base de datos relacional
  • Composer - Gestión de dependencias PHP

APIs y Servicios Externos

  • Discord API v10 - Bot de Discord (librería discord-php)
  • Telegram Bot API - Envío de mensajes via HTTP
  • LibreTranslate - Servicio de traducción automática
  • n8n - Plataforma de automatización (webhooks para IA)

Frontend

  • Bootstrap 5.3 - Framework CSS responsivo
  • Bootstrap Icons - Iconos
  • Summernote - Editor WYSIWYG para mensajes HTML
  • jQuery - Manipulación del DOM

Infraestructura

  • Zone Horaria: America/Mexico_City (UTC-6)
  • Entornos: pruebas, reod (producción)
  • Sistema de Logs: Monolog + logs nativos PHP

3. Estructura de Archivos del Proyecto

/var/www/html/bot/
├── index.php                    # Dashboard principal
├── login.php                    # Página de inicio de sesión
├── logout.php                   # Cerrar sesión
├── profile.php                 # Perfil del usuario
│
├── create_message.php           # Crear nuevo mensaje
├── edit_message.php            # Editar mensaje existente
├── scheduled_messages.php      # Ver mensajes programados
├── sent_messages.php           # Ver mensajes enviados
├── recurrentes.php             # Gestionar plantillas recurrentes
├── preview_message.php         # Previsualizar mensaje
├── enviar_plantilla.php        # Enviar plantilla a usuarios
│
├── gallery.php                 # Galería de imágenes
├── upload.php                  # Subir imágenes
├── delete_image.php            # Eliminar imágenes
├── rename_image.php            # Renombrar imágenes
├── upload_editor_image.php     # Subir imágenes desde editor
│
├── change_language.php         # Cambiar idioma de la interfaz
│
├── discord_bot.php             # Bot de Discord (proceso largo)
├── telegram_bot_webhook.php     # Webhook de Telegram
├── process_queue.php           # Procesador de cola de mensajes
│
├── config/
│   └── config.php              # Configuración principal
│
├── includes/                   # Archivos incluidos
│   ├── db.php                  # Conexión a base de datos
│   ├── session_check.php       # Verificación de sesión
│   ├── auth.php                # Autenticación
│   ├── logger.php              # Funciones de logging
│   ├── activity_logger.php     # Registro de actividades
│   ├── message_handler.php     # Procesamiento de mensajes
│   ├── message_handler_edit.php
│   ├── schedule_helpers.php     # Funciones de programación
│   ├── schedule_actions.php    # Acciones de programación
│   ├── recurrent_message_handler.php
│   ├── translation_helper.php  # Helper de traducción
│   ├── url_helper.php          # Helper de URLs
│   ├── emojis.php              # Emojis disponibles
│   ├── get_gallery.php         # Obtener imágenes galería
│   ├── error_handler.php       # Manejo de errores
│   ├── telegram_actions.php     # Acciones de Telegram
│   ├── discord_actions.php     # Acciones de Discord
│   ├── tren_handler.php        # Manejo de eventos de tren
│   ├── command_locker.php      # Bloqueo de comandos
│   └── get_chat_history.php    # Historial de chat
│
├── src/                       # Clases principales
│   ├── Translate.php           # Clase de traducción
│   ├── TelegramSender.php      # Envío a Telegram
│   ├── DiscordSender.php       # Envío a Discord
│   ├── HtmlToTelegramHtmlConverter.php
│   ├── HtmlToDiscordMarkdownConverter.php
│   ├── TranslationWorker.php   # Worker de traducción
│   ├── TranslationCache.php    # Cache de traducciones
│   ├── CommandLocker.php       # Bloqueo de comandos
│   └── TranslationWorkerPool.php
│
├── discord/                   # Módulo Discord
│   ├── DiscordSender.php
│   ├── converters/
│   │   └── HtmlToDiscordMarkdownConverter.php
│   └── actions/
│       └── discord_actions.php
│
├── telegram/                  # Módulo Telegram
│   ├── TelegramSender.php
│   ├── converters/
│   │   └── HtmlToTelegramHtmlConverter.php
│   ├── actions/
│   │   ├── telegram_actions.php
│   │   └── send_telegram_reply.php
│   ├── admin/
│   │   ├── telegram_bot_interactions.php
│   │   ├── telegram_welcome.php
│   │   └── chat_telegram.php
│   └── webhook/
│       └── telegram_bot_webhook.php
│
├── admin/                    # Panel de Administración
│   ├── users.php             # Gestión de usuarios
│   ├── recipients.php         # Gestión de destinatarios
│   ├── languages.php          # Gestión de idiomas
│   ├── comandos.php           # Gestión de comandos
│   ├── activity.php           # Ver actividad del sistema
│   ├── test_discord_connection.php
│   ├── set_test_webhook.php
│   ├── sync_languages.php     # Sincronizar idiomas
│   ├── get_user_groups.php
│   ├── update_language_status.php
│   └── update_language_flag.php
│
├── templates/                 # Plantillas UI
│   ├── header.php            # Encabezado con menú
│   └── footer.php            # Pie de página
│
├── galeria/                   # Imágenes del sistema
│
├── db/
│   └── bot.sql               # Esquema de base de datos
│
├── logs/                      # Archivos de log
│   ├── discord_bot.log
│   ├── telegram_bot_webhook.log
│   ├── process_queue.log
│   └── php_errors.log
│
├── vendor/                    # Dependencias Composer
└── config/                    # Configuraciones adicionales

4. Estructura de la Base de Datos

Tablas Principales

users - Usuarios del sistema

  • id (INT, PK)
  • username (VARCHAR)
  • password (VARCHAR, hashed)
  • role (ENUM: 'user', 'admin')
  • telegram_chat_id (VARCHAR, nullable)
  • created_at (TIMESTAMP)

recipients - Destinatarios (canales/usuarios)

  • id (INT, PK)
  • platform_id (BIGINT) - ID en Discord/Telegram
  • name (VARCHAR)
  • type (ENUM: 'channel', 'user')
  • platform (ENUM: 'discord', 'telegram')
  • language_code (VARCHAR, default 'es')
  • chat_mode (VARCHAR) - Modo de chat: agent, bot, ia
  • created_at (TIMESTAMP)

messages - Contenido de mensajes

  • id (INT, PK)
  • user_id (INT, FK)
  • content (TEXT) - HTML del mensaje
  • created_at (TIMESTAMP)

schedules - Programaciones de envío

  • id (INT, PK)
  • message_id (INT, FK)
  • recipient_id (INT, FK)
  • send_time (DATETIME)
  • status (ENUM: 'draft', 'pending', 'processing', 'sent', 'failed')
  • is_recurring (BOOLEAN)
  • recurring_days (VARCHAR) - Días separados por coma
  • recurring_time (TIME)
  • sent_at (DATETIME)
  • error_message (TEXT)
  • created_at (TIMESTAMP)

recurrent_messages - Plantillas de mensajes

  • id (INT, PK)
  • name (VARCHAR)
  • message_content (TEXT)
  • telegram_command (VARCHAR) - Comando sin #
  • created_at (TIMESTAMP)
  • updated_at (TIMESTAMP)

sent_messages - Mensajes enviados

  • id (INT, PK)
  • schedule_id (INT, FK)
  • recipient_id (INT, FK)
  • platform_message_id (VARCHAR) - ID del mensaje en plataforma
  • message_count (INT)
  • sent_at (DATETIME)

supported_languages - Idiomas disponibles

  • id (INT, PK)
  • language_code (VARCHAR) - Código (es, pt, en, etc.)
  • language_name (VARCHAR) - Nombre del idioma
  • flag_emoji (VARCHAR) - Emoji de bandera
  • is_active (BOOLEAN) - Si está activo para traducción
  • created_at (TIMESTAMP)
  • updated_at (TIMESTAMP)

telegram_bot_messages - Configuración de Bienvenida Telegram

  • id (INT, PK)
  • message_text (TEXT) - Mensaje de bienvenida (soporta {user_name})
  • button_text (VARCHAR) - Texto del botón
  • group_invite_link (VARCHAR) - Enlace de invitación al grupo
  • is_active (BOOLEAN) - Si el mensaje está activo
  • register_users (BOOLEAN) - Si se registran automáticamente los usuarios
  • updated_at (TIMESTAMP)

telegram_bot_interactions - Registro de Interacciones Telegram

  • id (INT, PK)
  • user_id (BIGINT) - ID del usuario en Telegram
  • username (VARCHAR) - Username de Telegram
  • first_name (VARCHAR) - Nombre del usuario
  • last_name (VARCHAR) - Apellido del usuario
  • interaction_type (VARCHAR) - Tipo: 'message', 'start', etc.
  • interaction_date (TIMESTAMP)

settings - Configuraciones Generales

  • setting_key (VARCHAR, PK)
  • setting_value (VARCHAR)

telegram_welcome_messages - Mensajes de Bienvenida por Grupo

  • id (INT, PK)
  • chat_id (BIGINT) - ID del grupo de Telegram
  • welcome_message (TEXT) - Mensaje personalizado
  • button_text (VARCHAR)
  • group_invite_link (VARCHAR)
  • is_active (BOOLEAN)
  • created_at (TIMESTAMP)
  • updated_at (TIMESTAMP)
  • language_code (VARCHAR)
  • language_name (VARCHAR)
  • flag_emoji (VARCHAR)
  • is_active (BOOLEAN)
  • created_at (TIMESTAMP)

translation_queue - Cola de traducciones

  • id (INT, PK)
  • platform (VARCHAR)
  • message_id (BIGINT)
  • chat_id (BIGINT)
  • user_id (BIGINT)
  • text_to_translate (TEXT)
  • source_lang (VARCHAR)
  • target_lang (VARCHAR)
  • status (ENUM: 'pending', 'completed', 'failed')
  • created_at (TIMESTAMP)

activity_log - Registro de actividades

  • id (INT, PK)
  • user_id (INT)
  • username (VARCHAR)
  • action (VARCHAR)
  • details (TEXT)
  • timestamp (DATETIME)

telegram_interactions - Interacciones Telegram

  • id (INT, PK)
  • chat_id (BIGINT)
  • message_text (TEXT)
  • direction (ENUM: 'in', 'out')
  • language_code (VARCHAR)
  • created_at (TIMESTAMP)

command_locks - Bloqueos de comandos

  • id (INT, PK)
  • chat_id (BIGINT)
  • command (VARCHAR)
  • type (ENUM: 'command', 'translation')
  • data (JSON)
  • message_id (BIGINT)
  • status (ENUM: 'processing', 'completed', 'failed')
  • created_at (TIMESTAMP)
  • expires_at (DATETIME)

5. Análisis del Menú y Rutas

5.1 Menú Principal (templates/header.php)

├── INICIO (index.php)
│   └── Dashboard - Vista de mensajes programados del usuario
│
├── MENSAJES (dropdown)
│   ├── Crear Mensaje (create_message.php)
│   │   ├── Carga plantillas
│   │   ├── Editor HTML (Summernote)
│   │   ├── Selección de plataforma (Discord/Telegram)
│   │   ├── Selección de destinatario
│   │   ├── Programación (ahora/fecha/recurrente)
│   │   └── Envío → includes/message_handler.php
│   │
│   ├── Programados (scheduled_messages.php)
│   │   └── Lista de mensajes pendientes/enviados
│   │
│   ├── Plantillas (recurrentes.php)
│   │   ├── Crear plantilla
│   │   ├── Editor HTML
│   │   ├── Comando Telegram (sin #)
│   │   └── includes/recurrent_message_handler.php
│   │
│   └── Enviados (sent_messages.php)
│       └── Historial de mensajes enviados
│
├── GALERÍA (gallery.php)
│   ├── Ver todas las imágenes
│   ├── Subir imagen → upload.php
│   ├── Renombrar → rename_image.php
│   └── Eliminar → delete_image.php
│
├── ADMIN (solo admins)
│   ├── Gestión
│   │   ├── Usuarios (admin/users.php)
│   │   │   ├── Crear usuario
│   │   │   ├── Editar usuario
│   │   │   ├── Asignar rol (user/admin)
│   │   │   └── Vincular Telegram
│   │   │
│   │   └── Destinatarios (admin/recipients.php)
│   │       ├── Listar canales/usuarios Discord
│   │       ├── Listar canales/usuarios Telegram
│   │       ├── Editar idioma
│   │       └── Eliminar destinatario
│   │
│   ├── Configuración
│   │   ├── Idiomas (admin/languages.php)
│   │   │   ├── Lista de idiomas soportados
│   │   │   ├── Activar/desactivar idioma
│   │   │   ├── Editar bandera emoji
│   │   │   └── Sincronizar con LibreTranslate
│   │   │
│   │   └── Comandos (admin/comandos.php)
│   │       └── Lista de comandos disponibles
│   │
│   ├── Bots (Telegram)
│   │   ├── Config (telegram/admin/telegram_welcome.php)
│   │   │   └── Configurar mensaje de bienvenida
│   │   │
│   │   ├── Interacciones Bot (telegram/admin/telegram_bot_interactions.php)
│   │   │   └── Ver interacciones de usuarios
│   │   │
│   │   └── Chat Telegram (telegram/admin/chat_telegram.php)
│   │       └── Ver historial de chat
│   │
│   └── Monitoreo
│       ├── Actividad (admin/activity.php)
│       │   └── Log de actividades del sistema
│       │
│       └── Test (admin/test_discord_connection.php)
│           └── Probar conexión con Discord
│
├── PERFIL (profile.php)
│   └── Configuración de cuenta de usuario
│
└── CERRAR SESIÓN (logout.php)

6. Flujo de Funcionamiento

6.1 Creación y Envío de Mensaje

1. Usuario inicia sesión (login.php)
   └── Valida credenciales → includes/auth.php
   └── Crea sesión PHP

2. Usuario crea mensaje (create_message.php)
   ├── Selecciona plantilla (opcional)
   ├── Escribe/edita contenido HTML (Summernote)
   ├── Selecciona plataforma (Discord/Telegram)
   ├── Selecciona destinatario(s)
   ├── Selecciona programación:
   │   ├── Enviar ahora
   │   ├── Programar para fecha/hora
   │   └── Programación recurrente (días + hora)
   └── Envía formulario

3. Procesamiento (includes/message_handler.php)
   ├── Valida datos
   ├── Inserta mensaje en tabla `messages`
   ├── Inserta programación en tabla `schedules`
   └── Si es "enviar ahora":
       └── Ejecuta process_queue.php en background

4. Cola de procesamiento (process_queue.php)
   ├── Se ejecuta cada minuto (cron job)
   ├── Busca mensajes pending con send_time <= ahora
   ├── Marca como 'processing'
   ├── Convierte HTML a formato de plataforma:
   │   ├── Discord → DiscordSender + HtmlToDiscordMarkdownConverter
   │   └── Telegram → TelegramSender + HtmlToTelegramHtmlConverter
   ├── Envía mensaje a API de plataforma
   ├── Registra en `sent_messages`
   ├── Si es recurrente, calcula próximo envío
   └── Marca como 'sent' o 'failed'

5. Usuario puede ver:
   ├── Mensajes programados (scheduled_messages.php)
   ├── Mensajes enviados (sent_messages.php)
   └── Plantillas guardadas (recurrentes.php)

6.2 Flujo de Traducción Automática

1. Mensaje se crea con atributo data-translate="true"
   → Se encola para traducción

2. Translation Worker (process_translation_queue.php)
   ├── Detecta idioma original (LibreTranslate /detect)
   ├── Traduce a cada idioma activo (LibreTranslate /translate)
   ├── Guarda en translation_queue
   └── Envía resultado a usuario

3. Botones de traducción en Telegram
   ├── Se añaden después de enviar mensaje
   ├── Callback: translate:{message_id}:{lang}
   └── Usuario puede traducir manualmente

4. Botones de traducción en Discord
   ├── Se añaden después de enviar mensaje
   ├── Botones con estilo: translate_manual:{lang}
   └── Traducción inline en canal

7. Bots de Mensajería

7.1 Bot de Discord (discord_bot.php)

Tecnologías:

  • Librería discord-php (v7+)
  • WebSockets para eventos en tiempo real
  • API REST para envío de mensajes

Eventos manejados:

Evento Acción
GUILD_MEMBER_ADD Registra nuevo miembro en recipients
MESSAGE_CREATE Procesa mensajes entrantes
INTERACTION_CREATE Maneja clics en botones

Comandos disponibles:

Comando Descripción
#comando Envía plantilla de mensaje
/comandos Lista de comandos disponibles
/setlang XX Establece idioma del usuario
/bienvenida Envía mensaje de bienvenida
/agente [prompt] Envía a n8n para IA
!ping Responde "pong!"

Modos de Chat:

  • agent: Menú de selección (bot/IA)
  • bot: Comandos normales
  • ia: Todo se envía a n8n

Traducción:

  • Detecta idioma automáticamente
  • Encola traducciones para todos los idiomas activos
  • Botones para traducir manualmente

7.2 Bot de Telegram (telegram_bot_webhook.php)

Tecnologías:

  • API de Webhooks de Telegram
  • cURL para llamadas HTTP

Flujo de un mensaje:

1. Telegram envía Update al webhook
   └── Autenticación por auth_token

2. Determina tipo de chat:
   ├── Chat privado → Modo agente/IA
   │   ├── Registro de nuevo usuario
   │   ├── Menú de bienvenida
   │   └── Modos: agent, bot, ia
   │
   └── Grupo/Canal → Lógica de bot
       ├── Nuevos miembros → Se registran
       ├── Comandos (/) → Se procesan
       ├── #comando → Envía plantilla
       └── Mensajes normales → Traducción

3. Comandos disponibles:
   ├── /setlang XX - Idioma
   ├── /bienvenida - Mensaje de bienvenida
   ├── /comandos - Lista de comandos
   └── /agente - Cambiar a modo IA

4. Traducción:
   ├── Automática en cola
   └── Botones inline para traducir

### 7.3 Registro de Usuarios y Mensajes de Bienvenida

#### Discord - Registro de Nuevos Miembros

Cuando un nuevo miembro se une al servidor de Discord, el bot ejecuta el evento `GUILD_MEMBER_ADD`:

Evento: GUILD_MEMBER_ADD └── Se ejecuta en: discord_bot.php (líneas 53-66) │ ├── 1. Obtiene datos del miembro: │ ├── platform_id = member.id (ID de Discord) │ ├── name = member.user.username │ └── platform = 'discord' │ ├── 2. Inserta/actualiza en tabla 'recipients': │ └── INSERT INTO recipients (platform_id, name, type, platform, language_code) │ VALUES (?, ?, 'user', 'discord', 'es') │ ON DUPLICATE KEY UPDATE name = VALUES(name) │ └── 3. Queda registrado para recibir mensajes


**Ubicación en código:** `discord_bot.php:53-66`

#### Telegram - Registro de Nuevos Usuarios

Cuando un usuario interactúa por primera vez con el bot de Telegram:

Evento: Primer mensaje / interacción └── Se ejecuta en: telegram_bot_webhook.php (líneas 99-142) │ ├── 1. Verifica configuración de registro: │ └── SELECT * FROM telegram_bot_messages WHERE id = 1 │ └── register_users = 1 (habilitado por defecto) │ ├── 2. Obtiene datos del usuario: │ ├── platform_id = from.id │ ├── name = first_name + last_name │ ├── language_code = from.language_code │ └── platform = 'telegram' │ ├── 3. Inserta en tabla 'recipients': │ └── INSERT INTO recipients (platform_id, name, type, platform, language_code, chat_mode) │ VALUES (?, ?, 'user', 'telegram', ?, 'agent') │ ON DUPLICATE KEY UPDATE name = VALUES(name) │ └── 4. Si está activo, envía mensaje de bienvenida: ├── Lee configuración: telegram_bot_messages ├── Reemplaza {user_name} con el nombre del usuario ├── Envía botón con enlace al grupo └── Registra interacción en telegram_bot_interactions


**Ubicación en código:** `telegram_bot_webhook.php:99-142`

#### Telegram - Nuevos Miembros en Grupos

Cuando un nuevo miembro se une a un grupo de Telegram:

Evento: new_chat_members (en grupos) └── Se ejecuta en: telegram_bot_webhook.php (líneas 222-234) │ ├── 1. Detecta nuevos miembros: │ └── message['new_chat_members'] │ ├── 2. Para cada nuevo miembro (si no es bot): │ ├── Registra en recipients │ └── Language code del usuario │ └── 3. No envía bienvenida automática (solo en chat privado)


**Ubicación en código:** `telegram_bot_webhook.php:222-234`

#### Mensaje de Bienvenida - Configuración

Los mensajes de bienvenida se configuran desde el panel de admin:

**Para Telegram:**
- **Ubicación**: `telegram/admin/telegram_bot_interactions.php`
- **Tabla**: `telegram_bot_messages`
- **Campos configurables**:
  - `message_text`: Texto del mensaje (soporta `{user_name}`)
  - `button_text`: Texto del botón de invitación
  - `group_invite_link`: Enlace al grupo de Telegram
  - `is_active`: Habilitar/deshabilitar mensaje
  - `register_users`: Registrar automáticamente usuarios

**Ejemplo de mensaje de bienvenida:**

¡Hola {user_name}! 👋

Puedes usar /comandos para obtener una lista de comandos con la información que tenemos sobre el juego y solicitarla con el #comando.

También puedes usar /agente, para interactuar con los comandos o con la AI que tenemos.

Gracias por interactuar con nuestro bot de REOD. Únete a nuestro grupo principal para mantenerte actualizado.


**Tabla de Interacciones:**
- Los usuarios quedan registrados en `telegram_bot_interactions`
- Tipos de interacción: 'message', 'start', 'callback', etc.
- Permite hacer auditoría de uso del bot

---

## 8. Páginas Principales y sus Archivos

### index.php (Dashboard)
- **Propósito**: Mostrar mensajes programados del usuario
- **Archivos incluidos**:
  - `includes/session_check.php`
  - `includes/db.php`
  - `templates/header.php`
  - `templates/footer.php`
- **Datos**: Query de `schedules` + `messages` + `recipients`

### create_message.php (Crear Mensaje)
- **Propósito**: Formulario para crear nuevo mensaje
- **Archivos incluidos**:
  - `includes/session_check.php`
  - `includes/db.php`
  - `templates/header.php`
  - `templates/footer.php`
- **Funcionalidades**:
  - Carga plantillas de `recurrent_messages`
  - Editor Summernote
  - Galería de imágenes (modal)
  - Selección de plataforma/destinatario
  - Programación (ahora/fecha/recurrente)

### scheduled_messages.php
- **Propósito**: Lista de mensajes programados
- **Procesa**: Tabla `schedules` con JOINs

### recurrentes.php (Plantillas)
- **Propósito**: Gestionar plantillas de mensajes
- **Archivos incluidos**:
  - `includes/recurrent_message_handler.php`
- **Funcionalidades**:
  - CRUD de plantillas
  - Comando Telegram asociado
  - Preview de contenido

### gallery.php
- **Propósito**: Gestión de imágenes
- **Archivos**: `upload.php`, `delete_image.php`, `rename_image.php`
- **Carpeta**: `/galeria/`

### admin/users.php
- **Propósito**: Gestión de usuarios del sistema
- **Acceso**: Solo admins (`role = 'admin'`)
- **Funcionalidades**:
  - Crear/editar usuarios
  - Asignar roles
  - Vincular Telegram

### admin/recipients.php
- **Propósito**: Gestión de destinatarios
- **Plataformas**: Discord + Telegram
- **Tipos**: Canales + Usuarios

### admin/languages.php
- **Propósito**: Configurar idiomas de traducción
- **Proveedor**: LibreTranslate
- **Funcionalidades**:
  - Activar/desactivar idiomas
  - Editar emoji de bandera
  - Sincronización con API

### telegram/admin/telegram_bot_interactions.php
- **Propósito**: Configurar mensaje de bienvenida de Telegram
- **Tabla**: `telegram_bot_messages`
- **Funcionalidades**:
  - Editar mensaje de bienvenida
  - Configurar botón de invitación
  - Establecer enlace al grupo
  - Activar/desactivar registro automático de usuarios

### telegram/admin/telegram_welcome.php
- **Propósito**: Configurar mensajes de bienvenida por grupo
- **Tabla**: `telegram_welcome_messages`
- **Funcionalidades**:
  - Configurar mensaje por cada grupo
  - Personalizar botón e invitación

### telegram/admin/chat_telegram.php
- **Propósito**: Ver historial de interacciones con el bot
- **Tabla**: `telegram_bot_interactions`
- **Funcionalidades**:
  - Lista de usuarios que han interactuado
  - Tipo de interacción (message, start, etc.)
  - Fecha de última interacción

### admin/activity.php
- **Propósito**: Ver registro de actividades del sistema
- **Tabla**: `activity_log`
- **Acciones registradas**:
  - Inicio/cierre de sesión
  - Creación de mensajes
  - Eliminación de mensajes
  - Actualizaciones de usuarios
  - Eliminación de imágenes

---

## 9. Variables de Entorno (.env)

```env
# Entorno
APP_ENVIRONMENT=pruebas  # o 'reod' para producción

# Base de datos
DB_HOST=10.10.4.17
DB_PORT=3390
DB_NAME=bot
DB_USER=root
DB_PASS=*****

# Discord
DISCORD_BOT_TOKEN=*****
DISCORD_GUILD_ID=*****
DISCORD_CLIENT_ID=*****
DISCORD_CLIENT_SECRET=*****

# Telegram
TELEGRAM_BOT_TOKEN=*****
TELEGRAM_WEBHOOK_TOKEN=*****

# Traducción
LIBRETRANSLATE_URL=http://libretranslate:5000

# n8n (Automatización/IA)
N8N_URL=*****
N8N_TOKEN=*****
N8N_IA_WEBHOOK_URL=*****
N8N_IA_WEBHOOK_URL_DISCORD=*****
N8N_PROCESS_QUEUE_WEBHOOK_URL=*****

# Seguridad
JWT_SECRET=*****
APP_URL=https://tu-dominio.com

# API Interna
INTERNAL_API_KEY=*****

10. Configuración de Producción

Cron Jobs Recomendados

# Procesar cola de mensajes cada minuto
* * * * * /usr/bin/php /var/www/html/bot/process_queue.php

# Limpiar logs antiguos (semanalmente)
0 0 * * 0 find /var/www/html/bot/logs -name "*.log" -mtime +30 -delete

# Reiniciar bots si fallan (cada 5 minutos)
*/5 * * * * pgrep -f "discord_bot.php" || /usr/bin/php /var/www/html/bot/discord_bot.php >> /var/www/html/bot/logs/discord_bot.out.log 2>&1 &

Webhooks

# Telegram Webhook
https://tu-dominio.com/telegram_bot_webhook.php?auth_token=TOKEN

# n8n (procesamiento)
URL configurable desde admin

11. Funcionalidades por Archivo

Archivo Función Principal
discord_bot.php Bot de Discord en tiempo real
telegram_bot_webhook.php Recibe mensajes de Telegram
process_queue.php Procesa mensajes programados
includes/message_handler.php Maneja creación/edición de mensajes
src/Translate.php Wrapper para LibreTranslate
discord/DiscordSender.php Envía mensajes a Discord
telegram/TelegramSender.php Envía mensajes a Telegram
common/helpers/converter_factory.php Convierte HTML entre formatos

12. Resumen de Flujos

Flujo Completo de un Mensaje Programado

Usuario → create_message.php → message_handler.php 
→ schedules (DB) → process_queue.php (cron)
→ DiscordSender/TelegramSender → API Plataforma
→ sent_messages (DB) → (si recurrente) → recalcular próximo

Flujo de Traducción

Mensaje con data-translate="true" 
→ translation_queue (DB) 
→ TranslationWorker 
→ LibreTranslate 
→ Envío a usuario

Flujo de Bot (Discord/Telegram)

Plataforma → Webhook/Bot Event 
→ Verificar usuario 
→ Procesar comando/traducción 
→ Responder 
→ Actualizar DB

13. Conclusiones

El sistema está bien estructurado y cumple con los siguientes objetivos:

  1. Multiplataforma: Soporta Discord y Telegram desde una sola interfaz
  2. Flexible: Permite programación simple o recurrente
  3. Traducible: Integración con LibreTranslate para automático y manual
  4. Escalable: Uso de colas y workers para procesamiento asíncrono
  5. Administrable: Panel completo para gestión de usuarios, destinatarios e idiomas
  6. Integrado: Conexión con n8n para automatización avanzada e IA

El código utiliza patrones modernos de PHP (PDO, Composer, Namespaces) y sigue una estructura modular que facilita el mantenimiento y expansión futura.