# Complemento de Documentación - Funcionalidades Adicionales Este documento complementa el archivo principal `DOCUMENTACION_SISTEMA.md` con funcionalidades adicionales descubiertas. --- ## 1. Sistema de Traducción ### 1.1 Proceso de Traducción Automática El sistema tiene múltiples capas de traducción: #### A) Traducción en Tiempo Real (durante envío) Cuando se envía un mensaje con el flag `data-translate="true"`, el sistema: 1. Detecta el idioma del mensaje 2. Traduce a todos los idiomas activos configurados 3. Envía las traducciones junto con el mensaje original **Archivos involucrados:** - `src/Translate.php` - Clase principal de traducción - `process_queue.php` - Procesa el envío y traducción #### B) Cola de Traducción Asíncrona (`process_translation_queue.php`) Procesa traducciones de mensajes de usuarios en background: ``` Flujo: 1. Mensaje de usuario entra al sistema 2. Se encola en tabla translation_queue 3. Worker procesa la cola: - Detecta idioma origen - Traduce a todos los idiomas activos - Envía embed con traducciones 4. Marca como completed/failed ``` **Características:** - Usa `pcntl` para señales (SIGINT, SIGTERM) - Bloqueo de filas con `FOR UPDATE SKIP LOCKED` - Reintentos (attempts < 5) - Manejo de menciones de Discord (protege durante traducción) **Tabla: `translation_queue`** - `id`, `platform`, `message_id`, `chat_id`, `user_id` - `text_to_translate`, `source_lang`, `target_lang` - `status` (pending/processing/completed/failed) - `attempts`, `error_message`, `created_at`, `processed_at` #### C) Traducción Manual (Botones) **Discord:** - Después de enviar una plantilla, se añaden botones de traducción - Botón: `translate_manual:{lang}` o `translate_template:{command}:{lang}` - Traduce el mensaje al idioma seleccionado **Telegram:** - Botones inline con callback `translate:{message_id}:{lang}` - Traduce y envía como mensaje nuevo ### 1.2 Proxy de Traducción (`translate_proxy.php`) API REST que permite traducciones externas: - Expone endpoints de LibreTranslate - Maneja CORS - Lee configuración de entorno --- ## 2. Sistema de Mensajería ### 2.1 Tipos de Programación El sistema soporta múltiples tipos de envío: | Tipo | Descripción | Campo | |------|-------------|-------| | `now` | Envío inmediato | send_time = NOW() | | `later` | Programado para fecha/hora específica | send_time = fecha futura | | `recurring` | Recurrente (días de la semana) | is_recurring=1 + recurring_days + recurring_time | ### 2.2 Estados de un Mensaje | Estado | Significado | |--------|-------------| | `draft` | Guardado sin programar | | `pending` | Esperando fecha de envío | | `processing` | Siendo enviado en este momento | | `sent` | Enviado exitosamente | | `failed` | Error en el envío | | `cancelled` | Cancelado por usuario | | `disabled` | Deshabilitado temporalmente | ### 2.3 Acciones sobre Mensajes Programados (`schedule_actions.php`) | Acción | Descripción | |--------|-------------| | `disable` | Deshabilita el mensaje (status = disabled) | | `enable` | Habilita mensaje deshabilitado (status = pending) | | `cancel` | Cancela el envío (status = cancelled) | | `retry` | Reintenta envío fallido (status = pending) | | `delete` | Elimina la programación completamente | --- ## 3. Plantillas y Comandos ### 3.1 Sistema de Comandos Las plantillas pueden tener comandos asociados (sin #) que los usuarios pueden ejecutar en Discord/Telegram: ``` Comando en Telegram/Discord: #Dia6 └── Sistema busca en recurrent_messages WHERE telegram_command = 'Dia6' └── Envía el message_content convertido al formato de la plataforma ``` ### 3.2 Envío desde Plantillas (`enviar_plantilla.php`) Página para enviar rápidamente una plantilla a múltiples destinatarios: - Seleccionar plantilla - Elegir plataforma (Discord/Telegram) - Seleccionar múltiples destinatarios - Programar o enviar inmediatamente --- ## 4. Galería de Imágenes ### 4.1 Gestión de Imágenes **Ubicación:** `/galeria/` **Operaciones:** - `upload.php` - Subir nuevas imágenes - `delete_image.php` - Eliminar imágenes - `rename_image.php` - Renombrar imágenes - `upload_editor_image.php` - Subir desde el editor de mensajes ### 4.2 Uso en Mensajes Las imágenes se insertan en el editor HTML (Summernote): - Modal de galería en `create_message.php` y `recurrentes.php` - Las URLs se almacenan relativas: `galeria/nombre.jpg` - Al enviar, se convierten a URLs absolutas --- ## 5. Conversores de Formato El sistema necesita convertir HTML a los formatos de cada plataforma: ### 5.1 Discord (`discord/converters/HtmlToDiscordMarkdownConverter.php`) - Convierte etiquetas HTML a Markdown de Discord - Maneja imágenes, negritas, énfasis, etc. ### 5.2 Telegram (`telegram/converters/HtmlToTelegramHtmlConverter.php`) - Convierte HTML a formato HTML de Telegram - Soporta parse_mode=HTML ### 5.3 Factory (`common/helpers/converter_factory.php`) - Patrón Factory para obtener el conversor correcto según plataforma --- ## 6. Remitentes (Senders) ### 6.1 DiscordSender (`discord/DiscordSender.php`) - Envía mensajes via API REST de Discord - Divide mensajes largos (límite 2000 caracteres) - Maneja imágenes como adjuntos o embeds - Envía botones interactivos ### 6.2 TelegramSender (`telegram/TelegramSender.php`) - Envía mensajes via API de Telegram Bot - Maneja múltiples partes (texto + imágenes) - Soporta botones inline - Reply markup --- ## 7. Autenticación y Sesiones ### 7.1 Sistema de Login (`login.php` + `includes/auth.php`) - Autenticación con username/password - Hash de contraseñas con `password_hash()` - Sesiones PHP con verificación de rol ### 7.2 Verificación de Sesión (`includes/session_check.php`) - Se incluye en todas las páginas protegidas - Verifica `$_SESSION['user_id']` y `$_SESSION['role']` - Redirige a login si no hay sesión ### 7.3 Perfil de Usuario (`profile.php`) - Permite cambiar contraseña - Información de cuenta --- ## 8. Utilidades y Helpers ### 8.1 Helpers Principales | Archivo | Función | |---------|---------| | `includes/url_helper.php` | Funciones de URL (site_url, asset, url) | | `includes/logger.php` | Función `custom_log()` para logs | | `includes/activity_logger.php` | Registro de actividades de usuarios | | `includes/emojis.php` | Utilidades de emojis | | `includes/schedule_helpers.php` | Cálculo de próximas fechas de envío | | `includes/error_handler.php` | Manejo de errores | ### 8.2 Rutas de Archivos Comunes ``` includes/ ├── session_check.php → Verifica sesión en cada página ├── db.php → Conexión PDO a MySQL ├── auth.php → Funciones de autenticación ├── logger.php → custom_log() ├── activity_logger.php → log_activity() ├── message_handler.php → Procesa create/edit de mensajes ├── schedule_actions.php → Disable/enable/cancel/delete mensajes ├── recurrent_message_handler.php → CRUD plantillas └── get_gallery.php → Obtiene imágenes de galeria/ common/helpers/ ├── sender_factory.php → Factory para obtener sender correcto ├── converter_factory.php → Factory para obtener conversor ├── schedule_helpers.php → calculateNextSendTime() ├── url_helper.php → Funciones de URL └── emojis.php → Utilidades de emojis ``` --- ## 9. Workers y Procesos en Background ### 9.1 process_queue.php Procesa mensajes programados cada minuto (cron): - Busca schedules con status='pending' y send_time <= ahora - Marca como 'processing' - Envía mensaje - Registra en sent_messages - Si es recurrente, calcula próximo envío ### 9.2 process_translation_queue.php Worker de traducción asíncrono: - Corre como proceso daemon - Procesa translation_queue - Envía traducciones a Discord/Telegram ### 9.3 discord_bot.php Bot de Discord en tiempo real: - Corre como proceso largo (php discord_bot.php) - Escucha eventos via WebSocket - No usa cron, responde inmediatamente ### 9.4 run_manual_translation.php Script CLI para traducciones manuales: - Uso: `php run_manual_translation.php ` - Traduce plantillas bajo demanda --- ## 10. Configuración de Webhooks ### 10.1 Telegram Webhook - **Archivo:** `telegram_bot_webhook.php` o `telegram/webhook/telegram_bot_webhook.php` - **URL:** `https://tu-dominio.com/telegram_bot_webhook.php?auth_token=TOKEN` - **Set webhook:** `set_webhook.php` ### 10.2 Endpoints de Configuración | Archivo | Función | |---------|---------| | `set_webhook.php` | Configura webhook de Telegram | | `configure_webhook.php` | UI para configurar webhooks | | `check_webhook.php` | Verifica estado del webhook | --- ## 11. Páginas de Administración Adicionales ### 11.1 Actividades (`admin/activity.php`) Muestra el log de actividades de la tabla `activity_log`: - Inicios/cierres de sesión - Creación/eliminación de mensajes - Actualizaciones de usuarios - Eliminación de imágenes ### 11.2 Test de Conexión (`admin/test_discord_connection.php`) Permite probar la conexión con Discord: - Verifica token del bot - Prueba envío de mensaje de prueba ### 11.3 Comandos (`admin/comandos.php`) Lista los comandos disponibles en el sistema. ### 11.4 Opciones de Traducción Discord (`discord/admin/discord_translation_options.php`) Configuración específica de traducción para Discord. --- ## 12. Utilidades Varias ### 12.1 Cambio de Idioma (`change_language.php`) Permite cambiar el idioma de la interfaz de la aplicación. ### 12.2 Log Frontend (`log_frontend.php`) Muestra los logs de JavaScript del lado del cliente. ### 12.3 Verificador de Contraseña (`verify_password.php`) API para verificar contraseñas (probablemente usado en algún proceso de autenticación externo). ### 12.4 Verificador Directo (`direct_check.php`) Verificación directa de algún estado del sistema. ### 12.5 Limpiar OPCache (`clear_opcache.php`) Utilidad para limpiar el OPCache de PHP. ### 12.6 Reset de Estado (`reset_status.php`) Reinicia estados de mensajes (útil para debugging). --- ## 13. Variables de Entorno Completas ```env # Aplicación APP_ENVIRONMENT=pruebas # o 'reod' APP_URL=https://bot.tudominio.com # Base de datos DB_HOST=10.10.4.17 DB_PORT=3390 DB_NAME=bot DB_USER=root DB_PASS=*** DB_DIALECT=mysql # Discord DISCORD_BOT_TOKEN=*** DISCORD_GUILD_ID=*** DISCORD_CLIENT_ID=*** DISCORD_CLIENT_SECRET=*** # Telegram TELEGRAM_BOT_TOKEN=*** TELEGRAM_WEBHOOK_TOKEN=*** # LibreTranslate LIBRETRANSLATE_URL=http://libretranslate:5000 # n8n (Automatización) N8N_URL=https://n8n.tudominio.com N8N_TOKEN=*** N8N_IA_WEBHOOK_URL=*** N8N_IA_WEBHOOK_URL_DISCORD=*** N8N_PROCESS_QUEUE_WEBHOOK_URL=*** # Seguridad JWT_SECRET=*** INTERNAL_API_KEY=*** # Docker DOCKER_CONTAINER=1 ``` --- ## 14. Estructura de la Base de Datos (Tablas Completas) ```sql -- Tablas principales users -- Usuarios del sistema recipients -- Canales/usuarios de Discord/Telegram messages -- Contenido de mensajes schedules -- Programaciones de envío recurrent_messages -- Plantillas de mensajes sent_messages -- Registro de mensajes enviados activity_log -- Log de actividades -- Configuración settings -- Configuraciones generales supported_languages -- Idiomas para traducción telegram_bot_messages -- Mensaje de bienvenida Telegram telegram_bot_interactions -- Interacciones de usuarios Telegram telegram_welcome_messages -- Mensajes de bienvenida por grupo command_locks -- Bloqueos de comandos (evitar duplicados) -- Traducción translation_queue -- Cola de traducciones languages -- Tabla legacy de idiomas ``` --- ## 15. Flujo Completo: Desde la Creación hasta el Envío ``` 1. USUARIO CREA MENSAJE create_message.php └─> Editor HTML (Summernote) └─> Selecciona plataforma, destinatario, programación 2. PROCESAMIENTO includes/message_handler.php └─> Valida datos └─> Inserta en tabla 'messages' └─> Inserta en tabla 'schedules' └─> Si 'enviar ahora' → ejecuta process_queue.php 3. COLA DE PROCESAMIENTO (cron cada minuto) process_queue.php └─> Busca schedules pending con send_time <= ahora └─> Marca como 'processing' └─> Convierte HTML → Formato plataforma └─> Envía vía DiscordSender o TelegramSender └─> Registra en 'sent_messages' └─> Si recurrente → calcula próximo envío └─> Marca 'sent' o 'failed' 4. TRADUCCIÓN (opcional) a) Automática: Se encola en translation_queue └─> process_translation_queue.php b) Manual: Botones en mensaje enviado └─> Usuario hace clic → traduce solo ese idioma 5. RESULTADO └─> Usuario puede ver en: - scheduled_messages.php (pendientes) - sent_messages.php (enviados) ``` --- ## 16. Resumen de Rutas del Menú ``` ├── INICIO (index.php) │ └── Dashboard con mensajes programados │ ├── MENSAJES │ ├── Crear Mensaje (create_message.php) │ ├── Programados (scheduled_messages.php) │ ├── Plantillas (recurrentes.php) │ └── Enviados (sent_messages.php) │ ├── GALERÍA (gallery.php) │ ├── ADMIN (solo admins) │ ├── Usuarios (admin/users.php) │ ├── Destinatarios (admin/recipients.php) │ ├── Idiomas (admin/languages.php) │ ├── Comandos (admin/comandos.php) │ ├── Telegram Config (telegram/admin/telegram_welcome.php) │ ├── Interacciones Bot (telegram/admin/telegram_bot_interactions.php) │ ├── Chat Telegram (telegram/admin/chat_telegram.php) │ ├── Actividad (admin/activity.php) │ └── Test (admin/test_discord_connection.php) │ ├── PERFIL (profile.php) └── CERRAR SESIÓN (logout.php) ``` --- Este complemento junto con el documento principal `DOCUMENTACION_SISTEMA.md` proporcionan una visión completa del sistema.