Initial commit - Last War messaging system
This commit is contained in:
469
DOCUMENTACION_COMPLEMENTO.md
Executable file
469
DOCUMENTACION_COMPLEMENTO.md
Executable file
@@ -0,0 +1,469 @@
|
||||
# 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 <msgId> <targetLang> <userId> <channelId>`
|
||||
- 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.
|
||||
Reference in New Issue
Block a user