# 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.
