Compare commits
6 Commits
4c48c279de
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 7953a56501 | |||
| bc77082c20 | |||
| 26414094d4 | |||
| 7af0e95e0b | |||
| d1ec6bed5c | |||
| 3f0727984a |
49
.env.reod
49
.env.reod
@@ -1,49 +0,0 @@
|
|||||||
# Configuración de la aplicación
|
|
||||||
APP_ENV=production
|
|
||||||
APP_DEBUG=false
|
|
||||||
APP_URL=https://reod-dragon.ddns.net
|
|
||||||
|
|
||||||
# Configuración de la base de datos
|
|
||||||
DB_HOST=10.10.4.17
|
|
||||||
DB_PORT=3390
|
|
||||||
DB_NAME=bot
|
|
||||||
DB_USER=nickpons666
|
|
||||||
DB_PASS=MiPo6425@@
|
|
||||||
DB_DIALECT=mysql
|
|
||||||
|
|
||||||
# Configuración de JWT
|
|
||||||
JWT_SECRET=19c5020fa8207d2c3b9e82f430784667e001f1eb733848922f7bcb9be98f93c2
|
|
||||||
JWT_ALGORITHM=HS256
|
|
||||||
JWT_EXPIRATION=3600
|
|
||||||
|
|
||||||
# Configuración de Discord
|
|
||||||
DISCORD_GUILD_ID=1338327171013541999
|
|
||||||
DISCORD_CLIENT_ID=1385790344594985061
|
|
||||||
DISCORD_CLIENT_SECRET=hK9SNiYdenHQVxakt8Mx3RoMkZ5oOJvk
|
|
||||||
DISCORD_BOT_TOKEN=MTM4NTc5MDM0NDU5NDk4NTA2MQ.GvobiS.TRQM9dX7vDjmuGVa3Ckp6YRtGEWxdW0gBDbvCI
|
|
||||||
|
|
||||||
# Configuración de Telegram
|
|
||||||
TELEGRAM_BOT_TOKEN=8469229183:AAEVIV5e7rjDXKNgFTX0dnCW6JWB88X4p2I
|
|
||||||
TELEGRAM_WEBHOOK_TOKEN=webhook_secure_token_12345
|
|
||||||
TEST_ENV_LOAD=caos_cargado
|
|
||||||
|
|
||||||
LIBRETRANSLATE_URL=http://10.10.4.17:5000
|
|
||||||
|
|
||||||
N8N_URL=https://n8n-dragon.ddns.net
|
|
||||||
N8N_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI4MWY4YjU3YS0wMTg2LTQ1NTctOWZlMC1jYWUxNjZlYzZlMTkiLCJpc3MiOiJuOG4iLCJhdWQiOiJwdWJsaWMtYXBpIiwiaWF0IjoxNzU1OTMwODM5fQ.2tLbddyhMTKplp9n-qVNiAgQCUj2YEvVASwLnNjgCt0
|
|
||||||
|
|
||||||
# -----------------------------------------
|
|
||||||
# --- Configuración para la migración a n8n ---
|
|
||||||
# -----------------------------------------
|
|
||||||
# URL base de esta aplicación, para que n8n pueda llamarla.
|
|
||||||
APP_BASE_URL=https://reod-dragon.ddns.net
|
|
||||||
|
|
||||||
# Clave secreta para la comunicación segura entre n8n y api_handler.php.
|
|
||||||
# DEBE SER UNA CADENA LARGA Y ALEATORIA. Genera una con: openssl rand -hex 32
|
|
||||||
INTERNAL_API_KEY="b5dda33b8eb062e06e100c98a8947c0248b6e38973dfd689e81f725af238d23c"
|
|
||||||
|
|
||||||
# URL completa del webhook de n8n que procesa la cola de mensajes (process_queue_workflow).
|
|
||||||
# La obtienes del nodo Webhook en tu flujo de n8n.
|
|
||||||
N8N_PROCESS_QUEUE_WEBHOOK_URL="https://n8n-dragon.ddns.net/webhook/telegram-unified"
|
|
||||||
N8N_IA_WEBHOOK_URL="https://n8n-dragon.ddns.net/webhook/ia"
|
|
||||||
N8N_IA_WEBHOOK_URL_DISCORD="https://n8n-dragon.ddns.net/webhook/42e803ae-8aee-4b1c-858a-6c6d3fbb6230"
|
|
||||||
1
.gitignore
vendored
Executable file
1
.gitignore
vendored
Executable file
@@ -0,0 +1 @@
|
|||||||
|
/logs/
|
||||||
@@ -18,6 +18,7 @@ Options -Indexes +FollowSymLinks -MultiViews
|
|||||||
# Excluir archivos específicos de la verificación de sesión
|
# Excluir archivos específicos de la verificación de sesión
|
||||||
RewriteCond %{REQUEST_URI} !^/login\.php [NC]
|
RewriteCond %{REQUEST_URI} !^/login\.php [NC]
|
||||||
RewriteCond %{REQUEST_URI} !^/assets/ [NC]
|
RewriteCond %{REQUEST_URI} !^/assets/ [NC]
|
||||||
|
RewriteCond %{REQUEST_URI} !^/galeria/ [NC]
|
||||||
RewriteCond %{REQUEST_URI} !^/translate_proxy\.php [NC]
|
RewriteCond %{REQUEST_URI} !^/translate_proxy\.php [NC]
|
||||||
RewriteCond %{REQUEST_URI} !\.(css|js|jpe?g|png|gif|ico|svg|woff2?|ttf|eot|json|txt|map)$ [NC]
|
RewriteCond %{REQUEST_URI} !\.(css|js|jpe?g|png|gif|ico|svg|woff2?|ttf|eot|json|txt|map)$ [NC]
|
||||||
|
|
||||||
|
|||||||
0
logs/translation-worker-pool.out.log → 0.0
Executable file → Normal file
0
logs/translation-worker-pool.out.log → 0.0
Executable file → Normal file
@@ -33,7 +33,7 @@ try {
|
|||||||
throw new Exception("La variable de entorno LIBRETRANSLATE_URL no está configurada en tu archivo .env");
|
throw new Exception("La variable de entorno LIBRETRANSLATE_URL no está configurada en tu archivo .env");
|
||||||
}
|
}
|
||||||
|
|
||||||
$translator = new Translate();
|
$translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
$libreLanguages = $translator->getSupportedLanguages();
|
$libreLanguages = $translator->getSupportedLanguages();
|
||||||
|
|
||||||
if ($libreLanguages === null) {
|
if ($libreLanguages === null) {
|
||||||
|
|||||||
158
analisis_archivos_comunes.txt
Normal file
158
analisis_archivos_comunes.txt
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
ANÁLISIS DE ARCHIVOS COMUNES - BOT DE DISCORD Y TELEGRAM
|
||||||
|
========================================================
|
||||||
|
|
||||||
|
Fecha de análisis: 8 de febrero de 2026
|
||||||
|
|
||||||
|
## 1. ARCHIVOS UTILIZADOS POR AMBOS BOTS (DISCORD Y TELEGRAM)
|
||||||
|
|
||||||
|
### Configuración y Base de Datos:
|
||||||
|
├── config/config.php - Configuración central (tokens, DB, URLs)
|
||||||
|
├── includes/db.php - Conexión a base de datos compartida
|
||||||
|
├── includes/logger.php - Sistema de logging personalizado
|
||||||
|
├── includes/session_check.php - Validación de sesiones y CSRF
|
||||||
|
├── includes/activity_logger.php - Registro de actividad de usuarios
|
||||||
|
└── includes/auth.php - Funciones de autenticación
|
||||||
|
|
||||||
|
### Sistema de Traducción:
|
||||||
|
├── includes/Translate.php - Clase de LibreTranslate
|
||||||
|
├── src/Translate.php - Clase principal de traducción
|
||||||
|
├── translate_message.php - Endpoint de procesamiento de traducciones
|
||||||
|
├── process_translation_queue.php - Worker de traducción en background
|
||||||
|
├── src/TranslationWorker.php - Worker individual de traducción
|
||||||
|
├── src/TranslationCache.php - Sistema de caché de traducciones
|
||||||
|
└── src/TranslationWorkerPool.php - Pool de workers de traducción
|
||||||
|
|
||||||
|
### Helpers y Utilidades Compartidas:
|
||||||
|
├── common/helpers/schedule_helpers.php - Funciones de programación recurrente
|
||||||
|
├── common/helpers/sender_factory.php - Factory para crear senders específicos
|
||||||
|
├── common/helpers/converter_factory.php - Factory para conversores HTML
|
||||||
|
├── common/helpers/url_helper.php - Utilidades de URLs y seguridad
|
||||||
|
├── common/helpers/emojis.php - Manejo de emojis
|
||||||
|
├── includes/schedule_helpers.php - Helper alternativo de programación
|
||||||
|
├── includes/translation_helper.php - Helper de traducción frontend
|
||||||
|
├── includes/message_handler.php - Manejador central de mensajes
|
||||||
|
├── includes/error_handler.php - Manejo centralizado de errores
|
||||||
|
└── includes/tren_handler.php - Handler específico de trenes
|
||||||
|
|
||||||
|
### Templates y Componentes UI:
|
||||||
|
├── templates/header.php - Cabecera HTML común
|
||||||
|
├── templates/footer.php - Footer HTML común
|
||||||
|
├── templates/admin/ - Templates de administración compartidos
|
||||||
|
|
||||||
|
### Procesamiento y Colas:
|
||||||
|
├── process_queue.php - Procesador principal de colas de mensajes
|
||||||
|
├── includes/message_handler.php - Manejo de creación/actualización de mensajes
|
||||||
|
└── includes/scheduled_messages_table_body.php - Componente de tabla compartido
|
||||||
|
|
||||||
|
## 2. ARCHIVOS COMUNES PARA ENVÍO DE MENSAJES DESDE create_message.php
|
||||||
|
|
||||||
|
### Flujo Principal de Envío:
|
||||||
|
1. create_message.php (formulario) →
|
||||||
|
2. includes/message_handler.php (procesamiento) →
|
||||||
|
3. process_queue.php (ejecución) →
|
||||||
|
4. [DiscordSender|TelegramSender] (envío específico)
|
||||||
|
|
||||||
|
### Archivos Involucrados en el Envío:
|
||||||
|
|
||||||
|
#### create_message.php:
|
||||||
|
├── Incluye: session_check.php, db.php
|
||||||
|
├── Template: templates/header.php, footer.php
|
||||||
|
├── Acción: POST a includes/message_handler.php
|
||||||
|
└── JavaScript: Manejo de Summernote, validación, selección de destinatarios
|
||||||
|
|
||||||
|
#### includes/message_handler.php:
|
||||||
|
├── Incluye: session_check.php, db.php, activity_logger.php, schedule_helpers.php
|
||||||
|
├── Procesa: Creación/actualización de mensajes en DB
|
||||||
|
├── Programa: Envíos inmediatos, diferidos, recurrentes
|
||||||
|
├── Dispara: process_queue.php para envíos inmediatos
|
||||||
|
└── Registra: Actividad en activity_log
|
||||||
|
|
||||||
|
#### process_queue.php:
|
||||||
|
├── Incluye: db.php, SenderFactory, ConverterFactory
|
||||||
|
├── Consulta: Mensajes pendientes en schedules
|
||||||
|
├── Crea: Sender apropiado via SenderFactory
|
||||||
|
├── Convierte: HTML via ConverterFactory
|
||||||
|
└── Ejecuta: Envío through platform-specific sender
|
||||||
|
|
||||||
|
#### Senders Específicos:
|
||||||
|
├── discord/DiscordSender.php - Envío a Discord API
|
||||||
|
├── src/DiscordSender.php - Versión alternativa Discord
|
||||||
|
├── src/TelegramSender.php - Envío a Telegram Bot API
|
||||||
|
└── telegram/TelegramSender.php - Versión alternativa Telegram
|
||||||
|
|
||||||
|
#### Conversores de Contenido:
|
||||||
|
├── discord/converters/HtmlToDiscordMarkdownConverter.php
|
||||||
|
├── src/HtmlToDiscordMarkdownConverter.php
|
||||||
|
└── src/HtmlToTelegramHtmlConverter.php
|
||||||
|
|
||||||
|
#### Tablas de Base de Datos Compartidas:
|
||||||
|
├── recipients - Destinatarios (con campo 'platform' para distinguir)
|
||||||
|
├── messages - Contenido de mensajes (compartido)
|
||||||
|
├── schedules - Programación de envíos (compartido)
|
||||||
|
├── sent_messages - Registro de mensajes enviados
|
||||||
|
├── translation_queue - Cola de traducciones
|
||||||
|
├── recurrent_messages - Plantillas de mensajes recurrentes
|
||||||
|
└── supported_languages - Configuración de idiomas
|
||||||
|
|
||||||
|
## 3. ARQUITECTURA DE COMPONENTES COMPARTIDOS
|
||||||
|
|
||||||
|
### Patrón Factory:
|
||||||
|
```php
|
||||||
|
// Creación de sender específico
|
||||||
|
$sender = SenderFactory::create($platform, $pdo);
|
||||||
|
$converter = ConverterFactory::create($platform);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flujo de Datos Compartido:
|
||||||
|
1. Usuario selecciona plataforma en create_message.php
|
||||||
|
2. message_handler.php guarda en DB con plataforma indicada
|
||||||
|
3. process_queue.php lee plataforma de DB
|
||||||
|
4. SenderFactory crea sender apropiado
|
||||||
|
5. ConverterFactory crea conversor apropiado
|
||||||
|
6. Se envía mensaje a plataforma específica
|
||||||
|
|
||||||
|
### Configuración Compartida:
|
||||||
|
├── Database: Misma conexión para ambas plataformas
|
||||||
|
├── Translation: Mismo servicio de traducción
|
||||||
|
├── Templates: Mismo sistema de plantillas recurrentes
|
||||||
|
├── Gallery: Misma galería de imágenes
|
||||||
|
├── Scheduling: Mismo sistema de programación
|
||||||
|
└── Activity: Mismo sistema de registro de actividad
|
||||||
|
|
||||||
|
## 4. DIFERENCIACIÓN POR PLATAFORMA
|
||||||
|
|
||||||
|
### En Base de Datos:
|
||||||
|
├── Campo 'platform' en tabla recipients ('discord' | 'telegram')
|
||||||
|
├── Platform-specific tokens en config.php
|
||||||
|
├── IDs de plataforma en platform_id
|
||||||
|
└── Chat modes específicos por plataforma
|
||||||
|
|
||||||
|
### En Código:
|
||||||
|
├── Directorios separados: /discord/ y /telegram/
|
||||||
|
├── Senders específicos por plataforma
|
||||||
|
├── Conversores específicos por formato
|
||||||
|
├── Webhooks específicos por plataforma
|
||||||
|
└── Commands específicos por plataforma
|
||||||
|
|
||||||
|
## 5. BENEFICIOS DE ESTA ARQUITECTURA
|
||||||
|
|
||||||
|
✅ Reutilización máxima de código entre plataformas
|
||||||
|
✅ Mantenimiento centralizado de lógica común
|
||||||
|
✅ Base de datos unificada para reporting
|
||||||
|
✅ Sistema de traducción compartido
|
||||||
|
✅ Interfaz web unificada para administración
|
||||||
|
✅ Sistema de programación compartido
|
||||||
|
✅ Logging centralizado
|
||||||
|
✅ Sistema de plantillas compartido
|
||||||
|
|
||||||
|
## 6. PATRONES DE DISEÑO IMPLEMENTADOS
|
||||||
|
|
||||||
|
🏗️ Factory Pattern - Para senders y converters
|
||||||
|
🏗️ Strategy Pattern - Para manejo de plataformas
|
||||||
|
🏗️ Singleton Pattern - Para conexión DB
|
||||||
|
🏗️ Observer Pattern - Para logging
|
||||||
|
🏗️ Template Method - Para flujo de envío
|
||||||
|
|
||||||
|
Esta arquitectura permite añadir nuevas plataformas fácilmente mediante la creación
|
||||||
|
de nuevos senders y converters, mientras se mantiene toda la lógica de negocio
|
||||||
|
compartida entre ambas plataformas actuales.
|
||||||
@@ -420,3 +420,22 @@ html[data-bs-theme="dark"] td:nth-child(3) span {
|
|||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
white-space: nowrap; /* Evita que el texto se rompa en varias líneas */
|
white-space: nowrap; /* Evita que el texto se rompa en varias líneas */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Preview modal styles */
|
||||||
|
#previewModalBody img {
|
||||||
|
max-width: 100% !important;
|
||||||
|
height: auto !important;
|
||||||
|
border-radius: 8px !important;
|
||||||
|
margin: 10px 0 !important;
|
||||||
|
box-shadow: 0 4px 8px rgba(0,0,0,0.1) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-bs-theme="dark"] #previewModalBody img {
|
||||||
|
box-shadow: 0 4px 8px rgba(0,0,0,0.5) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure modal content is scrollable if needed */
|
||||||
|
#previewModalBody {
|
||||||
|
max-height: 70vh;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
0
attachments
Normal file
0
attachments
Normal file
10
clear_opcache.php
Executable file
10
clear_opcache.php
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
// Clear PHP opcache if enabled
|
||||||
|
if (function_exists('opcache_reset')) {
|
||||||
|
opcache_reset();
|
||||||
|
echo "PHP opcache cleared.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear file cache
|
||||||
|
clearstatcache();
|
||||||
|
echo "File stat cache cleared.\n";
|
||||||
@@ -7,22 +7,12 @@ require_once __DIR__ . '/../vendor/autoload.php';
|
|||||||
// Verificar si estamos en un contenedor Docker
|
// Verificar si estamos en un contenedor Docker
|
||||||
$is_docker = (getenv('DOCKER_CONTAINER') === '1') || ($_SERVER['DOCKER_CONTAINER'] ?? null) === '1';
|
$is_docker = (getenv('DOCKER_CONTAINER') === '1') || ($_SERVER['DOCKER_CONTAINER'] ?? null) === '1';
|
||||||
|
|
||||||
if ($is_docker) {
|
// Entorno: cargar archivo .env según APP_ENVIRONMENT
|
||||||
// Docker: cargar archivo .env creado por el entrypoint
|
|
||||||
$dotenv = null;
|
|
||||||
if (file_exists(dirname(__DIR__) . '/.env')) {
|
|
||||||
$dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));
|
|
||||||
try {
|
|
||||||
$dotenv->load();
|
|
||||||
} catch (Exception $e) {
|
|
||||||
die('Error al cargar el archivo de entorno en Docker: ' . $e->getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Entorno local: cargar archivo .env según APP_ENVIRONMENT
|
|
||||||
$env = getenv('APP_ENVIRONMENT') ?: ($_SERVER['APP_ENVIRONMENT'] ?? 'pruebas');
|
$env = getenv('APP_ENVIRONMENT') ?: ($_SERVER['APP_ENVIRONMENT'] ?? 'pruebas');
|
||||||
|
|
||||||
|
if ($env === 'reod') {
|
||||||
$envFile = '.env';
|
$envFile = '.env';
|
||||||
if ($env) {
|
} else {
|
||||||
$envFile = '.env.' . $env;
|
$envFile = '.env.' . $env;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,12 +29,14 @@ if ($is_docker) {
|
|||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
die('Error al cargar el archivo de entorno: ' . $e->getMessage());
|
die('Error al cargar el archivo de entorno: ' . $e->getMessage());
|
||||||
}
|
}
|
||||||
|
// ... el resto de la configuración ...
|
||||||
|
// Aquí es donde definimos las variables obligatorias
|
||||||
$dotenv->required([
|
$dotenv->required([
|
||||||
'DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PASS',
|
'DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PASS',
|
||||||
'JWT_SECRET', 'APP_URL'
|
'JWT_SECRET', 'APP_URL'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Environment Configuration
|
// Environment Configuration
|
||||||
define('ENVIRONMENT', $_ENV['APP_ENV'] ?? $_SERVER['APP_ENV'] ?? 'production');
|
define('ENVIRONMENT', $_ENV['APP_ENV'] ?? $_SERVER['APP_ENV'] ?? 'production');
|
||||||
@@ -54,7 +46,9 @@ $is_cli = (php_sapi_name() === 'cli' || defined('STDIN'));
|
|||||||
|
|
||||||
// Helper function to get env vars
|
// Helper function to get env vars
|
||||||
function getEnvVar($name, $default = null) {
|
function getEnvVar($name, $default = null) {
|
||||||
return $_ENV[$name] ?? $_SERVER[$name] ?? getenv($name) ?? $default;
|
// Priorizamos getenv() para las variables cargadas por Dotenv,
|
||||||
|
// ya que sabemos que funciona y $_ENV puede estar corrupto o contener Array en algunos entornos Docker.
|
||||||
|
return getenv($name) ?: ($_ENV[$name] ?? $_SERVER[$name] ?? $default);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configurar la URL base y el protocolo
|
// Configurar la URL base y el protocolo
|
||||||
@@ -73,7 +67,7 @@ if ($is_cli) {
|
|||||||
}
|
}
|
||||||
$app_url = getEnvVar('APP_URL');
|
$app_url = getEnvVar('APP_URL');
|
||||||
if ($app_url) {
|
if ($app_url) {
|
||||||
define('BOT_BASE_URL', $app_url);
|
define('BOT_BASE_URL', trim($app_url, ' "\''));
|
||||||
} else {
|
} else {
|
||||||
define('BOT_BASE_URL', $protocol . '://' . $_SERVER['HTTP_HOST']);
|
define('BOT_BASE_URL', $protocol . '://' . $_SERVER['HTTP_HOST']);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -304,7 +304,7 @@ require_once __DIR__ . '/templates/header.php';
|
|||||||
} else {
|
} else {
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
if (is_file($gallery_path . '/' . $file)) {
|
if (is_file($gallery_path . '/' . $file)) {
|
||||||
echo '<div class="col-lg-3 col-md-4 col-sm-6 mb-4 text-center"><img src="galeria/' . htmlspecialchars($file) . '" class="img-fluid img-thumbnail gallery-item" style="cursor:pointer;" alt="' . htmlspecialchars($file) . '"><p class="small text-muted mt-1">' . htmlspecialchars($file) . '</p></div>';
|
echo '<div class="col-lg-3 col-md-4 col-sm-6 mb-4 text-center"><img src="' . site_url('galeria/' . $file) . '" class="img-fluid img-thumbnail gallery-item" style="cursor:pointer;" alt="' . htmlspecialchars($file) . '"><p class="small text-muted mt-1">' . htmlspecialchars($file) . '</p></div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
47
direct_check.php
Executable file
47
direct_check.php
Executable file
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
|
||||||
|
require_once __DIR__ . '/includes/db.php';
|
||||||
|
|
||||||
|
echo "=== VERIFICACIÓN DIRECTA DE LA BASE DE DATOS ===\n\n";
|
||||||
|
|
||||||
|
// Check recurrent_messages
|
||||||
|
echo "--- Tabla: recurrent_messages ---\n";
|
||||||
|
$stmt = $pdo->query("SELECT id, message_content FROM recurrent_messages WHERE message_content LIKE '%galeria%'");
|
||||||
|
$count = 0;
|
||||||
|
while ($row = $stmt->fetch()) {
|
||||||
|
if (!$row['message_content']) continue;
|
||||||
|
|
||||||
|
// Count img tags
|
||||||
|
preg_match_all('/<img/', $row['message_content'], $img_matches);
|
||||||
|
$img_count = count($img_matches[0]);
|
||||||
|
|
||||||
|
if ($img_count > 0) {
|
||||||
|
$count++;
|
||||||
|
echo "ID {$row['id']}: $img_count imágenes\n";
|
||||||
|
|
||||||
|
// Extract and show ALL src attributes
|
||||||
|
preg_match_all('/src="[^"]*"/', $row['message_content'], $src_matches);
|
||||||
|
foreach ($src_matches[0] as $src) {
|
||||||
|
echo " -> $src\n";
|
||||||
|
}
|
||||||
|
if (count($src_matches[0]) === 0) {
|
||||||
|
echo " -> (no src found, raw content preview: " . substr($row['message_content'], 0, 300) . ")\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "\nTotal con imágenes: $count\n\n";
|
||||||
|
|
||||||
|
// Also check messages table
|
||||||
|
echo "--- Tabla: messages ---\n";
|
||||||
|
$stmt = $pdo->query("SELECT id, content FROM messages WHERE content LIKE '%galeria%' LIMIT 5");
|
||||||
|
while ($row = $stmt->fetch()) {
|
||||||
|
if (!$row['content']) continue;
|
||||||
|
|
||||||
|
preg_match_all('/src="[^"]*"/', $row['content'], $src_matches);
|
||||||
|
if (count($src_matches[0]) > 0) {
|
||||||
|
echo "ID {$row['id']}: " . implode(' | ', array_slice($src_matches[0], 0, 3)) . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
519
discord_bot.php
519
discord_bot.php
@@ -8,7 +8,7 @@ require_once __DIR__ . '/includes/db.php';
|
|||||||
require_once __DIR__ . '/includes/logger.php';
|
require_once __DIR__ . '/includes/logger.php';
|
||||||
require_once __DIR__ . '/discord/DiscordSender.php';
|
require_once __DIR__ . '/discord/DiscordSender.php';
|
||||||
require_once __DIR__ . '/discord/converters/HtmlToDiscordMarkdownConverter.php';
|
require_once __DIR__ . '/discord/converters/HtmlToDiscordMarkdownConverter.php';
|
||||||
require_once __DIR__ . '/includes/Translate.php';
|
require_once __DIR__ . '/src/Translate.php';
|
||||||
|
|
||||||
// Importar clases necesarias
|
// Importar clases necesarias
|
||||||
use Discord\Discord;
|
use Discord\Discord;
|
||||||
@@ -38,10 +38,21 @@ if (!defined('DISCORD_BOT_TOKEN') || empty(DISCORD_BOT_TOKEN)) {
|
|||||||
try {
|
try {
|
||||||
$discord = new Discord([
|
$discord = new Discord([
|
||||||
'token' => DISCORD_BOT_TOKEN,
|
'token' => DISCORD_BOT_TOKEN,
|
||||||
'intents' => Intents::GUILDS | Intents::GUILD_MESSAGES | Intents::DIRECT_MESSAGES | Intents::GUILD_MEMBERS | Intents::GUILD_MESSAGE_REACTIONS,
|
<<<<<<< HEAD
|
||||||
|
'intents' => Intents::GUILDS | Intents::GUILD_MESSAGES | Intents::DIRECT_MESSAGES | Intents::GUILD_MEMBERS | Intents::GUILD_MESSAGE_REACTIONS | Intents::MESSAGE_CONTENT,
|
||||||
'logger' => $logger
|
'logger' => $logger
|
||||||
|
=======
|
||||||
|
'intents' => Intents::GUILDS | Intents::GUILD_MESSAGES | Intents::DIRECT_MESSAGES | Intents::GUILD_MEMBERS | Intents::GUILD_MESSAGE_REACTIONS,
|
||||||
|
'logger' => $logger,
|
||||||
|
'loop' => \React\EventLoop\Loop::get(),
|
||||||
|
'socket_options' => [
|
||||||
|
'heartbeat_interval' => 30, // Enviar heartbeat cada 30 segundos
|
||||||
|
'reconnect_timeout' => 60, // Timeout para reconexión
|
||||||
|
]
|
||||||
|
>>>>>>> 26414094d4262e5ab092028955a4f0de57092f43
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Manejar eventos de conexión y desconexión
|
||||||
$discord->on('ready', function (Discord $discord) {
|
$discord->on('ready', function (Discord $discord) {
|
||||||
$discord->getLogger()->info("==================================================");
|
$discord->getLogger()->info("==================================================");
|
||||||
$discord->getLogger()->info("Bot conectado y listo para escuchar!");
|
$discord->getLogger()->info("Bot conectado y listo para escuchar!");
|
||||||
@@ -49,6 +60,21 @@ try {
|
|||||||
$discord->getLogger()->info("==================================================");
|
$discord->getLogger()->info("==================================================");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Evento de reconexión
|
||||||
|
$discord->on('reconnected', function (Discord $discord) {
|
||||||
|
$logger->info("[RECONEXIÓN] Bot reconectado exitosamente");
|
||||||
|
});
|
||||||
|
|
||||||
|
// Evento de desconexión
|
||||||
|
$discord->on('disconnected', function (Discord $discord, $reason) {
|
||||||
|
$logger->warning("[DESCONEXIÓN] Bot desconectado. Razón: $reason");
|
||||||
|
});
|
||||||
|
|
||||||
|
// Evento de error
|
||||||
|
$discord->on('error', function ($error, Discord $discord) {
|
||||||
|
$logger->error("[ERROR DISCORD] Error en la conexión: " . $error->getMessage());
|
||||||
|
});
|
||||||
|
|
||||||
// Evento para nuevos miembros en el servidor
|
// Evento para nuevos miembros en el servidor
|
||||||
$discord->on(Event::GUILD_MEMBER_ADD, function (Member $member, Discord $discord) use ($pdo, $logger) {
|
$discord->on(Event::GUILD_MEMBER_ADD, function (Member $member, Discord $discord) use ($pdo, $logger) {
|
||||||
$logger->info("[NUEVO MIEMBRO] Usuario {$member->user->username} ({$member->id}) se ha unido al servidor.");
|
$logger->info("[NUEVO MIEMBRO] Usuario {$member->user->username} ({$member->id}) se ha unido al servidor.");
|
||||||
@@ -79,9 +105,11 @@ try {
|
|||||||
try {
|
try {
|
||||||
if (strpos($customId, 'translate_manual:') === 0) {
|
if (strpos($customId, 'translate_manual:') === 0) {
|
||||||
$targetLang = substr($customId, strlen('translate_manual:'));
|
$targetLang = substr($customId, strlen('translate_manual:'));
|
||||||
|
$userId = $interaction->user->id;
|
||||||
$originalMessage = $interaction->message;
|
$originalMessage = $interaction->message;
|
||||||
$channelId = $originalMessage->channel_id;
|
$channel = $interaction->channel;
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
// Responder de inmediato para evitar timeout de interacción
|
// Responder de inmediato para evitar timeout de interacción
|
||||||
$interaction->respondWithMessage(MessageBuilder::new()->setContent('⌛ Procesando traducción...'), true);
|
$interaction->respondWithMessage(MessageBuilder::new()->setContent('⌛ Procesando traducción...'), true);
|
||||||
|
|
||||||
@@ -96,7 +124,7 @@ try {
|
|||||||
|
|
||||||
if (!empty($originalContent)) {
|
if (!empty($originalContent)) {
|
||||||
try {
|
try {
|
||||||
$translator = new Translate();
|
$translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
$sourceLang = $translator->detectLanguage($originalContent) ?? 'es';
|
$sourceLang = $translator->detectLanguage($originalContent) ?? 'es';
|
||||||
if ($sourceLang === $targetLang) {
|
if ($sourceLang === $targetLang) {
|
||||||
// Fallback: muchas plantillas están en ES; intenta forzar ES como origen
|
// Fallback: muchas plantillas están en ES; intenta forzar ES como origen
|
||||||
@@ -113,36 +141,233 @@ try {
|
|||||||
|
|
||||||
// Obtener bandera desde supported_languages
|
// Obtener bandera desde supported_languages
|
||||||
$flag = '';
|
$flag = '';
|
||||||
|
=======
|
||||||
try {
|
try {
|
||||||
|
// Buscar el mensaje original que se está traduciendo
|
||||||
|
// Para interacciones, el mensaje original está en el mensaje de la interacción
|
||||||
|
$originalContent = '';
|
||||||
|
|
||||||
|
// Primero intentar obtener el mensaje referenciado si existe
|
||||||
|
$messageReference = $originalMessage->message_reference;
|
||||||
|
if ($messageReference && $messageReference->message_id) {
|
||||||
|
$referencedMessageId = $messageReference->message_id;
|
||||||
|
$channel->messages->fetch($referencedMessageId)->done(function (Message $referencedMessage) use ($interaction, $targetLang, $logger, $discord, $userId, $pdo) {
|
||||||
|
>>>>>>> 26414094d4262e5ab092028955a4f0de57092f43
|
||||||
|
try {
|
||||||
|
$originalContent = trim((string) ($referencedMessage->content ?? ''));
|
||||||
|
|
||||||
|
if (empty($originalContent)) {
|
||||||
|
$interaction->respondWithMessage(
|
||||||
|
MessageBuilder::new()->setContent('❌ No se encontró contenido para traducir.'),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extraer y preservar emojis, stickers y elementos de Discord
|
||||||
|
$processedContent = preserveDiscordElements($originalContent);
|
||||||
|
$translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
|
$sourceLang = $translator->detectLanguage($processedContent['text']) ?? 'es';
|
||||||
|
|
||||||
|
if ($sourceLang === $targetLang) {
|
||||||
|
$interaction->respondWithMessage(
|
||||||
|
MessageBuilder::new()->setContent('ℹ️ El mensaje ya está en este idioma.'),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$translatedText = $translator->translateText($processedContent['text'], $sourceLang, $targetLang);
|
||||||
|
|
||||||
|
// Restaurar emojis y elementos de Discord
|
||||||
|
$finalText = restoreDiscordElements($translatedText, $processedContent['placeholders']);
|
||||||
|
|
||||||
|
// Obtener bandera
|
||||||
$stmt = $pdo->prepare("SELECT flag_emoji FROM supported_languages WHERE language_code = ? AND is_active = 1");
|
$stmt = $pdo->prepare("SELECT flag_emoji FROM supported_languages WHERE language_code = ? AND is_active = 1");
|
||||||
$stmt->execute([$targetLang]);
|
$stmt->execute([$targetLang]);
|
||||||
$flag = $stmt->fetchColumn() ?: '';
|
$flag = $stmt->fetchColumn() ?: '';
|
||||||
} catch (\Throwable $e) { /* noop */ }
|
|
||||||
|
|
||||||
$flag = $flag !== '' ? $flag : '🏳️';
|
$flag = $flag !== '' ? $flag : '🏳️';
|
||||||
|
|
||||||
// Enviar resultado como mensaje normal al canal, mencionando al usuario
|
// Responder efímeramente con la traducción
|
||||||
$sender = new DiscordSender(DISCORD_BOT_TOKEN);
|
$response = "{$flag} **Traducción ({$sourceLang} → {$targetLang}):**\n\n" . $finalText;
|
||||||
$mention = '<@' . $userId . '>';
|
$interaction->respondWithMessage(
|
||||||
$content = "{$mention} {$flag} Traducción ({$sourceLang} → {$targetLang}):\n> " . $translatedText;
|
MessageBuilder::new()->setContent($response),
|
||||||
// Pequeña espera para que el mensaje efímero aparezca primero
|
true // Efímero - solo visible para el usuario
|
||||||
usleep(300000);
|
);
|
||||||
$sender->sendRawMessage($channelId, $content);
|
|
||||||
if (empty($translatedText)) {
|
$logger->info("[TRADUCCIÓN EFÍMERA] Traducción {$sourceLang}→{$targetLang} enviada efímeramente");
|
||||||
$sender = new DiscordSender(DISCORD_BOT_TOKEN);
|
|
||||||
$sender->sendRawMessage($channelId, '<@' . $userId . '> El mensaje ya está en este idioma.');
|
} catch (\Throwable $e) {
|
||||||
|
$logger->error("[Error Traducción Manual]", ['error' => $e->getMessage()]);
|
||||||
|
$interaction->respondWithMessage(
|
||||||
|
MessageBuilder::new()->setContent('❌ Error al procesar la traducción: ' . $e->getMessage()),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return; // Salir después de iniciar el fetch
|
||||||
|
} else {
|
||||||
|
// Fallback: usar el contenido del mensaje original si no hay referencia
|
||||||
|
$originalContent = trim((string) ($originalMessage->content ?? ''));
|
||||||
|
|
||||||
|
if (empty($originalContent)) {
|
||||||
|
$interaction->respondWithMessage(
|
||||||
|
MessageBuilder::new()->setContent('❌ No se encontró contenido para traducir.'),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extraer y preservar emojis, stickers y elementos de Discord
|
||||||
|
$processedContent = preserveDiscordElements($originalContent);
|
||||||
|
$translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
|
$sourceLang = $translator->detectLanguage($processedContent['text']) ?? 'es';
|
||||||
|
|
||||||
|
if ($sourceLang === $targetLang) {
|
||||||
|
$interaction->respondWithMessage(
|
||||||
|
MessageBuilder::new()->setContent('ℹ️ El mensaje ya está en este idioma.'),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$translatedText = $translator->translateText($processedContent['text'], $sourceLang, $targetLang);
|
||||||
|
|
||||||
|
// Restaurar emojis y elementos de Discord
|
||||||
|
$finalText = restoreDiscordElements($translatedText, $processedContent['placeholders']);
|
||||||
|
|
||||||
|
// Obtener bandera
|
||||||
|
$stmt = $pdo->prepare("SELECT flag_emoji FROM supported_languages WHERE language_code = ? AND is_active = 1");
|
||||||
|
$stmt->execute([$targetLang]);
|
||||||
|
$flag = $stmt->fetchColumn() ?: '';
|
||||||
|
|
||||||
|
$flag = $flag !== '' ? $flag : '🏳️';
|
||||||
|
|
||||||
|
// Responder efímeramente con la traducción
|
||||||
|
$response = "{$flag} **Traducción ({$sourceLang} → {$targetLang}):**\n\n" . $finalText;
|
||||||
|
$interaction->respondWithMessage(
|
||||||
|
MessageBuilder::new()->setContent($response),
|
||||||
|
true // Efímero - solo visible para el usuario
|
||||||
|
);
|
||||||
|
|
||||||
|
$logger->info("[TRADUCCIÓN EFÍMERA] Traducción {$sourceLang}→{$targetLang} enviada efímeramente");
|
||||||
}
|
}
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
$sender = new DiscordSender(DISCORD_BOT_TOKEN);
|
$logger->error("[Error Interacción Manual]", ['error' => $e->getMessage()]);
|
||||||
$sender->sendRawMessage($channelId, '<@' . $userId . "> Error al traducir: " . $e->getMessage());
|
$interaction->respondWithMessage(
|
||||||
}
|
MessageBuilder::new()->setContent('❌ Error al procesar la solicitud: ' . $e->getMessage()),
|
||||||
} else {
|
true
|
||||||
$sender = new DiscordSender(DISCORD_BOT_TOKEN);
|
);
|
||||||
$sender->sendRawMessage($channelId, '<@' . $userId . '> No se encontró contenido para traducir.');
|
|
||||||
}
|
}
|
||||||
return; // Salir después de manejar la interacción
|
return; // Salir después de manejar la interacción
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MANEJAR TRADUCCIÓN A IDIOMA ESPECÍFICO (desde botones de idiomas)
|
||||||
|
if (strpos($customId, 'translate_to_lang:') === 0) {
|
||||||
|
// Extraer el ID del mensaje original y el idioma destino del custom_id
|
||||||
|
$parts = explode(':', $customId);
|
||||||
|
if (count($parts) < 3) {
|
||||||
|
$interaction->respondWithMessage(MessageBuilder::new()->setContent("❌ Error: Formato de botón de traducción inválido."), true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$originalMessageId = $parts[1];
|
||||||
|
$targetLang = $parts[2];
|
||||||
|
|
||||||
|
// 1. Deferir la respuesta de forma efímera para que el usuario sepa que se está procesando
|
||||||
|
$interaction->acknowledge(true)->done(function() use ($originalMessageId, $targetLang, $interaction, $discord, $pdo, $logger, $userId) {
|
||||||
|
// 2. Obtener el mensaje original usando su ID
|
||||||
|
$interaction->channel->messages->fetch($originalMessageId)->done(function ($originalMessage) use ($originalMessageId, $interaction, $discord, $pdo, $logger, $userId, $targetLang) {
|
||||||
|
$originalContent = (string) ($originalMessage->content ?? '');
|
||||||
|
|
||||||
|
$emojiMap = [];
|
||||||
|
preg_match_all('/<a?:(\w+):(\d+)>/', $originalContent, $matches, PREG_OFFSET_CAPTURE);
|
||||||
|
foreach ($matches[0] as $match) {
|
||||||
|
$emojiMap[$match[1]] = $match[0];
|
||||||
|
}
|
||||||
|
$contentForTranslation = preg_replace('/<a?:(\w+):(\d+)>/', '', $originalContent);
|
||||||
|
$contentForTranslation = trim($contentForTranslation);
|
||||||
|
|
||||||
|
if (empty($contentForTranslation)) {
|
||||||
|
$interaction->editOriginalResponse(MessageBuilder::new()->setContent("⚠️ El mensaje no contiene texto traducible."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
|
$detectionResultForSource = $translator->detectLanguage($contentForTranslation);
|
||||||
|
$sourceLang = $detectionResultForSource[0]['language'] ?? 'es';
|
||||||
|
|
||||||
|
if ($sourceLang === $targetLang) {
|
||||||
|
$interaction->editOriginalResponse(MessageBuilder::new()->setContent("⚠️ El mensaje ya está en el idioma seleccionado ({$targetLang})."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$translatedText = $translator->translateText($contentForTranslation, $sourceLang, $targetLang);
|
||||||
|
|
||||||
|
if (!empty($translatedText)) {
|
||||||
|
foreach ($emojiMap as $emojiTag) {
|
||||||
|
$translatedText .= ' ' . $emojiTag;
|
||||||
|
}
|
||||||
|
$translatedText = trim($translatedText);
|
||||||
|
|
||||||
|
$stmt = $pdo->prepare("SELECT flag_emoji, language_name FROM supported_languages WHERE language_code = ? AND is_active = 1");
|
||||||
|
$stmt->execute([$targetLang]);
|
||||||
|
$langInfo = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||||
|
$flag = $langInfo['flag_emoji'] ?? '🏳️';
|
||||||
|
$langName = $langInfo['language_name'] ?? strtoupper($targetLang);
|
||||||
|
|
||||||
|
$embed = new Embed($discord);
|
||||||
|
$embed->setTitle("{$flag} Traducción a {$langName}");
|
||||||
|
$embed->setDescription($translatedText);
|
||||||
|
$embed->setColor("#5865F2");
|
||||||
|
$embed->setFooter("Traducido de {$sourceLang} • Solo tú puedes ver esto");
|
||||||
|
|
||||||
|
$imageUrl = null;
|
||||||
|
if ($originalMessage->attachments !== null && count($originalMessage->attachments) > 0) {
|
||||||
|
$firstAttachment = $originalMessage->attachments->first();
|
||||||
|
if ($firstAttachment && isset($firstAttachment->url)) {
|
||||||
|
$contentType = $firstAttachment->content_type ?? '';
|
||||||
|
if (strpos($contentType, 'image/') === 0 || strpos($contentType, 'video/') === 0) {
|
||||||
|
$imageUrl = $firstAttachment->url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$imageUrl && $originalMessage->stickers !== null && count($originalMessage->stickers) > 0) {
|
||||||
|
$firstSticker = $originalMessage->stickers->first();
|
||||||
|
if ($firstSticker && isset($firstSticker->image_url)) {
|
||||||
|
$imageUrl = $firstSticker->image_url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($imageUrl) {
|
||||||
|
$embed->setImage($imageUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Editar la respuesta original con el resultado
|
||||||
|
$builder = MessageBuilder::new()->addEmbed($embed);
|
||||||
|
$interaction->sendFollowUpMessage($builder, true);
|
||||||
|
|
||||||
|
$logger->info("[TRANSLATION_BUTTON] Usuario {$userId} tradujo mensaje #{$originalMessageId} de {$sourceLang} a {$targetLang}");
|
||||||
|
} else {
|
||||||
|
$interaction->editOriginalResponse(MessageBuilder::new()->setContent("⚠️ No se pudo traducir el mensaje."));
|
||||||
|
}
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$logger->error("[TRANSLATION_BUTTON] Error al traducir", ['error' => $e->getMessage(), 'trace' => $e->getTraceAsString()]);
|
||||||
|
$interaction->editOriginalResponse(MessageBuilder::new()->setContent("❌ Error al traducir: " . $e->getMessage()));
|
||||||
|
}
|
||||||
|
}, function ($error) use ($interaction, $logger) {
|
||||||
|
$logger->error("[TRANSLATION_BUTTON] Error al obtener mensaje original", ['error' => $error->getMessage()]);
|
||||||
|
$interaction->editOriginalResponse(MessageBuilder::new()->setContent("❌ No se pudo obtener el mensaje original."));
|
||||||
|
});
|
||||||
|
}, function ($error) use ($logger, $interaction) {
|
||||||
|
$logger->error("[TRANSLATION_BUTTON] Error al reconocer (defer) la interacción.", ['error' => $error->getMessage()]);
|
||||||
|
// If even deferring fails, we can't edit the response.
|
||||||
|
});
|
||||||
|
return; // Finalizar para no procesar otros ifs
|
||||||
|
}
|
||||||
|
|
||||||
// Traducción de plantillas completas (comandos #)
|
// Traducción de plantillas completas (comandos #)
|
||||||
if (strpos($customId, 'translate_template:') === 0) {
|
if (strpos($customId, 'translate_template:') === 0) {
|
||||||
$payload = substr($customId, strlen('translate_template:'));
|
$payload = substr($customId, strlen('translate_template:'));
|
||||||
@@ -183,7 +408,7 @@ try {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$translator = new Translate();
|
$translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
$sourceLang = $translator->detectLanguage($fullText) ?? 'es';
|
$sourceLang = $translator->detectLanguage($fullText) ?? 'es';
|
||||||
if ($sourceLang === $targetLang) {
|
if ($sourceLang === $targetLang) {
|
||||||
// Fallback: fuerza ES como origen si coincide con el destino (común en nuestras plantillas)
|
// Fallback: fuerza ES como origen si coincide con el destino (común en nuestras plantillas)
|
||||||
@@ -340,6 +565,23 @@ try {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Sistema de verificación de salud periódica
|
||||||
|
$discord->on('ready', function (Discord $discord) use ($logger) {
|
||||||
|
// Programar verificación de salud cada 2 minutos
|
||||||
|
$discord->getLoop()->addPeriodicTimer(120, function() use ($discord, $logger) {
|
||||||
|
try {
|
||||||
|
// Verificar si el bot sigue conectado
|
||||||
|
if ($discord->user && $discord->user->id) {
|
||||||
|
$logger->info("[HEALTH CHECK] Bot conectado y respondiendo. Usuario: {$discord->user->username}");
|
||||||
|
} else {
|
||||||
|
$logger->warning("[HEALTH CHECK] Bot no responde correctamente");
|
||||||
|
}
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$logger->error("[HEALTH CHECK] Error en verificación: " . $e->getMessage());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
$discord->run();
|
$discord->run();
|
||||||
|
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
@@ -499,37 +741,222 @@ function handleDiscordCommand(Message $message, PDO $pdo, Logger $logger)
|
|||||||
function handleDiscordTranslation(Message $message, PDO $pdo, Logger $logger)
|
function handleDiscordTranslation(Message $message, PDO $pdo, Logger $logger)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$translator = new Translate();
|
<<<<<<< HEAD
|
||||||
|
$translator = new Translate(LIBRETRANSLATE_URL); // Instanciar al inicio
|
||||||
|
|
||||||
|
$messageContentOriginal = trim($message->content);
|
||||||
|
|
||||||
|
// Determine if there is translatable text content based on LibreTranslate confidence
|
||||||
|
$hasTranslatableText = false;
|
||||||
|
$contentForDetection = ''; // Initialize outside if block for broader scope
|
||||||
|
|
||||||
|
if (!empty($messageContentOriginal)) { // Only try to detect if message has any content
|
||||||
|
// Prepare content for language detection: remove custom Discord emojis
|
||||||
|
$contentForDetection = preg_replace('/<a?:(\w+):(\d+)>/u', '', $messageContentOriginal);
|
||||||
|
// Removed: $contentForDetection = strip_tags($contentForDetection); // This was the culprit
|
||||||
|
$contentForDetection = trim($contentForDetection);
|
||||||
|
|
||||||
|
if (!empty($contentForDetection)) { // Only if there's something left to detect
|
||||||
|
$detectionResult = $translator->detectLanguage($contentForDetection);
|
||||||
|
$confidence = $detectionResult[0]['confidence'] ?? 0.0;
|
||||||
|
if ($confidence > 0.0) {
|
||||||
|
$hasTranslatableText = true;
|
||||||
|
=======
|
||||||
$text = $message->content;
|
$text = $message->content;
|
||||||
$detectedLang = $translator->detectLanguage(strip_tags($text)) ?? 'es';
|
$attachments = $message->attachments;
|
||||||
|
|
||||||
// Obtener idiomas activos y encolar traducciones
|
// Verificar si el mensaje tiene contenido de texto
|
||||||
$langStmt = $pdo->query("SELECT language_code FROM supported_languages WHERE is_active = 1");
|
$hasTextContent = !empty(trim($text));
|
||||||
$activeLangs = $langStmt->fetchAll(PDO::FETCH_COLUMN);
|
|
||||||
|
|
||||||
if (in_array($detectedLang, $activeLangs)) {
|
// Verificar si hay texto en los attachments (captions de imágenes/videos)
|
||||||
foreach ($activeLangs as $targetLang) {
|
$attachmentText = '';
|
||||||
if ($detectedLang === $targetLang) {
|
if (!empty($attachments)) {
|
||||||
continue; // No traducir al mismo idioma
|
foreach ($attachments as $attachment) {
|
||||||
|
// Algunos attachments tienen propiedad 'description' o 'caption'
|
||||||
|
if (!empty($attachment->description)) {
|
||||||
|
$attachmentText .= $attachment->description . ' ';
|
||||||
}
|
}
|
||||||
|
if (!empty($attachment->caption)) {
|
||||||
$sql = "INSERT INTO translation_queue (platform, message_id, chat_id, user_id, text_to_translate, source_lang, target_lang) VALUES (?, ?, ?, ?, ?, ?, ?)";
|
$attachmentText .= $attachment->caption . ' ';
|
||||||
$stmt = $pdo->prepare($sql);
|
>>>>>>> 26414094d4262e5ab092028955a4f0de57092f43
|
||||||
$stmt->execute([
|
|
||||||
'discord',
|
|
||||||
$message->id,
|
|
||||||
$message->channel_id,
|
|
||||||
$message->author->id,
|
|
||||||
$text,
|
|
||||||
$detectedLang,
|
|
||||||
$targetLang
|
|
||||||
]);
|
|
||||||
|
|
||||||
$logger->info("[QUEUE] Mensaje de Discord #{$message->id} encolado para traducción de '$detectedLang' a '$targetLang'.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
// If no translatable text is found, do not send buttons.
|
||||||
|
if (!$hasTranslatableText) {
|
||||||
|
$logger->info("[TRANSLATION_BUTTONS] Mensaje de Discord #{$message->id} sin contenido de texto traducible, no se envían botones de traducción.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. Detectar idioma original (using the content prepared for detection, which we know has text)
|
||||||
|
$finalDetectionResult = $translator->detectLanguage($contentForDetection); // This will be the full array or null
|
||||||
|
$detectedLang = $finalDetectionResult[0]['language'] ?? 'es'; // Correctly extract language
|
||||||
|
|
||||||
|
// 2. Obtener todos los idiomas activos con información completa
|
||||||
|
$langStmt = $pdo->query("SELECT language_code, language_name, flag_emoji FROM supported_languages WHERE is_active = 1 ORDER BY language_name ASC");
|
||||||
|
$activeLangs = $langStmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
// 3. Filtrar los idiomas de destino (todos los activos menos el original)
|
||||||
|
=======
|
||||||
|
// Combinar texto principal con texto de attachments
|
||||||
|
$fullText = trim($text . ' ' . $attachmentText);
|
||||||
|
$hasAnyText = !empty($fullText);
|
||||||
|
|
||||||
|
// Verificar si el mensaje tiene solo imágenes/adjuntos sin texto
|
||||||
|
$hasOnlyAttachments = !$hasAnyText && !empty($attachments) && count($attachments) > 0;
|
||||||
|
|
||||||
|
// Si el mensaje no tiene texto o tiene solo imágenes, no mostrar botones de traducción
|
||||||
|
if (!$hasAnyText || $hasOnlyAttachments) {
|
||||||
|
$logger->info("[TRADUCCIÓN] Mensaje #{$message->id} no tiene contenido de texto, omitiendo botones de traducción.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
|
$detectedLang = $translator->detectLanguage(strip_tags($fullText)) ?? 'es';
|
||||||
|
|
||||||
|
// Obtener idiomas activos disponibles
|
||||||
|
$langStmt = $pdo->query("SELECT language_code, language_name, flag_emoji FROM supported_languages WHERE is_active = 1");
|
||||||
|
$activeLangs = $langStmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
// Filtrar idiomas diferentes al detectado
|
||||||
|
>>>>>>> 26414094d4262e5ab092028955a4f0de57092f43
|
||||||
|
$targetLangs = array_filter($activeLangs, function($lang) use ($detectedLang) {
|
||||||
|
return $lang['language_code'] !== $detectedLang;
|
||||||
|
});
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
// 4. Si no hay idiomas a los que traducir, no hacer nada
|
||||||
|
if (empty($targetLangs)) {
|
||||||
|
$logger->info("[TRANSLATION_BUTTONS] No se requieren botones de traducción para el mensaje de Discord #{$message->id} desde '$detectedLang'.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. Crear botones de traducción para cada idioma destino
|
||||||
|
=======
|
||||||
|
if (empty($targetLangs)) {
|
||||||
|
$logger->info("[TRADUCCIÓN] No hay idiomas disponibles para traducir desde '$detectedLang'");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crear botones con banderas
|
||||||
|
>>>>>>> 26414094d4262e5ab092028955a4f0de57092f43
|
||||||
|
$components = [];
|
||||||
|
$actionRow = ActionRow::new();
|
||||||
|
$buttonCount = 0;
|
||||||
|
|
||||||
|
foreach ($targetLangs as $lang) {
|
||||||
|
<<<<<<< HEAD
|
||||||
|
$button = Button::new(Button::STYLE_SECONDARY, 'translate_to_lang:' . $message->id . ':' . $lang['language_code'])
|
||||||
|
->setLabel($lang['language_name']);
|
||||||
|
if (!empty($lang['flag_emoji'])) {
|
||||||
|
$button->setEmoji($lang['flag_emoji']);
|
||||||
|
}
|
||||||
|
$actionRow->addComponent($button);
|
||||||
|
$buttonCount++;
|
||||||
|
|
||||||
|
=======
|
||||||
|
$button = Button::new(Button::STYLE_SECONDARY, 'translate_manual:' . $lang['language_code'])
|
||||||
|
->setLabel($lang['language_name']);
|
||||||
|
|
||||||
|
if (!empty($lang['flag_emoji'])) {
|
||||||
|
$button->setEmoji($lang['flag_emoji']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$actionRow->addComponent($button);
|
||||||
|
$buttonCount++;
|
||||||
|
|
||||||
|
// Discord permite máximo 5 botones por ActionRow
|
||||||
|
>>>>>>> 26414094d4262e5ab092028955a4f0de57092f43
|
||||||
|
if ($buttonCount % 5 === 0) {
|
||||||
|
$components[] = $actionRow;
|
||||||
|
$actionRow = ActionRow::new();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
|
||||||
|
>>>>>>> 26414094d4262e5ab092028955a4f0de57092f43
|
||||||
|
if ($buttonCount % 5 !== 0) {
|
||||||
|
$components[] = $actionRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
// 6. Enviar mensaje del bot con botones como respuesta al mensaje original
|
||||||
|
$builder = MessageBuilder::new()
|
||||||
|
->setContent('🌐 Select a language to translate to:')
|
||||||
|
->setComponents($components);
|
||||||
|
|
||||||
|
$message->reply($builder)->done(function () use ($logger, $message, $detectedLang) {
|
||||||
|
$logger->info("[TRANSLATION_BUTTONS] Botones de traducción enviados para mensaje #{$message->id} (idioma detectado: $detectedLang)");
|
||||||
|
}, function ($error) use ($logger, $message) {
|
||||||
|
$logger->error("[TRANSLATION_BUTTONS] Error al enviar botones para mensaje #{$message->id}", ['error' => $error->getMessage()]);
|
||||||
|
});
|
||||||
|
|
||||||
} catch (Throwable $e) {
|
} catch (Throwable $e) {
|
||||||
$logger->error("[Error Encolando Traducción Discord]", ['error' => $e->getMessage(), 'trace' => $e->getTraceAsString()]);
|
$logger->error("[TRANSLATION_BUTTONS] Error al procesar mensaje para botones de traducción", ['error' => $e->getMessage(), 'trace' => $e->getTraceAsString()]);
|
||||||
|
=======
|
||||||
|
// Enviar mensaje con botones efímeros
|
||||||
|
$builder = MessageBuilder::new()
|
||||||
|
// ->setContent("🌍 **Selecciona idioma para traducir:**")
|
||||||
|
->setComponents($components);
|
||||||
|
|
||||||
|
$message->reply($builder, true); // true = ephemeral (solo visible para el usuario)
|
||||||
|
|
||||||
|
$logger->info("[TRADUCCIÓN] Botones de traducción enviados para mensaje #{$message->id}");
|
||||||
|
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
$logger->error("[Error Traducción Discord]", ['error' => $e->getMessage(), 'trace' => $e->getTraceAsString()]);
|
||||||
|
>>>>>>> 26414094d4262e5ab092028955a4f0de57092f43
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Función para preservar emojis, stickers y elementos de Discord durante la traducción
|
||||||
|
*/
|
||||||
|
function preserveDiscordElements($text) {
|
||||||
|
$placeholders = [];
|
||||||
|
$processedText = $text;
|
||||||
|
|
||||||
|
// Patrones para detectar elementos de Discord (excluyendo emojis Unicode)
|
||||||
|
$patterns = [
|
||||||
|
// Emojis personalizados de Discord <:name:id>
|
||||||
|
'/<a?:([a-zA-Z0-9_]+):(\d+)>/',
|
||||||
|
// Menciones de usuarios <@id> y <@!id>
|
||||||
|
'/<@!?(\d+)>/',
|
||||||
|
// Menciones de canales <#id>
|
||||||
|
'/<#(\d+)>/',
|
||||||
|
// Menciones de roles <@&id>
|
||||||
|
'/<@&(\d+)>/',
|
||||||
|
// Stickers y GIFs animados (pueden venir como URLs especiales)
|
||||||
|
'/https?:\/\/(?:media|cdn)\.discordapp\.(?:com|net)\/(stickers|attachments)\/\S+/i'
|
||||||
|
];
|
||||||
|
|
||||||
|
$index = 0;
|
||||||
|
foreach ($patterns as $pattern) {
|
||||||
|
$processedText = preg_replace_callback($pattern, function($matches) use (&$placeholders, &$index) {
|
||||||
|
$placeholder = "DISCORD_ELEMENT_{$index}";
|
||||||
|
$placeholders[$placeholder] = $matches[0];
|
||||||
|
$index++;
|
||||||
|
return $placeholder;
|
||||||
|
}, $processedText);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'text' => $processedText,
|
||||||
|
'placeholders' => $placeholders
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Función para restaurar emojis, stickers y elementos de Discord después de la traducción
|
||||||
|
*/
|
||||||
|
function restoreDiscordElements($translatedText, $placeholders) {
|
||||||
|
$restoredText = $translatedText;
|
||||||
|
|
||||||
|
foreach ($placeholders as $placeholder => $originalElement) {
|
||||||
|
$restoredText = str_replace($placeholder, $originalElement, $restoredText);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $restoredText;
|
||||||
|
}
|
||||||
|
|||||||
86
docker/bot-lastwar.yaml
Executable file
86
docker/bot-lastwar.yaml
Executable file
@@ -0,0 +1,86 @@
|
|||||||
|
name: bot-lastwar
|
||||||
|
services:
|
||||||
|
bot-lastwar:
|
||||||
|
image: 10.10.4.3:5000/bot-lastwar:v3
|
||||||
|
container_name: bot_lastwar_funcionando
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- target: 80
|
||||||
|
published: "8086"
|
||||||
|
protocol: tcp
|
||||||
|
volumes:
|
||||||
|
- type: bind
|
||||||
|
source: /media/ZimaOS-HD/AppData/bot_lastwar/logs
|
||||||
|
target: /var/www/html/bot/logs
|
||||||
|
environment:
|
||||||
|
# --- App Configuration ---
|
||||||
|
- APP_ENV=production
|
||||||
|
- APP_ENVIRONMENT=reod
|
||||||
|
- APP_URL=https://reod-dragon.ddns.net
|
||||||
|
- INTERNAL_API_KEY=b5dda33b8eb062e06e100c98a8947c0248b6e38973dfd689e81f725af238d23c
|
||||||
|
- TEST_ENV_LOAD=caos_cargado
|
||||||
|
- TZ=America/Mexico_City
|
||||||
|
- USE_LOCALHOST=false
|
||||||
|
|
||||||
|
# --- Database Configuration ---
|
||||||
|
- DB_DIALECT=mysql
|
||||||
|
- DB_HOST=10.10.4.17
|
||||||
|
- DB_NAME=bot
|
||||||
|
- DB_PASS='MiPo6425@@'
|
||||||
|
- DB_PORT=3390
|
||||||
|
- DB_USER=nickpons666
|
||||||
|
|
||||||
|
# --- Discord Configuration ---
|
||||||
|
- DISCORD_BOT_TOKEN=MTM4NTc5MDM0NDU5NDk4NTA2MQ.GvobiS.TRQM9dX7vDjmuGVa3Ckp6YRtGEWxdW0gBDbvCI
|
||||||
|
- DISCORD_CLIENT_ID=1385790344594985061
|
||||||
|
- DISCORD_CLIENT_SECRET=hK9SNiYdenHQVxakt8Mx3RoMkZ5oOJvk
|
||||||
|
- DISCORD_GUILD_ID=1338327171013541999
|
||||||
|
|
||||||
|
# --- JWT Configuration ---
|
||||||
|
- JWT_ALGORITHM=HS256
|
||||||
|
- JWT_EXPIRATION=3600
|
||||||
|
- JWT_SECRET=19c5020fa8207d2c3b9e82f430784667e001f1eb733848922f7bcb9be98f93c2
|
||||||
|
|
||||||
|
# --- Services Configuration ---
|
||||||
|
- LIBRETRANSLATE_URL=http://10.10.4.17:5000
|
||||||
|
- N8N_IA_WEBHOOK_URL=https://n8n-dragon.ddns.net/webhook/ia
|
||||||
|
- N8N_IA_WEBHOOK_URL_DISCORD=https://n8n-dragon.ddns.net/webhook/42e803ae-8aee-4b1c-858a-6c6d3fbb6230
|
||||||
|
- N8N_PROCESS_QUEUE_WEBHOOK_URL=https://n8n-dragon.ddns.net/webhook/telegram-unified
|
||||||
|
- N8N_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI4MWY4YjU3YS0wMTg2LTQ1NTctOWZlMC1jYWUxNjZlYzZlMTkiLCJpc3MiOiJuOG4iLCJhdWQiOiJwdWJsaWMtYXBpIiwiaWF0IjoxNzU1OTMwODM5fQ.2tLbddyhMTKplp9n-qVNiAgQCUj2YEvVASwLnNjgCt0
|
||||||
|
- N8N_URL=https://n8n-dragon.ddns.net
|
||||||
|
|
||||||
|
# --- Telegram Configuration ---
|
||||||
|
- TELEGRAM_BOT_TOKEN=8469229183:AAEVIV5e7rjDXKNgFTX0dnCW6JWB88X4p2I
|
||||||
|
- TELEGRAM_WEBHOOK_TOKEN=webhook_secure_token_12345
|
||||||
|
|
||||||
|
# --- Docker Specific Settings ---
|
||||||
|
command:
|
||||||
|
- /entrypoint.sh
|
||||||
|
user: 0:0
|
||||||
|
network_mode: bridge
|
||||||
|
privileged: false
|
||||||
|
cpu_shares: 90
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 16663138304
|
||||||
|
reservations:
|
||||||
|
devices: []
|
||||||
|
cap_add: []
|
||||||
|
devices: []
|
||||||
|
labels:
|
||||||
|
icon: https://www.ruthlessreviews.com/wp-content/uploads/2025/12/last-war-image.jpg
|
||||||
|
|
||||||
|
x-casaos:
|
||||||
|
author: self
|
||||||
|
category: self
|
||||||
|
hostname: ""
|
||||||
|
icon: https://www.ruthlessreviews.com/wp-content/uploads/2025/12/last-war-image.jpg
|
||||||
|
index: /
|
||||||
|
is_uncontrolled: false
|
||||||
|
port_map: "8086"
|
||||||
|
scheme: http
|
||||||
|
store_app_id: bot-lastwar
|
||||||
|
title:
|
||||||
|
custom: ""
|
||||||
|
en_us: bot-lastwar
|
||||||
@@ -1,38 +1,68 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# ============================================
|
# ==================================================
|
||||||
# Script para construir y subir imagen Docker
|
# Script para construir y subir una imagen Docker.
|
||||||
# Target: 10.10.4.3:5000/bot-lastwar:v2
|
#
|
||||||
# ============================================
|
# Uso:
|
||||||
|
# ./deploy.sh
|
||||||
|
#
|
||||||
|
# El script te preguntará interactivamente:
|
||||||
|
# - Tag para la imagen
|
||||||
|
# - Si deseas usar caché al construir
|
||||||
|
# ==================================================
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Cambiar al directorio del proyecto (carpeta padre de donde está este script)
|
# --- Configuración ---
|
||||||
|
REGISTRY_URL="10.10.4.3:5000"
|
||||||
|
IMAGE_NAME="bot-lastwar"
|
||||||
|
|
||||||
|
# Preguntar por el tag si no se proporciona como argumento
|
||||||
|
if [ -n "$1" ]; then
|
||||||
|
TAG="$1"
|
||||||
|
else
|
||||||
|
read -p "Introduce el tag para la imagen [latest]: " TAG
|
||||||
|
TAG="${TAG:-latest}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Preguntar si quiere usar caché
|
||||||
|
read -p "¿Usar caché al construir? (s/n) [n]: " USE_CACHE
|
||||||
|
if [ "${USE_CACHE,,}" = "s" ]; then
|
||||||
|
BUILD_CACHE_FLAG=""
|
||||||
|
CACHE_STATUS="con caché"
|
||||||
|
else
|
||||||
|
BUILD_CACHE_FLAG="--no-cache"
|
||||||
|
CACHE_STATUS="sin caché"
|
||||||
|
fi
|
||||||
|
# --- Fin de la Configuración ---
|
||||||
|
|
||||||
|
# Nombres completos de la imagen
|
||||||
|
LOCAL_IMAGE_NAME="${IMAGE_NAME}:${TAG}"
|
||||||
|
REMOTE_IMAGE_NAME="${REGISTRY_URL}/${IMAGE_NAME}:${TAG}"
|
||||||
|
|
||||||
|
# Cambiar al directorio raíz del proyecto (un nivel arriba de este script)
|
||||||
cd "$(dirname "$0")/.."
|
cd "$(dirname "$0")/.."
|
||||||
|
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
echo "Construyendo imagen Docker..."
|
echo "Directorio de trabajo: $(pwd)"
|
||||||
echo "Directorio: $(pwd)"
|
echo "Construyendo imagen: ${LOCAL_IMAGE_NAME}"
|
||||||
|
echo "Opción de build: ${CACHE_STATUS}"
|
||||||
|
echo "Destino del registry: ${REMOTE_IMAGE_NAME}"
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
|
|
||||||
# Construir la imagen usando el Dockerfile en docker/
|
# 1. Construir la imagen Docker
|
||||||
docker build -t bot-lastwar:latest -f docker/Dockerfile .
|
echo "Paso 1: Construyendo imagen Docker ${CACHE_STATUS}..."
|
||||||
|
docker build ${BUILD_CACHE_FLAG} -t "${LOCAL_IMAGE_NAME}" -f docker/Dockerfile .
|
||||||
|
|
||||||
|
# 2. Etiquetar la imagen para el registry
|
||||||
|
echo "Paso 2: Etiquetando imagen como ${REMOTE_IMAGE_NAME}..."
|
||||||
|
docker tag "${LOCAL_IMAGE_NAME}" "${REMOTE_IMAGE_NAME}"
|
||||||
|
|
||||||
|
# 3. Subir la imagen al registry
|
||||||
|
echo "Paso 3: Subiendo imagen al registry..."
|
||||||
|
docker push "${REMOTE_IMAGE_NAME}"
|
||||||
|
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
echo "Etiquetando imagen para el registry..."
|
echo "✅ Imagen subida exitosamente:"
|
||||||
echo "=========================================="
|
echo "${REMOTE_IMAGE_NAME}"
|
||||||
|
|
||||||
# Etiquetar la imagen con la versión v2
|
|
||||||
docker tag bot-lastwar:latest 10.10.4.3:5000/bot-lastwar:v2
|
|
||||||
|
|
||||||
echo "=========================================="
|
|
||||||
echo "Subiendo imagen al registry..."
|
|
||||||
echo "=========================================="
|
|
||||||
|
|
||||||
# Subir al registry
|
|
||||||
docker push 10.10.4.3:5000/bot-lastwar:v2
|
|
||||||
|
|
||||||
echo "=========================================="
|
|
||||||
echo "Imagen subida exitosamente:"
|
|
||||||
echo "10.10.4.3:5000/bot-lastwar:v2"
|
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ echo "Generando archivo .env desde variables de entorno..."
|
|||||||
# Eliminar todos los archivos .env existentes para evitar conflictos
|
# Eliminar todos los archivos .env existentes para evitar conflictos
|
||||||
rm -f /var/www/html/bot/.env* 2>/dev/null || true
|
rm -f /var/www/html/bot/.env* 2>/dev/null || true
|
||||||
|
|
||||||
env | grep -E "^(DB_|JWT_|DISCORD_|TELEGRAM_|LIBRETRANSLATE_|N8N_|APP_|INTERNAL_API_KEY|TEST_ENV_LOAD)" > /tmp/env_vars.txt
|
env > /tmp/env_vars.txt
|
||||||
|
|
||||||
# Determinar el nombre del archivo .env según el entorno
|
# Determinar el nombre del archivo .env según el entorno
|
||||||
if [ "$ENVIRONMENT" = "reod" ]; then
|
if [ "$ENVIRONMENT" = "reod" ]; then
|
||||||
@@ -39,7 +39,10 @@ fi
|
|||||||
|
|
||||||
rm -f /tmp/env_vars.txt
|
rm -f /tmp/env_vars.txt
|
||||||
|
|
||||||
echo "Archivo .env generado"
|
echo "Archivo .env generado en ${ENV_FILE}"
|
||||||
|
# Corregir permisos para que el servidor web (www-data) pueda leerlo
|
||||||
|
chown www-data:www-data "$ENV_FILE"
|
||||||
|
chmod 644 "$ENV_FILE"
|
||||||
|
|
||||||
if [ -f /var/www/html/bot/composer.json ]; then
|
if [ -f /var/www/html/bot/composer.json ]; then
|
||||||
echo "Instalando dependencias de Composer..."
|
echo "Instalando dependencias de Composer..."
|
||||||
@@ -55,12 +58,12 @@ touch /var/log/apache2/access.log 2>/dev/null || true
|
|||||||
chmod 666 /var/log/apache2/*.log 2>/dev/null || true
|
chmod 666 /var/log/apache2/*.log 2>/dev/null || true
|
||||||
chown -R www-data:www-data /var/www/html/bot/logs /var/log/apache2 2>/dev/null || true
|
chown -R www-data:www-data /var/www/html/bot/logs /var/log/apache2 2>/dev/null || true
|
||||||
|
|
||||||
echo "Configurando sitio Apache..."
|
echo "Configurando sitio Apache y limpiando caché de Opcache..."
|
||||||
if [ "$ENVIRONMENT" = "reod" ]; then
|
if [ "$ENVIRONMENT" = "reod" ]; then
|
||||||
a2ensite reod-dragon.ddns.net.conf 2>/dev/null || true
|
a2ensite reod-dragon.ddns.net.conf 2>/dev/null || true
|
||||||
else
|
else
|
||||||
a2dissite reod-dragon.ddns.net.conf 2>/dev/null || true
|
a2dissite reod-dragon.ddns.net.conf 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Iniciando Supervisor..."
|
echo "Iniciando Supervisor (que gestionará Apache y los workers)..."
|
||||||
exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
|
exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ require_once __DIR__ . '/templates/header.php';
|
|||||||
} else {
|
} else {
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
if (is_file($gallery_path . '/' . $file)) {
|
if (is_file($gallery_path . '/' . $file)) {
|
||||||
echo '<div class="col-lg-3 col-md-4 col-sm-6 mb-4 text-center"><img src="galeria/' . htmlspecialchars($file) . '" class="img-fluid img-thumbnail gallery-item" style="cursor:pointer;" alt="' . htmlspecialchars($file) . '"><p class="small text-muted mt-1">' . htmlspecialchars($file) . '</p></div>';
|
echo '<div class="col-lg-3 col-md-4 col-sm-6 mb-4 text-center"><img src="' . site_url('galeria/' . $file) . '" class="img-fluid img-thumbnail gallery-item" style="cursor:pointer;" alt="' . htmlspecialchars($file) . '"><p class="small text-muted mt-1">' . htmlspecialchars($file) . '</p></div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ require_once __DIR__ . '/templates/header.php';
|
|||||||
} else {
|
} else {
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
if (is_file($gallery_path . '/' . $file)) {
|
if (is_file($gallery_path . '/' . $file)) {
|
||||||
echo '<div class="col-lg-3 col-md-4 col-sm-6 mb-4 text-center"><img src="galeria/' . htmlspecialchars($file) . '" class="img-fluid img-thumbnail gallery-item" style="cursor:pointer;" alt="' . htmlspecialchars($file) . '"><p class="small text-muted mt-1">' . htmlspecialchars($file) . '</p></div>';
|
echo '<div class="col-lg-3 col-md-4 col-sm-6 mb-4 text-center"><img src="' . site_url('galeria/' . $file) . '" class="img-fluid img-thumbnail gallery-item" style="cursor:pointer;" alt="' . htmlspecialchars($file) . '"><p class="small text-muted mt-1">' . htmlspecialchars($file) . '</p></div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -193,11 +193,19 @@ $(document).ready(function() {
|
|||||||
// Preview message function
|
// Preview message function
|
||||||
function previewMessage(content) {
|
function previewMessage(content) {
|
||||||
const previewModalBody = document.getElementById('previewModalBody');
|
const previewModalBody = document.getElementById('previewModalBody');
|
||||||
// Replace image URLs with absolute paths for preview
|
const modalElement = document.getElementById('previewModal');
|
||||||
const baseUrl = "<?php echo $base_url; ?>";
|
|
||||||
let processedContent = content.replace(/src="galeria\//g, 'src="' + baseUrl + 'galeria/');
|
// Simple cleanup - ensure all image URLs are correct
|
||||||
|
let processedContent = content
|
||||||
|
.replace(/src="[^"]*galeria\/([^"]+)"/g, 'src="/galeria/$1"')
|
||||||
|
.replace(/src='[^']*galeria\/([^']+)'/g, "src='/galeria/$1'");
|
||||||
|
|
||||||
|
// Add proper styling to images
|
||||||
|
processedContent = processedContent.replace(/<img([^>]*)>/g, '<img$1 style="max-width: 100%; height: auto; border-radius: 8px; margin: 10px 0;">');
|
||||||
|
|
||||||
previewModalBody.innerHTML = processedContent;
|
previewModalBody.innerHTML = processedContent;
|
||||||
var myModal = new bootstrap.Modal(document.getElementById('previewModal'));
|
|
||||||
|
const myModal = new bootstrap.Modal(modalElement);
|
||||||
myModal.show();
|
myModal.show();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ require_once __DIR__ . '/templates/header.php';
|
|||||||
?>
|
?>
|
||||||
<div class="col-lg-3 col-md-4 col-sm-6 mb-4">
|
<div class="col-lg-3 col-md-4 col-sm-6 mb-4">
|
||||||
<div class="card h-100">
|
<div class="card h-100">
|
||||||
<img src="galeria/<?php echo htmlspecialchars($file); ?>" class="card-img-top" alt="<?php echo htmlspecialchars($file); ?>" style="height: 200px; object-fit: cover;">
|
<img src="<?php echo site_url('galeria/' . $file); ?>" class="card-img-top" alt="<?php echo htmlspecialchars($file); ?>" style="height: 200px; object-fit: cover;">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<p class="card-text small text-truncate" title="<?php echo htmlspecialchars($file); ?>"><?php echo htmlspecialchars($file); ?></p>
|
<p class="card-text small text-truncate" title="<?php echo htmlspecialchars($file); ?>"><?php echo htmlspecialchars($file); ?></p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ class DatabaseConnection {
|
|||||||
|
|
||||||
private function __construct() {
|
private function __construct() {
|
||||||
$this->config = [
|
$this->config = [
|
||||||
'host' => $_ENV['DB_HOST'] ?? 'localhost',
|
'host' => DB_HOST,
|
||||||
'port' => $_ENV['DB_PORT'] ?? '3306',
|
'port' => DB_PORT,
|
||||||
'name' => $_ENV['DB_NAME'] ?? 'bot',
|
'name' => DB_NAME,
|
||||||
'user' => $_ENV['DB_USER'] ?? 'nickpons666',
|
'user' => DB_USER,
|
||||||
'pass' => $_ENV['DB_PASS'] ?? 'MiPo6425@@',
|
'pass' => DB_PASS,
|
||||||
'charset' => 'utf8mb4',
|
'charset' => 'utf8mb4',
|
||||||
'timeout' => 30, // Tiempo de espera de conexión en segundos
|
'timeout' => 30, // Tiempo de espera de conexión en segundos
|
||||||
'reconnect_attempts' => 3, // Número de intentos de reconexión
|
'reconnect_attempts' => 3, // Número de intentos de reconexión
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 44) already running
|
|
||||||
httpd (pid 46) already running
|
|
||||||
httpd (pid 46) already running
|
|
||||||
httpd (pid 46) already running
|
|
||||||
httpd (pid 45) already running
|
|
||||||
httpd (pid 45) already running
|
|
||||||
httpd (pid 45) already running
|
|
||||||
227169
logs/discord_bot.log
227169
logs/discord_bot.log
File diff suppressed because it is too large
Load Diff
@@ -1,460 +0,0 @@
|
|||||||
[2025-11-27 21:14:56] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-27 21:14:56] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:14:58] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-27 21:14:58] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:14:58] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Hi","source":"en","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:15:00] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Hola"}
|
|
||||||
|
|
||||||
[2025-11-27 21:21:06] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-27 21:21:06] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:21:09] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-27 21:21:09] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:21:09] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Hi","source":"en","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:21:09] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Hola"}
|
|
||||||
|
|
||||||
[2025-11-27 21:21:09] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducci\u00f3n a","source":"es","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:21:09] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Traducción a"}
|
|
||||||
|
|
||||||
[2025-11-27 21:21:09] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducido de en \u2022 Solo t\u00fa puedes ver esto","source":"es","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:21:09] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Traducido de en • Solo tú puedes ver esto"}
|
|
||||||
|
|
||||||
[2025-11-27 21:21:23] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-27 21:21:23] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:21:25] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-27 21:21:25] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:21:25] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Hola","source":"es","target":"en","format":"text"}
|
|
||||||
[2025-11-27 21:21:25] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Hi"}
|
|
||||||
|
|
||||||
[2025-11-27 21:21:25] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducci\u00f3n a","source":"es","target":"en","format":"text"}
|
|
||||||
[2025-11-27 21:21:26] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Translation to"}
|
|
||||||
|
|
||||||
[2025-11-27 21:21:26] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducido de es \u2022 Solo t\u00fa puedes ver esto","source":"es","target":"en","format":"text"}
|
|
||||||
[2025-11-27 21:21:26] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Translated from is • Only you can see this"}
|
|
||||||
|
|
||||||
[2025-11-27 21:23:47] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-27 21:23:47] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:23:50] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-27 21:23:50] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:23:50] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Hola","source":"es","target":"en","format":"text"}
|
|
||||||
[2025-11-27 21:23:50] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Hi"}
|
|
||||||
|
|
||||||
[2025-11-27 21:23:50] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducci\u00f3n a","source":"es","target":"en","format":"text"}
|
|
||||||
[2025-11-27 21:23:50] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Translation to"}
|
|
||||||
|
|
||||||
[2025-11-27 21:23:50] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducido de","source":"es","target":"en","format":"text"}
|
|
||||||
[2025-11-27 21:23:50] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Translated"}
|
|
||||||
|
|
||||||
[2025-11-27 21:24:51] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-27 21:24:51] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:24:51] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"\u26a0\ufe0f El mensaje ya est\u00e1 en tu idioma.","source":"es","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:24:51] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"⚠️ El mensaje ya está en tu idioma."}
|
|
||||||
|
|
||||||
[2025-11-27 21:31:20] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-27 21:31:20] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:31:23] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-27 21:31:23] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:31:23] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Hi","source":"en","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:31:23] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Hola"}
|
|
||||||
|
|
||||||
[2025-11-27 21:31:23] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducci\u00f3n a","source":"es","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:31:23] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Traducción a"}
|
|
||||||
|
|
||||||
[2025-11-27 21:31:23] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducido de","source":"es","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:31:23] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Traducido de"}
|
|
||||||
|
|
||||||
[2025-11-27 21:31:32] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-27 21:31:32] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:31:32] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Hi","source":"en","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:31:32] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Hola"}
|
|
||||||
|
|
||||||
[2025-11-27 21:31:32] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducci\u00f3n a","source":"es","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:31:32] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Traducción a"}
|
|
||||||
|
|
||||||
[2025-11-27 21:31:32] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducido de","source":"es","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:31:32] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Traducido de"}
|
|
||||||
|
|
||||||
[2025-11-27 21:31:36] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-27 21:31:36] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:31:36] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"\u26a0\ufe0f El mensaje ya est\u00e1 en tu idioma.","source":"es","target":"en","format":"text"}
|
|
||||||
[2025-11-27 21:31:37] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"♪ The message is already in your language."}
|
|
||||||
|
|
||||||
[2025-11-27 21:49:09] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-27 21:49:09] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:49:22] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-27 21:49:22] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:49:22] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"\u26a0\ufe0f El mensaje ya est\u00e1 en tu idioma.","source":"es","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:49:22] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"⚠️ El mensaje ya está en tu idioma."}
|
|
||||||
|
|
||||||
[2025-11-27 21:49:27] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-27 21:49:27] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:49:29] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-27 21:49:29] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-27 21:49:29] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Hi","source":"en","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:49:29] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Hola"}
|
|
||||||
|
|
||||||
[2025-11-27 21:49:29] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducci\u00f3n a","source":"es","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:49:29] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Traducción a"}
|
|
||||||
|
|
||||||
[2025-11-27 21:49:29] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducido de","source":"es","target":"es","format":"text"}
|
|
||||||
[2025-11-27 21:49:29] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Traducido de"}
|
|
||||||
|
|
||||||
[2025-11-30 17:36:52] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 17:36:52] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 17:37:06] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 17:37:06] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 17:38:45] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 17:38:45] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 17:38:53] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 17:38:53] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 17:41:35] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 17:41:35] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:04:56] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:04:56] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:05:13] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 20:05:13] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:07:40] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 20:07:40] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:08:20] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 20:08:20] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:08:56] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:08:56] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:10:29] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:10:29] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:11:40] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:11:40] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:15:00] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:15:00] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:15:56] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:15:56] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:16:56] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:16:56] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:17:30] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 20:17:30] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:18:50] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:18:50] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:19:00] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 20:19:00] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:19:15] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 20:19:15] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:28:34] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:28:34] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:29:34] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:29:34] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:31:43] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:31:44] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:34:09] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:34:09] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:38:28] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:38:28] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:42:00] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:42:00] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:42:41] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:42:41] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:44:03] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:44:03] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:44:51] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:44:51] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:45:52] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 20:45:52] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 20:49:20] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 20:49:20] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 21:10:27] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 21:10:27] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 21:21:03] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 21:21:03] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 21:22:13] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 21:22:13] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:02:40] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:02:40] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:08:39] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:08:39] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:10:22] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:10:22] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:13:45] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:13:45] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:18:58] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:18:58] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:20:19] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:20:19] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:20:25] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 22:20:25] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:22:13] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:22:13] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:23:38] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:23:38] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:26:10] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:26:10] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:28:35] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:28:35] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:31:04] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:31:04] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:35:52] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:35:52] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:37:48] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:37:48] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:39:32] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:39:32] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:47:31] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:47:31] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:49:12] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:49:12] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:54:12] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:54:12] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:54:39] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:54:39] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:55:21] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-11-30 22:55:21] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:56:39] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hols"}
|
|
||||||
[2025-11-30 22:56:39] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":0.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:56:45] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 22:56:45] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:58:36] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 22:58:36] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:58:40] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-30 22:58:40] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-30 22:58:40] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Hola","source":"es","target":"en","format":"text"}
|
|
||||||
[2025-11-30 22:58:40] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Hi"}
|
|
||||||
|
|
||||||
[2025-11-30 22:58:40] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducci\u00f3n a","source":"es","target":"en","format":"text"}
|
|
||||||
[2025-11-30 22:58:40] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Translation to"}
|
|
||||||
|
|
||||||
[2025-11-30 22:58:40] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"Traducido de","source":"es","target":"en","format":"text"}
|
|
||||||
[2025-11-30 22:58:40] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"Translated"}
|
|
||||||
|
|
||||||
[2025-12-01 01:34:29] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-12-01 01:34:29] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-12-03 21:39:58] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-12-03 21:40:06] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-12-03 21:46:22] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-12-03 21:46:22] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-12-03 21:47:02] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-12-03 21:47:02] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-12-03 21:49:03] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-12-03 21:49:03] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-12-03 21:52:18] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-12-03 21:52:18] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-12-03 21:57:36] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hi"}
|
|
||||||
[2025-12-03 21:57:36] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":30.0,"language":"en"}]
|
|
||||||
|
|
||||||
[2025-12-04 20:39:33] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-12-04 20:39:33] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-12-04 20:39:37] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-12-04 20:39:37] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-12-04 20:39:37] LibreTranslate POST Request: URL=http://10.10.4.17:5000/translate | Data={"q":"\u26a0\ufe0f El mensaje ya est\u00e1 en tu idioma.","source":"es","target":"es","format":"text"}
|
|
||||||
[2025-12-04 20:39:37] LibreTranslate Response: HTTP Code=200 | Body={"translatedText":"⚠️ El mensaje ya está en tu idioma."}
|
|
||||||
|
|
||||||
Intento de conexión 1 fallido: SQLSTATE[HY000] [2002] Network is unreachable. Reintentando en 1 segundos...
|
|
||||||
Intento de conexión 2 fallido: SQLSTATE[HY000] [2002] Network is unreachable. Reintentando en 1 segundos...
|
|
||||||
Intento de conexión 3 fallido: SQLSTATE[HY000] [2002] Network is unreachable. Reintentando en 1 segundos...
|
|
||||||
No se pudo establecer la conexión después de 3 intentos.
|
|
||||||
Error crítico de conexión a la base de datos: SQLSTATE[HY000] [2002] Network is unreachable
|
|
||||||
PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Network is unreachable in /var/www/html/bot/includes/db.php:74
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/includes/db.php(74): PDO->__construct()
|
|
||||||
#1 /var/www/html/bot/includes/db.php(28): DatabaseConnection->connect()
|
|
||||||
#2 /var/www/html/bot/includes/db.php(33): DatabaseConnection->__construct()
|
|
||||||
#3 /var/www/html/bot/includes/db.php(113): DatabaseConnection::getInstance()
|
|
||||||
#4 /var/www/html/bot/discord_bot.php(7): require_once('...')
|
|
||||||
#5 {main}
|
|
||||||
thrown in /var/www/html/bot/includes/db.php on line 74
|
|
||||||
Intento de conexión 1 fallido: SQLSTATE[HY000] [2002] Network is unreachable. Reintentando en 1 segundos...
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/var/www/html/bot/logs/discord_bot.log" could not be opened in append mode: Failed to open stream: Permission denied
|
|
||||||
The exception occurred while attempting to log: Iniciando bot de Discord... in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:156
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(44): Monolog\Handler\StreamHandler->write()
|
|
||||||
#1 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(391): Monolog\Handler\AbstractProcessingHandler->handle()
|
|
||||||
#2 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(607): Monolog\Logger->addRecord()
|
|
||||||
#3 /var/www/html/bot/discord_bot.php(31): Monolog\Logger->info()
|
|
||||||
#4 {main}
|
|
||||||
thrown in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 156
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/var/www/html/bot/logs/discord_bot.log" could not be opened in append mode: Failed to open stream: Permission denied
|
|
||||||
The exception occurred while attempting to log: Iniciando bot de Discord... in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:156
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(44): Monolog\Handler\StreamHandler->write()
|
|
||||||
#1 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(391): Monolog\Handler\AbstractProcessingHandler->handle()
|
|
||||||
#2 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(607): Monolog\Logger->addRecord()
|
|
||||||
#3 /var/www/html/bot/discord_bot.php(31): Monolog\Logger->info()
|
|
||||||
#4 {main}
|
|
||||||
thrown in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 156
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/var/www/html/bot/logs/discord_bot.log" could not be opened in append mode: Failed to open stream: Permission denied
|
|
||||||
The exception occurred while attempting to log: Iniciando bot de Discord... in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:156
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(44): Monolog\Handler\StreamHandler->write()
|
|
||||||
#1 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(391): Monolog\Handler\AbstractProcessingHandler->handle()
|
|
||||||
#2 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(607): Monolog\Logger->addRecord()
|
|
||||||
#3 /var/www/html/bot/discord_bot.php(31): Monolog\Logger->info()
|
|
||||||
#4 {main}
|
|
||||||
thrown in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 156
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/var/www/html/bot/logs/discord_bot.log" could not be opened in append mode: Failed to open stream: Permission denied
|
|
||||||
The exception occurred while attempting to log: Iniciando bot de Discord... in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:156
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(44): Monolog\Handler\StreamHandler->write()
|
|
||||||
#1 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(391): Monolog\Handler\AbstractProcessingHandler->handle()
|
|
||||||
#2 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(607): Monolog\Logger->addRecord()
|
|
||||||
#3 /var/www/html/bot/discord_bot.php(31): Monolog\Logger->info()
|
|
||||||
#4 {main}
|
|
||||||
thrown in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 156
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/var/www/html/bot/logs/discord_bot.log" could not be opened in append mode: Failed to open stream: Permission denied
|
|
||||||
The exception occurred while attempting to log: Iniciando bot de Discord... in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:156
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(44): Monolog\Handler\StreamHandler->write()
|
|
||||||
#1 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(391): Monolog\Handler\AbstractProcessingHandler->handle()
|
|
||||||
#2 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(607): Monolog\Logger->addRecord()
|
|
||||||
#3 /var/www/html/bot/discord_bot.php(31): Monolog\Logger->info()
|
|
||||||
#4 {main}
|
|
||||||
thrown in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 156
|
|
||||||
Intento de conexión 1 fallido: SQLSTATE[HY000] [2002] Network is unreachable. Reintentando en 1 segundos...
|
|
||||||
Intento de conexión 2 fallido: SQLSTATE[HY000] [2002] Network is unreachable. Reintentando en 1 segundos...
|
|
||||||
Intento de conexión 3 fallido: SQLSTATE[HY000] [2002] Network is unreachable. Reintentando en 1 segundos...
|
|
||||||
No se pudo establecer la conexión después de 3 intentos.
|
|
||||||
Error crítico de conexión a la base de datos: SQLSTATE[HY000] [2002] Network is unreachable
|
|
||||||
PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Network is unreachable in /var/www/html/bot/includes/db.php:74
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/includes/db.php(74): PDO->__construct()
|
|
||||||
#1 /var/www/html/bot/includes/db.php(28): DatabaseConnection->connect()
|
|
||||||
#2 /var/www/html/bot/includes/db.php(33): DatabaseConnection->__construct()
|
|
||||||
#3 /var/www/html/bot/includes/db.php(113): DatabaseConnection::getInstance()
|
|
||||||
#4 /var/www/html/bot/discord_bot.php(7): require_once('...')
|
|
||||||
#5 {main}
|
|
||||||
thrown in /var/www/html/bot/includes/db.php on line 74
|
|
||||||
Intento de conexión 1 fallido: SQLSTATE[HY000] [2002] Network is unreachable. Reintentando en 1 segundos...
|
|
||||||
Intento de conexión 2 fallido: SQLSTATE[HY000] [2002] Network is unreachable. Reintentando en 1 segundos...
|
|
||||||
Intento de conexión 3 fallido: SQLSTATE[HY000] [2002] Network is unreachable. Reintentando en 1 segundos...
|
|
||||||
No se pudo establecer la conexión después de 3 intentos.
|
|
||||||
Error crítico de conexión a la base de datos: SQLSTATE[HY000] [2002] Network is unreachable
|
|
||||||
PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Network is unreachable in /var/www/html/bot/includes/db.php:74
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/includes/db.php(74): PDO->__construct()
|
|
||||||
#1 /var/www/html/bot/includes/db.php(28): DatabaseConnection->connect()
|
|
||||||
#2 /var/www/html/bot/includes/db.php(33): DatabaseConnection->__construct()
|
|
||||||
#3 /var/www/html/bot/includes/db.php(113): DatabaseConnection::getInstance()
|
|
||||||
#4 /var/www/html/bot/discord_bot.php(7): require_once('...')
|
|
||||||
#5 {main}
|
|
||||||
thrown in /var/www/html/bot/includes/db.php on line 74
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/var/www/html/bot/logs/discord_bot.log" could not be opened in append mode: Failed to open stream: Permission denied
|
|
||||||
The exception occurred while attempting to log: Iniciando bot de Discord... in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:156
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(44): Monolog\Handler\StreamHandler->write()
|
|
||||||
#1 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(391): Monolog\Handler\AbstractProcessingHandler->handle()
|
|
||||||
#2 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(607): Monolog\Logger->addRecord()
|
|
||||||
#3 /var/www/html/bot/discord_bot.php(31): Monolog\Logger->info()
|
|
||||||
#4 {main}
|
|
||||||
thrown in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 156
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/var/www/html/bot/logs/discord_bot.log" could not be opened in append mode: Failed to open stream: Permission denied
|
|
||||||
The exception occurred while attempting to log: Iniciando bot de Discord... in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:156
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(44): Monolog\Handler\StreamHandler->write()
|
|
||||||
#1 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(391): Monolog\Handler\AbstractProcessingHandler->handle()
|
|
||||||
#2 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(607): Monolog\Logger->addRecord()
|
|
||||||
#3 /var/www/html/bot/discord_bot.php(31): Monolog\Logger->info()
|
|
||||||
#4 {main}
|
|
||||||
thrown in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 156
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/var/www/html/bot/logs/discord_bot.log" could not be opened in append mode: Failed to open stream: Permission denied
|
|
||||||
The exception occurred while attempting to log: Iniciando bot de Discord... in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:156
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(44): Monolog\Handler\StreamHandler->write()
|
|
||||||
#1 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(391): Monolog\Handler\AbstractProcessingHandler->handle()
|
|
||||||
#2 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(607): Monolog\Logger->addRecord()
|
|
||||||
#3 /var/www/html/bot/discord_bot.php(31): Monolog\Logger->info()
|
|
||||||
#4 {main}
|
|
||||||
thrown in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 156
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/var/www/html/bot/logs/discord_bot.log" could not be opened in append mode: Failed to open stream: Permission denied
|
|
||||||
The exception occurred while attempting to log: Iniciando bot de Discord... in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:156
|
|
||||||
Stack trace:
|
|
||||||
#0 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(44): Monolog\Handler\StreamHandler->write()
|
|
||||||
#1 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(391): Monolog\Handler\AbstractProcessingHandler->handle()
|
|
||||||
#2 /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Logger.php(607): Monolog\Logger->addRecord()
|
|
||||||
#3 /var/www/html/bot/discord_bot.php(31): Monolog\Logger->info()
|
|
||||||
#4 {main}
|
|
||||||
thrown in /var/www/html/bot/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 156
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
Could not open input file: /var/www/html/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord_bot.php
|
|
||||||
[2025-11-27 20:36:09] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-27 20:36:09] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
[2025-11-27 20:36:16] LibreTranslate POST Request: URL=http://10.10.4.17:5000/detect | Data={"q":"Hola"}
|
|
||||||
[2025-11-27 20:36:16] LibreTranslate Response: HTTP Code=200 | Body=[{"confidence":90.0,"language":"es"}]
|
|
||||||
|
|
||||||
Could not open input file: /var/www/html/bot/discord/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord/bot/discord_bot.php
|
|
||||||
Could not open input file: /var/www/html/bot/discord/bot/discord_bot.php
|
|
||||||
111531
logs/php_errors.log
111531
logs/php_errors.log
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,12 +0,0 @@
|
|||||||
[Thu Nov 27 16:50:16.032950 2025] [authz_core:error] [pid 1751] [client 10.10.4.17:33114] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Thu Nov 27 21:43:30.230741 2025] [authz_core:error] [pid 1752] [client 10.10.4.17:46032] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Thu Nov 27 21:43:30.629449 2025] [authz_core:error] [pid 1749] [client 10.10.4.17:46044] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Thu Nov 27 21:43:31.855952 2025] [authz_core:error] [pid 7533] [client 10.10.4.17:46070] AH01630: client denied by server configuration: /var/www/html/bot/admin/.env
|
|
||||||
[Thu Nov 27 21:43:32.789275 2025] [authz_core:error] [pid 1749] [client 10.10.4.17:46116] AH01630: client denied by server configuration: /var/www/html/bot/.env.bak
|
|
||||||
[Thu Nov 27 21:43:33.165755 2025] [authz_core:error] [pid 1751] [client 10.10.4.17:46122] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Thu Nov 27 21:43:33.965875 2025] [authz_core:error] [pid 1753] [client 10.10.4.17:46146] AH01630: client denied by server configuration: /var/www/html/bot/.gitlab-ci.yml
|
|
||||||
[Wed Jan 14 20:48:15.171821 2026] [authz_core:error] [pid 66895] [client 10.10.4.17:54898] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Fri Jan 16 00:50:52.850797 2026] [authz_core:error] [pid 289078] [client 10.10.4.17:56304] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Fri Jan 16 02:28:11.637455 2026] [authz_core:error] [pid 289082] [client 10.10.4.17:46890] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Fri Jan 16 20:22:11.346557 2026] [authz_core:error] [pid 1682] [client 10.10.4.17:43740] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Fri Jan 16 20:22:11.346751 2026] [authz_core:error] [pid 187674] [client 10.10.4.17:43750] AH01630: client denied by server configuration: /var/www/html/bot/.aws
|
|
||||||
@@ -1,682 +0,0 @@
|
|||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:05:01
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
Buscando mensajes pendientes a las: 2025-11-26 03:05:00 (Timezone: America/Mexico_City)
|
|
||||||
No hay mensajes pendientes para procesar
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:06:01
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
Buscando mensajes pendientes a las: 2025-11-26 03:06:00 (Timezone: America/Mexico_City)
|
|
||||||
No hay mensajes pendientes para procesar
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:07:01
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
Buscando mensajes pendientes a las: 2025-11-26 03:07:00 (Timezone: America/Mexico_City)
|
|
||||||
No hay mensajes pendientes para procesar
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:08:01
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
Buscando mensajes pendientes a las: 2025-11-26 03:08:00 (Timezone: America/Mexico_City)
|
|
||||||
No hay mensajes pendientes para procesar
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:09:01
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
Buscando mensajes pendientes a las: 2025-11-26 03:09:00 (Timezone: America/Mexico_City)
|
|
||||||
No hay mensajes pendientes para procesar
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:10:01
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
Buscando mensajes pendientes a las: 2025-11-26 03:10:00 (Timezone: America/Mexico_City)
|
|
||||||
No hay mensajes pendientes para procesar
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:11:01
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
Buscando mensajes pendientes a las: 2025-11-26 03:11:00 (Timezone: America/Mexico_City)
|
|
||||||
No hay mensajes pendientes para procesar
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:12:01
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
Buscando mensajes pendientes a las: 2025-11-26 03:12:00 (Timezone: America/Mexico_City)
|
|
||||||
No hay mensajes pendientes para procesar
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:13:01
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
Buscando mensajes pendientes a las: 2025-11-26 03:13:00 (Timezone: America/Mexico_City)
|
|
||||||
No hay mensajes pendientes para procesar
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:14:01
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
Buscando mensajes pendientes a las: 2025-11-26 03:14:00 (Timezone: America/Mexico_City)
|
|
||||||
No hay mensajes pendientes para procesar
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:15:01
|
|
||||||
Conexión a la base de datos establecida correctamente.
|
|
||||||
Buscando mensajes pendientes a las: 2025-11-26 03:15:00 (Timezone: America/Mexico_City)
|
|
||||||
No hay mensajes pendientes para procesar
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:16:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:17:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:18:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:19:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:20:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:21:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:22:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:23:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:24:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:25:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:26:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:27:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:28:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:29:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:30:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:31:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:32:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:33:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:34:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:35:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:36:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:38:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 09:43:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 19:56:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 19:57:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 19:58:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 19:59:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:00:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:01:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:02:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:03:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:04:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:05:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:06:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:07:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:08:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:09:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:10:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:11:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:12:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:13:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:14:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:15:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:16:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:17:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:18:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:19:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:20:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:21:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:22:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:23:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:24:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:25:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:26:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:27:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:28:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:29:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:30:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:31:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:32:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:33:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:34:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:35:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:36:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:38:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:43:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:44:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:45:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:46:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:47:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:48:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:49:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:50:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:51:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:52:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:53:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:54:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:55:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:56:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:57:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:58:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 20:59:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:00:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:01:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:02:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:03:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:04:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:05:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:06:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:07:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:08:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:09:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:10:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:11:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:12:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:13:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:14:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:15:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:16:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:17:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:18:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:19:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:20:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:21:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:22:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:23:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:24:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:25:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:26:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:27:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:28:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:29:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:30:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:31:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:32:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:33:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:34:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:35:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:36:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:38:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:43:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:44:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:45:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:46:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:47:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:48:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:49:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:50:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:51:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:52:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:53:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:54:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:55:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:56:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:57:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:58:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 21:59:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:00:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:01:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:02:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:03:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:04:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:05:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:06:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:07:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:08:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:09:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:10:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:11:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:12:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:13:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:14:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:15:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:16:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:17:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:18:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:19:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:20:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:21:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:22:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:23:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:24:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:25:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:26:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:27:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:28:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:29:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:30:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:31:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:32:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:33:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:34:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:35:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:36:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:38:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-26 22:43:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:35:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:36:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:38:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:43:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:44:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:45:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:46:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:47:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:48:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:49:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:50:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:51:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:52:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:53:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:54:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:55:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:56:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:57:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:58:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 00:59:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:00:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:01:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:02:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:03:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:04:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:05:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:06:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:07:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:08:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:09:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:10:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:11:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:12:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:13:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:14:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:15:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:16:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:17:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:18:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:19:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:20:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:21:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:22:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:23:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:24:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:25:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:26:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:27:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:28:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:29:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:30:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:31:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:32:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:33:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:34:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:35:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:36:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:38:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:43:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:44:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:45:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:46:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:47:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:48:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:49:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:50:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:51:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:52:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:53:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:54:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:55:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:56:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:57:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:58:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 01:59:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:00:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:01:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:02:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:03:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:04:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:05:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:06:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:07:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:08:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:09:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:10:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:11:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:12:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:13:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:14:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:15:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:16:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:17:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:18:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:19:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:20:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:21:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:22:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:23:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:24:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:25:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:26:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:27:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:28:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:29:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:30:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:31:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:32:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:33:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:34:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:35:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:36:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:38:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:43:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:44:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:45:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:46:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:47:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:48:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:49:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:50:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:51:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:52:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:53:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:54:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:55:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:56:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:57:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:58:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 02:59:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:00:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:01:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:02:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:03:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:04:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:05:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:06:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:07:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:08:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:09:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:10:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:11:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:12:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:13:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:14:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:15:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:16:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:17:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:18:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:19:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:20:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:21:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:22:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:23:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:24:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:25:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:26:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:27:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:28:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:29:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:30:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:31:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:32:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:33:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:34:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:35:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:36:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:38:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:43:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:44:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:45:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:46:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:47:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:48:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:49:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:50:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:51:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:52:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:53:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:54:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:55:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:56:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:57:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:58:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 03:59:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:00:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:01:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:02:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:03:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:04:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:05:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:06:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:07:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:08:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:09:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:10:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:11:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:12:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:13:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:14:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:15:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:16:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:17:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:18:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:19:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:20:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:21:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:22:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:23:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:24:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:25:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:26:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:27:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:28:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:29:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:30:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:31:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:32:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:33:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:34:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:35:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:36:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:38:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:43:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:44:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:45:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:46:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:47:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:48:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:49:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:50:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:51:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:52:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:53:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:54:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:55:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:56:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:57:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:58:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 04:59:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:00:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:01:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:02:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:03:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:04:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:05:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:06:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:07:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:08:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:09:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:10:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:11:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:12:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:13:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:14:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:15:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:16:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:17:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:18:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:19:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:20:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:21:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:22:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:23:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:24:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:25:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:26:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:27:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:28:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:29:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:30:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:31:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:32:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:33:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:34:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:35:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:36:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:38:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:43:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:44:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:45:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:46:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:47:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:48:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:49:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:50:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:51:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:52:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:53:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:54:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:55:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:56:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:57:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:58:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 05:59:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:00:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:01:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:02:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:03:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:04:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:05:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:06:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:07:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:08:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:09:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:10:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:11:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:12:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:13:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:14:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:15:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:16:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:17:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:18:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:19:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:20:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:21:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:22:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:23:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:24:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:25:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:26:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:27:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:28:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:29:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:30:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:31:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:32:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:33:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:34:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:35:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:36:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:38:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:43:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:44:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:45:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:46:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:47:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:48:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:49:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:50:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:51:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:52:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:53:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:54:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:55:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:56:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:57:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 06:58:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:03:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:04:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:05:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:06:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:07:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:08:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:09:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:10:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:11:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:12:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:13:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:14:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:15:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:16:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:17:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:18:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:19:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:20:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:21:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:22:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:23:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:24:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:25:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:26:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:27:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:28:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:29:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:30:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:31:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:32:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:33:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:34:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:35:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:36:02
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:37:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:38:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:39:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:40:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:41:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:42:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:43:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:44:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:45:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:46:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:47:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:48:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:49:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:50:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:51:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:52:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:53:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:54:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:55:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:56:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:57:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:58:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 21:59:01
|
|
||||||
Iniciando process_queue.php (REFACTORIZADO) - 2025-11-27 22:00:01
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,168 +0,0 @@
|
|||||||
[2025-11-26 09:05:01] {"update_id":466006671,
|
|
||||||
"message":{"message_id":5742,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764147900,"text":"Hola"}}
|
|
||||||
[2025-11-26 09:06:31] {"update_id":466006672,
|
|
||||||
"message":{"message_id":5743,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764147990,"text":"Hola"}}
|
|
||||||
[2025-11-26 09:08:43] {"update_id":466006673,
|
|
||||||
"message":{"message_id":5744,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764148123,"text":"Hola"}}
|
|
||||||
[2025-11-26 09:12:17] {"update_id":466006674,
|
|
||||||
"message":{"message_id":5745,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764148336,"text":"Hola"}}
|
|
||||||
[2025-11-26 09:14:33] {"update_id":466006675,
|
|
||||||
"message":{"message_id":5746,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764148473,"text":"Hola"}}
|
|
||||||
[2025-11-26 09:17:43] {"update_id":466006676,
|
|
||||||
"message":{"message_id":5747,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764148663,"text":"Hola"}}
|
|
||||||
[2025-11-26 09:22:58] {"update_id":466006677,
|
|
||||||
"message":{"message_id":5748,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764148977,"text":"Hola"}}
|
|
||||||
[2025-11-26 09:25:40] {"update_id":466006678,
|
|
||||||
"message":{"message_id":5749,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149139,"text":"Hola"}}
|
|
||||||
[2025-11-26 09:26:11] {"update_id":466006679,
|
|
||||||
"message":{"message_id":5750,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149171,"text":"Hola"}}
|
|
||||||
[2025-11-26 09:26:37] {"update_id":466006680,
|
|
||||||
"message":{"message_id":5751,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149197,"text":"Hola"}}
|
|
||||||
[2025-11-26 09:28:51] {"update_id":466006681,
|
|
||||||
"message":{"message_id":5770,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149330,"text":"Hola como est\u00e1n?"}}
|
|
||||||
[2025-11-26 09:29:20] {"update_id":466006682,
|
|
||||||
"message":{"message_id":5772,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149359,"text":"/agente","entities":[{"offset":0,"length":7,"type":"bot_command"}]}}
|
|
||||||
[2025-11-26 09:29:22] {"update_id":466006683,
|
|
||||||
"callback_query":{"id":"24555436725117767","from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"message":{"message_id":5773,"from":{"id":8469229183,"is_bot":true,"first_name":"REOD","username":"NoticiasCAOSBot"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149360,"text":"\ud83d\udc4b Hola! \u00bfC\u00f3mo quieres interactuar?","reply_markup":{"inline_keyboard":[[{"text":"\ud83e\udd16 Platicar con bot","callback_data":"platicar_bot"},{"text":"\ud83e\udde0 Usar IA","callback_data":"usar_ia"}]]}},"chat_instance":"-6219953176930160984","data":"usar_ia"}}
|
|
||||||
[2025-11-26 09:29:32] {"update_id":466006684,
|
|
||||||
"message":{"message_id":5774,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149372,"text":"Me puedes explicar de que es el juego?"}}
|
|
||||||
[2025-11-26 09:31:48] {"update_id":466006685,
|
|
||||||
"message":{"message_id":5777,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149508,"text":"Que me puedes decir sobre el Asedio Zombie"}}
|
|
||||||
[2025-11-26 09:34:01] {"update_id":466006686,
|
|
||||||
"message":{"message_id":5781,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149640,"text":"Y sobre el evento de alianza qu\u00e9 me puedes platicar?"}}
|
|
||||||
[2025-11-26 09:38:01] {"update_id":466006687,
|
|
||||||
"message":{"message_id":5783,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149880,"text":"/agente","entities":[{"offset":0,"length":7,"type":"bot_command"}]}}
|
|
||||||
[2025-11-26 09:38:03] {"update_id":466006688,
|
|
||||||
"callback_query":{"id":"24555439868931859","from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"message":{"message_id":5784,"from":{"id":8469229183,"is_bot":true,"first_name":"REOD","username":"NoticiasCAOSBot"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149881,"text":"\ud83d\udc4b Hola! \u00bfC\u00f3mo quieres interactuar?","reply_markup":{"inline_keyboard":[[{"text":"\ud83e\udd16 Platicar con bot","callback_data":"platicar_bot"},{"text":"\ud83e\udde0 Usar IA","callback_data":"usar_ia"}]]}},"chat_instance":"-6219953176930160984","data":"platicar_bot"}}
|
|
||||||
[2025-11-26 09:38:09] {"update_id":466006689,
|
|
||||||
"message":{"message_id":5785,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149889,"text":"Como estas?"}}
|
|
||||||
[2025-11-26 09:38:29] {"update_id":466006690,
|
|
||||||
"message":{"message_id":5787,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764149909,"text":"Hola"}}
|
|
||||||
[2025-11-28 18:43:36] {"update_id":466006719,
|
|
||||||
"message":{"message_id":299,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD-B2K","is_forum":true,"type":"supergroup"},"date":1764355346,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD-B2K","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Hola a todos, hoy tenemos gusano (Marsahll) a las 6pm M\u00e9xico / 9pm Brasil / 10pm Servidor, esperando poder contar con su ayuda.","is_topic_message":true}}
|
|
||||||
[2025-11-28 23:55:23] {"update_id":466006720,
|
|
||||||
"message":{"message_id":301,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD-B2K","is_forum":true,"type":"supergroup"},"date":1764374122,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD-B2K","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Se activo el Marshall porque otra vez esta mal el tiempo","is_topic_message":true}}
|
|
||||||
[2025-11-29 21:18:54] {"update_id":466006724,
|
|
||||||
"message":{"message_id":5809,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764451134,"text":"Hola"}}
|
|
||||||
[2025-11-29 21:23:52] {"update_id":466006725,
|
|
||||||
"message":{"message_id":303,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD-B2K","is_forum":true,"type":"supergroup"},"date":1764451432,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD-B2K","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Hola a todos, si son observadores en el juego ya no soy R4, por lo que ya no sabr\u00e9 los horarios ni noticias sobre la alianza, as\u00ed que les avisare solo lo que publiquen para todos","is_topic_message":true}}
|
|
||||||
[2025-11-30 00:08:50] {"update_id":466006726,
|
|
||||||
"message":{"message_id":305,"from":{"id":1254588631,"is_bot":false,"first_name":"Marta","last_name":"Belarmino","language_code":"pt-br"},"chat":{"id":-1002810727871,"title":"REOD-B2K","is_forum":true,"type":"supergroup"},"date":1764461330,"text":"Quem vai voltar para REOD aproveite o teletransportador do vs para ir para o ponto de encontro que Alex enviou no chat"}}
|
|
||||||
[2025-11-30 01:47:45] {"update_id":466006727,
|
|
||||||
"message":{"message_id":307,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764467265,"new_chat_title":"REOD"}}
|
|
||||||
[2025-11-30 01:58:06] {"update_id":466006728,
|
|
||||||
"message":{"message_id":308,"from":{"id":1971997473,"is_bot":false,"first_name":"D","last_name":"K","username":"DanK3126","language_code":"en"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764467886,"text":"Gusano en dois minutos?"}}
|
|
||||||
[2025-11-30 04:21:10] {"update_id":466006729,
|
|
||||||
"message":{"message_id":310,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764476470,"text":"Hola a todos, alguien se va a quedar en B2K?"}}
|
|
||||||
[2025-11-30 04:48:22] {"update_id":466006730,
|
|
||||||
"message":{"message_id":4284,"from":{"id":1254588631,"is_bot":false,"first_name":"Marta","last_name":"Belarmino","language_code":"pt-br"},"chat":{"id":-1002549857229,"title":"R4s/R5 REOD","type":"supergroup"},"date":1764478102,"photo":[{"file_id":"AgACAgEAAyEFAASX-7vNAAIQvGkrzJaaYWhKo1yoYVUJsBJ0tzdOAAJpC2sbDTRgRTmouiZi9wnhAQADAgADcwADNgQ","file_unique_id":"AQADaQtrGw00YEV4","file_size":1203,"width":42,"height":90},{"file_id":"AgACAgEAAyEFAASX-7vNAAIQvGkrzJaaYWhKo1yoYVUJsBJ0tzdOAAJpC2sbDTRgRTmouiZi9wnhAQADAgADbQADNgQ","file_unique_id":"AQADaQtrGw00YEVy","file_size":14787,"width":148,"height":320},{"file_id":"AgACAgEAAyEFAASX-7vNAAIQvGkrzJaaYWhKo1yoYVUJsBJ0tzdOAAJpC2sbDTRgRTmouiZi9wnhAQADAgADeAADNgQ","file_unique_id":"AQADaQtrGw00YEV9","file_size":55084,"width":369,"height":800},{"file_id":"AgACAgEAAyEFAASX-7vNAAIQvGkrzJaaYWhKo1yoYVUJsBJ0tzdOAAJpC2sbDTRgRTmouiZi9wnhAQADAgADeQADNgQ","file_unique_id":"AQADaQtrGw00YEV-","file_size":73264,"width":590,"height":1280}]}}
|
|
||||||
[2025-11-30 04:48:43] {"update_id":466006731,
|
|
||||||
"message":{"message_id":4285,"from":{"id":1254588631,"is_bot":false,"first_name":"Marta","last_name":"Belarmino","language_code":"pt-br"},"chat":{"id":-1002549857229,"title":"R4s/R5 REOD","type":"supergroup"},"date":1764478123,"text":"Lu\u00eds a chamei Alex pode traduzir o que est\u00e1 na imagem"}}
|
|
||||||
[2025-11-30 09:23:07] {"update_id":466006732,
|
|
||||||
"message":{"message_id":5811,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-4787145544,"title":"Pruebas de grupo","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1764494587,"text":"/agente Qu\u00e9 esperar en la temporada 4?","entities":[{"offset":0,"length":7,"type":"bot_command"}]}}
|
|
||||||
[2025-11-30 14:32:22] {"update_id":466006733,
|
|
||||||
"message":{"message_id":312,"from":{"id":7176119907,"is_bot":false,"first_name":"M\u00f4nica","last_name":"Wildner","language_code":"pt-br"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764513142,"text":"Ol\u00e1!\nEu vou ficar com a Male \ud83e\udd79\nMas eu amo todos voc\u00ea."}}
|
|
||||||
[2025-11-30 15:22:57] {"update_id":466006734,
|
|
||||||
"message":{"message_id":4287,"from":{"id":1254588631,"is_bot":false,"first_name":"Marta","last_name":"Belarmino","language_code":"pt-br"},"chat":{"id":-1002549857229,"title":"R4s/R5 REOD","type":"supergroup"},"date":1764516176,"text":"Sinto muito por tudo, boa sorte a todos."}}
|
|
||||||
[2025-11-30 15:23:08] {"update_id":466006735,
|
|
||||||
"message":{"message_id":4289,"from":{"id":1254588631,"is_bot":false,"first_name":"Marta","last_name":"Belarmino","language_code":"pt-br"},"chat":{"id":-1002549857229,"title":"R4s/R5 REOD","type":"supergroup"},"date":1764516188,"left_chat_participant":{"id":1254588631,"is_bot":false,"first_name":"Marta","last_name":"Belarmino","language_code":"pt-br"},"left_chat_member":{"id":1254588631,"is_bot":false,"first_name":"Marta","last_name":"Belarmino","language_code":"pt-br"}}}
|
|
||||||
[2025-11-30 15:23:25] {"update_id":466006736,
|
|
||||||
"message":{"message_id":314,"from":{"id":1254588631,"is_bot":false,"first_name":"Marta","last_name":"Belarmino","language_code":"pt-br"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764516205,"left_chat_participant":{"id":1254588631,"is_bot":false,"first_name":"Marta","last_name":"Belarmino","language_code":"pt-br"},"left_chat_member":{"id":1254588631,"is_bot":false,"first_name":"Marta","last_name":"Belarmino","language_code":"pt-br"}}}
|
|
||||||
[2025-11-30 15:23:58] {"update_id":466006737,
|
|
||||||
"message":{"message_id":315,"from":{"id":1702768688,"is_bot":false,"first_name":"Matias","username":"xMotha","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764516237,"text":"Yo igual me quedare en b2k con male, moni y mi novia, suerte a todos"}}
|
|
||||||
[2025-11-30 15:24:21] {"update_id":466006738,
|
|
||||||
"message":{"message_id":317,"from":{"id":1702768688,"is_bot":false,"first_name":"Matias","username":"xMotha","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764516261,"left_chat_participant":{"id":1702768688,"is_bot":false,"first_name":"Matias","username":"xMotha","language_code":"es"},"left_chat_member":{"id":1702768688,"is_bot":false,"first_name":"Matias","username":"xMotha","language_code":"es"}}}
|
|
||||||
[2025-11-30 15:52:30] {"update_id":466006739,
|
|
||||||
"message":{"message_id":4290,"from":{"id":1702768688,"is_bot":false,"first_name":"Matias","username":"xMotha","language_code":"es"},"chat":{"id":-1002549857229,"title":"R4s/R5 REOD","type":"supergroup"},"date":1764517950,"text":"Que les vaya bien!"}}
|
|
||||||
[2025-11-30 15:52:38] {"update_id":466006740,
|
|
||||||
"message":{"message_id":4292,"from":{"id":1702768688,"is_bot":false,"first_name":"Matias","username":"xMotha","language_code":"es"},"chat":{"id":-1002549857229,"title":"R4s/R5 REOD","type":"supergroup"},"date":1764517958,"left_chat_participant":{"id":1702768688,"is_bot":false,"first_name":"Matias","username":"xMotha","language_code":"es"},"left_chat_member":{"id":1702768688,"is_bot":false,"first_name":"Matias","username":"xMotha","language_code":"es"}}}
|
|
||||||
[2025-11-30 16:09:22] {"update_id":466006741,
|
|
||||||
"message":{"message_id":318,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764518962,"left_chat_participant":{"id":6641144206,"is_bot":false,"first_name":"Caroline","language_code":"es"},"left_chat_member":{"id":6641144206,"is_bot":false,"first_name":"Caroline","language_code":"es"}}}
|
|
||||||
[2025-11-30 17:13:02] {"update_id":466006742,
|
|
||||||
"message":{"message_id":4293,"from":{"id":8128132563,"is_bot":false,"first_name":"Luis","last_name":"Vega","language_code":"es"},"chat":{"id":-1002549857229,"title":"R4s/R5 REOD","type":"supergroup"},"date":1764522782,"text":"Artemio ya puedes ir a la alianza anterior","entities":[{"offset":0,"length":7,"type":"text_mention","user":{"id":5570136738,"is_bot":false,"first_name":"Artemio","language_code":"es"}}]}}
|
|
||||||
[2025-11-30 19:42:00] {"update_id":466006743,
|
|
||||||
"message":{"message_id":319,"from":{"id":1971997473,"is_bot":false,"first_name":"D","last_name":"K","username":"DanK3126","language_code":"en"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764531720,"text":"No tengo internet en Patagonia. Desculpe en responder tan despacio"}}
|
|
||||||
[2025-11-30 19:42:01] {"update_id":466006744,
|
|
||||||
"message":{"message_id":320,"from":{"id":1971997473,"is_bot":false,"first_name":"D","last_name":"K","username":"DanK3126","language_code":"en"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764531720,"text":"Apenas sale mis mensajes y apenitas abre el juego"}}
|
|
||||||
[2025-11-30 19:43:33] {"update_id":466006745,
|
|
||||||
"message":{"message_id":323,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764531812,"text":"No te preocupes, si vienes a REOD? En cuanto tengas mejor conexi\u00f3n"}}
|
|
||||||
[2025-11-30 19:44:04] {"update_id":466006746,
|
|
||||||
"message":{"message_id":325,"from":{"id":1971997473,"is_bot":false,"first_name":"D","last_name":"K","username":"DanK3126","language_code":"en"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764531844,"text":"Claro"}}
|
|
||||||
[2025-11-30 19:44:19] {"update_id":466006747,
|
|
||||||
"message":{"message_id":326,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764531859,"text":"Perfecto, te esperamos de regreso"}}
|
|
||||||
[2025-11-30 19:44:23] {"update_id":466006748,
|
|
||||||
"message":{"message_id":328,"from":{"id":1971997473,"is_bot":false,"first_name":"D","last_name":"K","username":"DanK3126","language_code":"en"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764531863,"text":"Ya me gaste el internet international"}}
|
|
||||||
[2025-11-30 19:44:34] {"update_id":466006749,
|
|
||||||
"message":{"message_id":330,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764531874,"text":"Jaja"}}
|
|
||||||
[2025-11-30 19:44:37] {"update_id":466006750,
|
|
||||||
"message":{"message_id":331,"from":{"id":1971997473,"is_bot":false,"first_name":"D","last_name":"K","username":"DanK3126","language_code":"en"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764531877,"text":"Cuando empiesa la nueva temporada"}}
|
|
||||||
[2025-11-30 19:45:05] {"update_id":466006751,
|
|
||||||
"message":{"message_id":333,"from":{"id":1971997473,"is_bot":false,"first_name":"D","last_name":"K","username":"DanK3126","language_code":"en"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764531904,"photo":[{"file_id":"AgACAgEAAyEFAASniE2_AAIBTWksnsDFWJKRysTVWpROSx6W_qZKAAILC2sb2wVoRYUjy1i3SNrxAQADAgADcwADNgQ","file_unique_id":"AQADCwtrG9sFaEV4","file_size":1144,"width":90,"height":44},{"file_id":"AgACAgEAAyEFAASniE2_AAIBTWksnsDFWJKRysTVWpROSx6W_qZKAAILC2sb2wVoRYUjy1i3SNrxAQADAgADbQADNgQ","file_unique_id":"AQADCwtrG9sFaEVy","file_size":15842,"width":320,"height":155},{"file_id":"AgACAgEAAyEFAASniE2_AAIBTWksnsDFWJKRysTVWpROSx6W_qZKAAILC2sb2wVoRYUjy1i3SNrxAQADAgADeAADNgQ","file_unique_id":"AQADCwtrG9sFaEV9","file_size":57842,"width":800,"height":387},{"file_id":"AgACAgEAAyEFAASniE2_AAIBTWksnsDFWJKRysTVWpROSx6W_qZKAAILC2sb2wVoRYUjy1i3SNrxAQADAgADeQADNgQ","file_unique_id":"AQADCwtrG9sFaEV-","file_size":57931,"width":965,"height":467}]}}
|
|
||||||
[2025-11-30 19:51:42] {"update_id":466006752,
|
|
||||||
"message":{"message_id":334,"from":{"id":8128132563,"is_bot":false,"first_name":"Luis","last_name":"Vega","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764532302,"new_chat_participant":{"id":8128132563,"is_bot":false,"first_name":"Luis","last_name":"Vega","language_code":"es"},"new_chat_member":{"id":8128132563,"is_bot":false,"first_name":"Luis","last_name":"Vega","language_code":"es"},"new_chat_members":[{"id":8128132563,"is_bot":false,"first_name":"Luis","last_name":"Vega","language_code":"es"}]}}
|
|
||||||
[2025-11-30 19:52:05] {"update_id":466006753,
|
|
||||||
"message":{"message_id":335,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764532325,"text":"Bienvenido Luis"}}
|
|
||||||
[2025-11-30 20:27:48] {"update_id":466006754,
|
|
||||||
"message":{"message_id":337,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"REOD","is_forum":true,"type":"supergroup"},"date":1764534468,"left_chat_participant":{"id":7176119907,"is_bot":false,"first_name":"M\u00f4nica","last_name":"Wildner","language_code":"pt-br"},"left_chat_member":{"id":7176119907,"is_bot":false,"first_name":"M\u00f4nica","last_name":"Wildner","language_code":"pt-br"}}}
|
|
||||||
[2025-12-01 05:00:19] {"update_id":466006769,
|
|
||||||
"message":{"message_id":5823,"from":{"id":8351799858,"is_bot":false,"first_name":"nickpons","username":"nickpons","language_code":"es"},"chat":{"id":-4787145544,"title":"Pruebas de grupo","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1764565162,"text":"Hola"}}
|
|
||||||
[2025-12-01 05:00:19] {"update_id":466006770,
|
|
||||||
"message":{"message_id":5824,"from":{"id":8351799858,"is_bot":false,"first_name":"nickpons","username":"nickpons","language_code":"es"},"chat":{"id":8351799858,"first_name":"nickpons","username":"nickpons","type":"private"},"date":1764565175,"text":"Hola"}}
|
|
||||||
[2025-12-01 07:34:45] {"update_id":466006771,
|
|
||||||
"message":{"message_id":5827,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":5717258,"first_name":"nickpons666","username":"nickpons666","type":"private"},"date":1764574484,"text":"Hola"}}
|
|
||||||
[2025-12-01 18:19:33] {"update_id":466006772,
|
|
||||||
"message":{"message_id":342,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1764613173,"text":"Hola a todos, ya esta el tren por si quieren subir, recuerden m\u00ednimo 2 Tickets."}}
|
|
||||||
[2025-12-02 21:48:20] {"update_id":466006773,
|
|
||||||
"message":{"message_id":344,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1764712100,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Hola a tod@s,\n\nHoy Gusano (Marsahll) a las 5pm M\u00e9xico / 8pm Brasil / 9pm Servidor.\n\nAgradeceremos su participaci\u00f3n.\n\nSaludos","is_topic_message":true}}
|
|
||||||
[2025-12-03 02:31:19] {"update_id":466006774,
|
|
||||||
"message":{"message_id":346,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1764729078,"message_thread_id":14,"reply_to_message":{"message_id":14,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933840,"message_thread_id":14,"forum_topic_created":{"name":"Tren","icon_color":16478047},"is_topic_message":true},"text":"Artemio te toca tren","entities":[{"offset":0,"length":7,"type":"text_mention","user":{"id":5570136738,"is_bot":false,"first_name":"Artemio","language_code":"es"}}],"is_topic_message":true}}
|
|
||||||
[2025-12-03 03:55:33] {"update_id":466006775,
|
|
||||||
"message":{"message_id":347,"from":{"id":5570136738,"is_bot":false,"first_name":"Artemio","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1764734132,"message_thread_id":14,"reply_to_message":{"message_id":14,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933840,"message_thread_id":14,"forum_topic_created":{"name":"Tren","icon_color":16478047},"is_topic_message":true},"text":"Va que va","is_topic_message":true}}
|
|
||||||
[2025-12-03 03:55:55] {"update_id":466006776,
|
|
||||||
"message":{"message_id":348,"from":{"id":5570136738,"is_bot":false,"first_name":"Artemio","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1764734155,"message_thread_id":14,"reply_to_message":{"message_id":14,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933840,"message_thread_id":14,"forum_topic_created":{"name":"Tren","icon_color":16478047},"is_topic_message":true},"text":"A qu\u00e9 hora tiene que salir?","is_topic_message":true}}
|
|
||||||
[2025-12-04 18:05:26] {"update_id":466006777,
|
|
||||||
"message":{"message_id":350,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1764871525,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Hola a tod@s,\n\nHoy tenemos gusano a las 5pm M\u00e9xico / 8pm Brasil / 9pm Servidor.\n\nSaludos","is_topic_message":true}}
|
|
||||||
[2025-12-04 19:13:55] {"update_id":466006778,
|
|
||||||
"message":{"message_id":352,"from":{"id":8578578303,"is_bot":false,"first_name":"Edmer","last_name":"Briones","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1764875635,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Ok","is_topic_message":true}}
|
|
||||||
[2025-12-04 22:57:45] {"update_id":466006779,
|
|
||||||
"message":{"message_id":354,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1764889064,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Hola a todos, 3 minutos para gusano.","is_topic_message":true}}
|
|
||||||
[2025-12-10 22:57:35] {"update_id":466006780,
|
|
||||||
"message":{"message_id":355,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1765407454,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Hola, 3 minutos para gusano","is_topic_message":true}}
|
|
||||||
[2025-12-10 23:20:56] {"update_id":466006781,
|
|
||||||
"message":{"message_id":356,"from":{"id":5570136738,"is_bot":false,"first_name":"Artemio","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1765408855,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Gracias Nick por recordarme \ud83d\udc4d","is_topic_message":true}}
|
|
||||||
[2025-12-10 23:21:25] {"update_id":466006782,
|
|
||||||
"message":{"message_id":358,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1765408885,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"\ud83e\udee1","is_topic_message":true}}
|
|
||||||
[2025-12-12 02:18:57] {"update_id":466006783,
|
|
||||||
"message":{"message_id":360,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1765505937,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Hola a todos, 1 minuto para Godzilla","is_topic_message":true}}
|
|
||||||
[2025-12-12 22:57:33] {"update_id":466006784,
|
|
||||||
"message":{"message_id":4295,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002549857229,"title":"R4s/R5 REOD","type":"supergroup"},"date":1765580252,"text":"3 minutos para gusano"}}
|
|
||||||
[2025-12-15 02:15:13] {"update_id":466006785,
|
|
||||||
"message":{"message_id":361,"from":{"id":1971997473,"is_bot":false,"first_name":"D","last_name":"K","username":"DanK3126"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1765764913,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Esta apagado el juego?","is_topic_message":true}}
|
|
||||||
[2025-12-16 00:04:12] {"update_id":466006786,
|
|
||||||
"message":{"message_id":363,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1765843451,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Quien pueda entrar al juego a guarnecer para crear el centro de alianza, los esperamos","is_topic_message":true}}
|
|
||||||
[2025-12-16 22:55:49] {"update_id":466006787,
|
|
||||||
"message":{"message_id":365,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1765925749,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"5 minutos para el Marahll (gusano)","is_topic_message":true}}
|
|
||||||
[2025-12-18 23:00:23] {"update_id":466006788,
|
|
||||||
"message":{"message_id":367,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1766098823,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Gusano","is_topic_message":true}}
|
|
||||||
[2025-12-20 23:04:19] {"update_id":466006789,
|
|
||||||
"message":{"message_id":368,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1766271858,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Gusano","is_topic_message":true}}
|
|
||||||
[2025-12-22 19:35:42] {"update_id":466006790,
|
|
||||||
"message":{"message_id":369,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1766432142,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Hola a todos,\n\nHoy tenemos gusano a las 5pm M\u00e9xico / 8pm Brasil / 9pm Servidor.\n\nSaludos","is_topic_message":true}}
|
|
||||||
[2025-12-22 23:02:52] {"update_id":466006791,
|
|
||||||
"message":{"message_id":371,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1766444572,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Gusano","is_topic_message":true}}
|
|
||||||
[2025-12-24 19:24:12] {"update_id":466006792,
|
|
||||||
"message":{"message_id":372,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1766604251,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Hola a tod@s,\n\nHoy tenemos gusano a las 5pm M\u00e9xico / 8pm Brasil / 9pm Servidor.\n\nSaludos","is_topic_message":true}}
|
|
||||||
[2025-12-25 14:07:37] {"update_id":466006793,
|
|
||||||
"message":{"message_id":374,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1766671657,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Felices fiestas a todos, quien pueda unirse a ayudar a capturar una aldea por favor","is_topic_message":true}}
|
|
||||||
[2025-12-26 22:21:22] {"update_id":466006794,
|
|
||||||
"message":{"message_id":376,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1766787681,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Tenemos Marahll (gusano) en 40 minutos","is_topic_message":true}}
|
|
||||||
[2025-12-26 22:21:30] {"update_id":466006795,
|
|
||||||
"message":{"message_id":377,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1766787689,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Marshall","is_topic_message":true}}
|
|
||||||
[2025-12-26 23:00:57] {"update_id":466006796,
|
|
||||||
"message":{"message_id":379,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1766790057,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Gusano","is_topic_message":true}}
|
|
||||||
[2025-12-29 18:09:37] {"update_id":466006797,
|
|
||||||
"message":{"message_id":380,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1767031776,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Hola a todos, hoy a las 5pm M\u00e9xico /8pm Brasil /9pm Servidor vamos a tomar una ciudad para que puedan conectarse y ayudarnos, saludos.","entities":[{"offset":35,"length":4,"type":"bot_command"},{"offset":47,"length":4,"type":"bot_command"}],"is_topic_message":true}}
|
|
||||||
[2025-12-29 19:05:52] {"update_id":466006798,
|
|
||||||
"message":{"message_id":382,"from":{"id":8578578303,"is_bot":false,"first_name":"Edmer","last_name":"Briones","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1767035152,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"Ok","is_topic_message":true}}
|
|
||||||
[2025-12-29 22:51:36] {"update_id":466006799,
|
|
||||||
"message":{"message_id":384,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1767048696,"message_thread_id":13,"reply_to_message":{"message_id":13,"from":{"id":5717258,"is_bot":false,"first_name":"nickpons666","username":"nickpons666","language_code":"es"},"chat":{"id":-1002810727871,"title":"Noticias de REOD","is_forum":true,"type":"supergroup"},"date":1761933741,"message_thread_id":13,"forum_topic_created":{"name":"Eventos","icon_color":16766590},"is_topic_message":true},"text":"En 10 minutos vamos a tomar una ciudad para quien pueda ayudarnos por favor","is_topic_message":true}}
|
|
||||||
182344
logs/reoddragon__access.log
182344
logs/reoddragon__access.log
File diff suppressed because it is too large
Load Diff
@@ -1,61 +0,0 @@
|
|||||||
[Fri Nov 28 15:46:40.491693 2025] [authz_core:error] [pid 622693] [client 172.17.0.7:43634] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Sun Nov 30 01:13:01.382466 2025] [authz_core:error] [pid 1898730] [client 172.17.0.7:53700] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Sun Nov 30 01:13:01.864154 2025] [authz_core:error] [pid 1898726] [client 172.17.0.7:53702] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Sun Nov 30 01:13:02.345119 2025] [authz_core:error] [pid 1901777] [client 172.17.0.7:53718] AH01630: client denied by server configuration: /var/www/html/bot/.env.local
|
|
||||||
[Sun Nov 30 01:13:02.824145 2025] [authz_core:error] [pid 1898729] [client 172.17.0.7:53752] AH01630: client denied by server configuration: /var/www/html/bot/.env.production
|
|
||||||
[Sun Nov 30 01:13:03.291114 2025] [authz_core:error] [pid 1898730] [client 172.17.0.7:53756] AH01630: client denied by server configuration: /var/www/html/bot/.env.development
|
|
||||||
[Sun Nov 30 01:13:03.754030 2025] [authz_core:error] [pid 1898726] [client 172.17.0.7:53760] AH01630: client denied by server configuration: /var/www/html/bot/.env.bak
|
|
||||||
[Sun Nov 30 01:13:04.236353 2025] [authz_core:error] [pid 1901777] [client 172.17.0.7:53776] AH01630: client denied by server configuration: /var/www/html/bot/.env.example
|
|
||||||
[Sun Nov 30 08:57:23.622590 2025] [authz_core:error] [pid 1898726] [client 172.17.0.7:38722] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Sun Nov 30 14:42:31.857288 2025] [authz_core:error] [pid 1898726] [client 172.17.0.7:57336] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Mon Dec 01 10:00:11.869801 2025] [authz_core:error] [pid 2551769] [client 172.17.0.7:44930] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Tue Dec 02 20:56:03.710397 2025] [authz_core:error] [pid 3176269] [client 172.17.0.7:50774] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Thu Dec 04 12:35:00.674186 2025] [authz_core:error] [pid 108460] [client 172.17.0.4:47380] AH01630: client denied by server configuration: /var/www/html/bot/.env, referer: http://reod-dragon.ddns.net/.env
|
|
||||||
[Thu Dec 04 12:35:01.274521 2025] [authz_core:error] [pid 260986] [client 172.17.0.4:47408] AH01630: client denied by server configuration: /var/www/html/bot/config/.env, referer: http://reod-dragon.ddns.net/config/.env
|
|
||||||
[Thu Dec 04 12:35:01.861583 2025] [authz_core:error] [pid 115133] [client 172.17.0.4:47422] AH01630: client denied by server configuration: /var/www/html/bot/admin/.env, referer: http://reod-dragon.ddns.net/admin/.env
|
|
||||||
[Thu Dec 04 12:35:02.736026 2025] [authz_core:error] [pid 108460] [client 172.17.0.4:47442] AH01630: client denied by server configuration: /var/www/html/bot/.git, referer: http://reod-dragon.ddns.net/.git/HEAD
|
|
||||||
[Thu Dec 04 15:12:11.667938 2025] [authz_core:error] [pid 108458] [client 172.17.0.4:54954] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Sat Dec 06 04:10:25.493285 2025] [authz_core:error] [pid 84630] [client 172.17.0.7:48506] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Sat Dec 06 04:10:26.087111 2025] [authz_core:error] [pid 84627] [client 172.17.0.7:48518] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Sat Dec 06 04:10:26.665080 2025] [authz_core:error] [pid 84625] [client 172.17.0.7:48524] AH01630: client denied by server configuration: /var/www/html/bot/.env.example
|
|
||||||
[Sat Dec 06 04:10:27.293168 2025] [authz_core:error] [pid 84628] [client 172.17.0.7:48534] AH01630: client denied by server configuration: /var/www/html/bot/.env.development
|
|
||||||
[Sat Dec 06 04:10:27.895768 2025] [authz_core:error] [pid 84629] [client 172.17.0.7:48536] AH01630: client denied by server configuration: /var/www/html/bot/.env.production
|
|
||||||
[Sat Dec 06 04:10:41.895644 2025] [authz_core:error] [pid 84625] [client 172.17.0.7:45630] AH01630: client denied by server configuration: /var/www/html/bot/.aws
|
|
||||||
[Sat Dec 06 04:10:43.401779 2025] [authz_core:error] [pid 84643] [client 172.17.0.7:43056] AH01630: client denied by server configuration: /var/www/html/bot/logs/debug.log
|
|
||||||
[Sat Dec 06 04:10:43.902537 2025] [authz_core:error] [pid 84630] [client 172.17.0.7:43072] AH01630: client denied by server configuration: /var/www/html/bot/.env.js
|
|
||||||
[Sat Dec 06 04:10:44.510809 2025] [authz_core:error] [pid 84627] [client 172.17.0.7:43078] AH01630: client denied by server configuration: /var/www/html/bot/debug.log
|
|
||||||
[Sat Dec 06 04:10:45.118893 2025] [authz_core:error] [pid 84625] [client 172.17.0.7:43086] AH01630: client denied by server configuration: /var/www/html/bot/logs/error.log
|
|
||||||
[Sat Dec 06 04:10:45.740746 2025] [authz_core:error] [pid 84643] [client 172.17.0.7:43124] AH01630: client denied by server configuration: /var/www/html/bot/laravel.log
|
|
||||||
[Sat Dec 06 04:10:46.290827 2025] [authz_core:error] [pid 84630] [client 172.17.0.7:43136] AH01630: client denied by server configuration: /var/www/html/bot/logs/debug.log
|
|
||||||
[Sat Dec 06 06:48:45.143274 2025] [authz_core:error] [pid 84630] [client 172.17.0.7:54808] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Sat Dec 06 06:48:46.418807 2025] [authz_core:error] [pid 84628] [client 172.17.0.7:54824] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Sat Dec 06 08:08:24.180647 2025] [authz_core:error] [pid 84627] [client 172.17.0.7:60538] AH01630: client denied by server configuration: /var/www/html/bot/.well-known
|
|
||||||
[Sat Dec 06 08:08:32.966473 2025] [authz_core:error] [pid 84629] [client 172.17.0.7:43864] AH01630: client denied by server configuration: /var/www/html/bot/.well-known
|
|
||||||
[Sat Dec 06 08:08:34.445939 2025] [authz_core:error] [pid 84625] [client 172.17.0.7:43884] AH01630: client denied by server configuration: /var/www/html/bot/.well-known
|
|
||||||
[Sat Dec 06 15:21:14.294680 2025] [authz_core:error] [pid 84630] [client 172.17.0.7:38692] AH01630: client denied by server configuration: /var/www/html/bot/.env, referer: https://www.google.com/
|
|
||||||
[Sat Dec 06 15:21:14.691063 2025] [authz_core:error] [pid 84625] [client 172.17.0.7:38710] AH01630: client denied by server configuration: /var/www/html/bot/.git, referer: https://www.google.com/
|
|
||||||
[Sat Dec 06 15:21:15.539876 2025] [authz_core:error] [pid 84629] [client 172.17.0.7:38734] AH01630: client denied by server configuration: /var/www/html/bot/admin/.env, referer: https://www.google.com/
|
|
||||||
[Sat Dec 06 15:21:16.265929 2025] [authz_core:error] [pid 84643] [client 172.17.0.7:38740] AH01630: client denied by server configuration: /var/www/html/bot/.env.bak, referer: https://www.google.com/
|
|
||||||
[Sat Dec 06 15:21:16.642483 2025] [authz_core:error] [pid 84630] [client 172.17.0.7:38748] AH01630: client denied by server configuration: /var/www/html/bot/.git, referer: https://www.google.com/
|
|
||||||
[Sat Dec 06 15:21:17.733280 2025] [authz_core:error] [pid 84625] [client 172.17.0.7:38768] AH01630: client denied by server configuration: /var/www/html/bot/.gitlab-ci.yml, referer: https://www.google.com/
|
|
||||||
[Sat Dec 06 15:21:20.348644 2025] [authz_core:error] [pid 84627] [client 172.17.0.7:38810] AH01630: client denied by server configuration: /var/www/html/bot/.npmrc, referer: https://www.google.com/
|
|
||||||
[Sat Dec 06 18:35:10.634908 2025] [authz_core:error] [pid 84630] [client 172.17.0.7:60998] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Sun Dec 07 02:05:00.760347 2025] [authz_core:error] [pid 1162948] [client 172.17.0.7:45824] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Sun Dec 07 06:49:00.285913 2025] [authz_core:error] [pid 1030] [client 172.17.0.3:49112] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Sun Dec 07 07:26:51.382055 2025] [authz_core:error] [pid 1039] [client 172.17.0.3:51922] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Sun Dec 07 22:25:35.899901 2025] [authz_core:error] [pid 1035] [client 172.17.0.3:35506] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Mon Dec 08 19:05:50.587455 2025] [authz_core:error] [pid 906470] [client 172.17.0.3:38388] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Tue Dec 09 11:41:43.139120 2025] [authz_core:error] [pid 1995650] [client 172.17.0.3:44184] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Tue Dec 09 23:38:34.615347 2025] [authz_core:error] [pid 1994871] [client 172.17.0.3:57640] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Fri Dec 12 17:48:55.504128 2025] [authz_core:error] [pid 568303] [client 172.17.0.3:53430] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Sun Dec 14 03:56:28.207353 2025] [authz_core:error] [pid 1849889] [client 172.17.0.3:37502] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Wed Dec 17 20:39:51.537746 2025] [authz_core:error] [pid 598941] [client 172.17.0.2:56380] AH01630: client denied by server configuration: /var/www/html/bot/.well-known
|
|
||||||
[Wed Dec 17 20:39:58.233321 2025] [authz_core:error] [pid 598943] [client 172.17.0.2:56608] AH01630: client denied by server configuration: /var/www/html/bot/.well-known
|
|
||||||
[Thu Dec 18 21:04:43.075755 2025] [authz_core:error] [pid 121390] [client 172.17.0.3:54966] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Thu Dec 18 21:04:46.079345 2025] [authz_core:error] [pid 3259] [client 172.17.0.3:55068] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
[Sat Dec 20 05:13:07.448523 2025] [authz_core:error] [pid 1133567] [client 172.17.0.3:32954] AH01630: client denied by server configuration: /var/www/html/bot/.env
|
|
||||||
[Mon Dec 22 20:15:58.789596 2025] [authz_core:error] [pid 2408106] [client 172.17.0.3:42118] AH01630: client denied by server configuration: /var/www/html/bot/.well-known
|
|
||||||
[Tue Dec 23 00:40:53.713169 2025] [authz_core:error] [pid 3040669] [client 172.17.0.3:47634] AH01630: client denied by server configuration: /var/www/html/bot/.well-known
|
|
||||||
[Tue Dec 23 04:10:00.535898 2025] [authz_core:error] [pid 3049063] [client 172.17.0.3:57094] AH01630: client denied by server configuration: /var/www/html/bot/.well-known
|
|
||||||
[Tue Dec 23 04:10:00.535897 2025] [authz_core:error] [pid 3040672] [client 172.17.0.3:57096] AH01630: client denied by server configuration: /var/www/html/bot/.well-known
|
|
||||||
[Thu Dec 25 21:51:20.062065 2025] [authz_core:error] [pid 746013] [client 172.17.0.2:48696] AH01630: client denied by server configuration: /var/www/html/bot/.git
|
|
||||||
@@ -1,157 +0,0 @@
|
|||||||
2026-01-13 21:09:51,426 WARN For [program:translation-worker], redirect_stderr=true but stderr_logfile has also been set to a filename, the filename has been ignored
|
|
||||||
2026-01-13 21:09:51,426 INFO Included extra file "/etc/supervisor/conf.d/discordbot.conf" during parsing
|
|
||||||
2026-01-13 21:09:51,426 INFO Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
|
|
||||||
2026-01-13 21:09:51,426 INFO Included extra file "/etc/supervisor/conf.d/translation-worker.conf" during parsing
|
|
||||||
2026-01-13 21:09:51,426 INFO Set uid to user 0 succeeded
|
|
||||||
2026-01-13 21:09:51,429 INFO supervisord started with pid 1
|
|
||||||
2026-01-13 21:09:52,432 INFO spawned: 'apache2' with pid 41
|
|
||||||
2026-01-13 21:09:52,434 INFO spawned: 'discordbot' with pid 42
|
|
||||||
2026-01-13 21:09:52,437 INFO spawned: 'translation-worker' with pid 43
|
|
||||||
2026-01-13 21:09:52,519 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-13 21:09:53,526 INFO spawned: 'apache2' with pid 50
|
|
||||||
2026-01-13 21:09:53,527 INFO success: discordbot entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-13 21:09:53,527 INFO success: translation-worker entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-13 21:09:53,560 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-13 21:09:56,530 INFO spawned: 'apache2' with pid 51
|
|
||||||
2026-01-13 21:09:56,578 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-13 21:10:00,536 INFO spawned: 'apache2' with pid 52
|
|
||||||
2026-01-13 21:10:00,575 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-13 21:10:01,576 INFO gave up: apache2 entered FATAL state, too many start retries too quickly
|
|
||||||
2026-01-14 05:14:21,375 WARN received SIGTERM indicating exit request
|
|
||||||
2026-01-14 05:14:21,375 INFO waiting for discordbot, translation-worker to die
|
|
||||||
2026-01-14 05:14:22,377 INFO stopped: translation-worker (exit status 0)
|
|
||||||
2026-01-14 05:14:22,381 INFO stopped: discordbot (terminated by SIGTERM)
|
|
||||||
2026-01-14 19:42:37,933 WARN For [program:translation-worker], redirect_stderr=true but stderr_logfile has also been set to a filename, the filename has been ignored
|
|
||||||
2026-01-14 19:42:37,933 INFO Included extra file "/etc/supervisor/conf.d/discordbot.conf" during parsing
|
|
||||||
2026-01-14 19:42:37,934 INFO Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
|
|
||||||
2026-01-14 19:42:37,934 INFO Included extra file "/etc/supervisor/conf.d/translation-worker.conf" during parsing
|
|
||||||
2026-01-14 19:42:37,934 INFO Set uid to user 0 succeeded
|
|
||||||
2026-01-14 19:42:37,938 INFO supervisord started with pid 1
|
|
||||||
2026-01-14 19:42:38,940 INFO spawned: 'apache2' with pid 42
|
|
||||||
2026-01-14 19:42:38,943 INFO spawned: 'discordbot' with pid 43
|
|
||||||
2026-01-14 19:42:38,946 INFO spawned: 'translation-worker' with pid 44
|
|
||||||
2026-01-14 19:42:39,021 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-14 19:42:40,031 INFO spawned: 'apache2' with pid 45
|
|
||||||
2026-01-14 19:42:40,031 INFO success: discordbot entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-14 19:42:40,031 INFO success: translation-worker entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-14 19:42:40,074 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-14 19:42:43,034 INFO spawned: 'apache2' with pid 46
|
|
||||||
2026-01-14 19:42:43,071 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-14 19:42:46,495 INFO spawned: 'apache2' with pid 47
|
|
||||||
2026-01-14 19:42:46,527 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-14 19:42:47,529 INFO gave up: apache2 entered FATAL state, too many start retries too quickly
|
|
||||||
2026-01-15 01:50:47,525 WARN received SIGTERM indicating exit request
|
|
||||||
2026-01-15 01:50:47,526 INFO waiting for discordbot, translation-worker to die
|
|
||||||
2026-01-15 01:50:48,530 INFO stopped: translation-worker (exit status 0)
|
|
||||||
2026-01-15 01:50:48,537 INFO stopped: discordbot (terminated by SIGTERM)
|
|
||||||
2026-01-15 01:50:52,687 WARN For [program:translation-worker], redirect_stderr=true but stderr_logfile has also been set to a filename, the filename has been ignored
|
|
||||||
2026-01-15 01:50:52,687 INFO Included extra file "/etc/supervisor/conf.d/discordbot.conf" during parsing
|
|
||||||
2026-01-15 01:50:52,687 INFO Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
|
|
||||||
2026-01-15 01:50:52,687 INFO Included extra file "/etc/supervisor/conf.d/translation-worker.conf" during parsing
|
|
||||||
2026-01-15 01:50:52,687 INFO Set uid to user 0 succeeded
|
|
||||||
2026-01-15 01:50:52,689 INFO supervisord started with pid 1
|
|
||||||
2026-01-15 01:50:53,692 INFO spawned: 'apache2' with pid 42
|
|
||||||
2026-01-15 01:50:53,694 INFO spawned: 'discordbot' with pid 43
|
|
||||||
2026-01-15 01:50:53,697 INFO spawned: 'translation-worker' with pid 44
|
|
||||||
2026-01-15 01:50:53,737 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 01:50:54,772 INFO spawned: 'apache2' with pid 45
|
|
||||||
2026-01-15 01:50:54,772 INFO success: discordbot entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-15 01:50:54,773 INFO success: translation-worker entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-15 01:50:54,807 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 01:50:57,777 INFO spawned: 'apache2' with pid 46
|
|
||||||
2026-01-15 01:50:57,814 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 01:51:01,788 INFO spawned: 'apache2' with pid 47
|
|
||||||
2026-01-15 01:51:01,823 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 01:51:02,824 INFO gave up: apache2 entered FATAL state, too many start retries too quickly
|
|
||||||
2026-01-15 01:52:43,012 WARN received SIGTERM indicating exit request
|
|
||||||
2026-01-15 01:52:43,012 INFO waiting for discordbot, translation-worker to die
|
|
||||||
2026-01-15 01:52:44,016 INFO stopped: translation-worker (exit status 0)
|
|
||||||
2026-01-15 01:52:44,026 INFO stopped: discordbot (terminated by SIGTERM)
|
|
||||||
2026-01-15 01:52:58,661 WARN For [program:translation-worker], redirect_stderr=true but stderr_logfile has also been set to a filename, the filename has been ignored
|
|
||||||
2026-01-15 01:52:58,661 INFO Included extra file "/etc/supervisor/conf.d/discordbot.conf" during parsing
|
|
||||||
2026-01-15 01:52:58,661 INFO Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
|
|
||||||
2026-01-15 01:52:58,661 INFO Included extra file "/etc/supervisor/conf.d/translation-worker.conf" during parsing
|
|
||||||
2026-01-15 01:52:58,661 INFO Set uid to user 0 succeeded
|
|
||||||
2026-01-15 01:52:58,664 INFO supervisord started with pid 1
|
|
||||||
2026-01-15 01:52:59,666 INFO spawned: 'apache2' with pid 42
|
|
||||||
2026-01-15 01:52:59,668 INFO spawned: 'discordbot' with pid 43
|
|
||||||
2026-01-15 01:52:59,671 INFO spawned: 'translation-worker' with pid 44
|
|
||||||
2026-01-15 01:52:59,717 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 01:53:00,751 INFO spawned: 'apache2' with pid 45
|
|
||||||
2026-01-15 01:53:00,752 INFO success: discordbot entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-15 01:53:00,752 INFO success: translation-worker entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-15 01:53:00,785 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 01:53:03,757 INFO spawned: 'apache2' with pid 46
|
|
||||||
2026-01-15 01:53:03,871 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 01:53:07,768 INFO spawned: 'apache2' with pid 47
|
|
||||||
2026-01-15 01:53:07,818 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 01:53:07,819 INFO gave up: apache2 entered FATAL state, too many start retries too quickly
|
|
||||||
2026-01-15 03:20:22,297 WARN received SIGTERM indicating exit request
|
|
||||||
2026-01-15 03:20:22,297 INFO waiting for discordbot, translation-worker to die
|
|
||||||
2026-01-15 03:20:23,300 INFO stopped: translation-worker (exit status 0)
|
|
||||||
2026-01-15 03:20:23,312 INFO stopped: discordbot (terminated by SIGTERM)
|
|
||||||
2026-01-15 03:22:56,954 WARN For [program:translation-worker], redirect_stderr=true but stderr_logfile has also been set to a filename, the filename has been ignored
|
|
||||||
2026-01-15 03:22:56,954 INFO Included extra file "/etc/supervisor/conf.d/discordbot.conf" during parsing
|
|
||||||
2026-01-15 03:22:56,954 INFO Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
|
|
||||||
2026-01-15 03:22:56,954 INFO Included extra file "/etc/supervisor/conf.d/translation-worker.conf" during parsing
|
|
||||||
2026-01-15 03:22:56,954 INFO Set uid to user 0 succeeded
|
|
||||||
2026-01-15 03:22:56,958 INFO supervisord started with pid 1
|
|
||||||
2026-01-15 03:22:57,961 INFO spawned: 'apache2' with pid 42
|
|
||||||
2026-01-15 03:22:57,967 INFO spawned: 'discordbot' with pid 43
|
|
||||||
2026-01-15 03:22:57,972 INFO spawned: 'translation-worker' with pid 44
|
|
||||||
2026-01-15 03:22:58,112 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 03:22:59,117 INFO spawned: 'apache2' with pid 45
|
|
||||||
2026-01-15 03:22:59,119 INFO success: discordbot entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-15 03:22:59,120 INFO success: translation-worker entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-15 03:22:59,153 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 03:23:02,081 INFO spawned: 'apache2' with pid 46
|
|
||||||
2026-01-15 03:23:02,128 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 03:23:06,089 INFO spawned: 'apache2' with pid 47
|
|
||||||
2026-01-15 03:23:06,154 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-15 03:23:06,154 INFO gave up: apache2 entered FATAL state, too many start retries too quickly
|
|
||||||
2026-01-16 17:28:43,957 WARN received SIGTERM indicating exit request
|
|
||||||
2026-01-16 17:28:43,957 INFO waiting for discordbot, translation-worker to die
|
|
||||||
2026-01-16 17:28:44,961 INFO stopped: translation-worker (exit status 0)
|
|
||||||
2026-01-16 17:28:44,965 INFO stopped: discordbot (terminated by SIGTERM)
|
|
||||||
2026-01-16 17:28:46,478 WARN For [program:translation-worker], redirect_stderr=true but stderr_logfile has also been set to a filename, the filename has been ignored
|
|
||||||
2026-01-16 17:28:46,478 INFO Included extra file "/etc/supervisor/conf.d/discordbot.conf" during parsing
|
|
||||||
2026-01-16 17:28:46,478 INFO Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
|
|
||||||
2026-01-16 17:28:46,478 INFO Included extra file "/etc/supervisor/conf.d/translation-worker.conf" during parsing
|
|
||||||
2026-01-16 17:28:46,478 INFO Set uid to user 0 succeeded
|
|
||||||
2026-01-16 17:28:46,489 INFO supervisord started with pid 1
|
|
||||||
2026-01-16 17:28:47,492 INFO spawned: 'apache2' with pid 43
|
|
||||||
2026-01-16 17:28:47,494 INFO spawned: 'discordbot' with pid 44
|
|
||||||
2026-01-16 17:28:47,497 INFO spawned: 'translation-worker' with pid 45
|
|
||||||
2026-01-16 17:28:47,542 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-16 17:28:48,597 INFO spawned: 'apache2' with pid 52
|
|
||||||
2026-01-16 17:28:48,597 INFO success: discordbot entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-16 17:28:48,597 INFO success: translation-worker entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-16 17:28:48,630 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-16 17:28:51,601 INFO spawned: 'apache2' with pid 53
|
|
||||||
2026-01-16 17:28:51,633 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-16 17:28:55,607 INFO spawned: 'apache2' with pid 55
|
|
||||||
2026-01-16 17:28:55,640 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-16 17:28:56,640 INFO gave up: apache2 entered FATAL state, too many start retries too quickly
|
|
||||||
2026-01-16 20:49:11,888 WARN received SIGTERM indicating exit request
|
|
||||||
2026-01-16 20:49:11,902 INFO waiting for discordbot, translation-worker to die
|
|
||||||
2026-01-16 20:49:12,908 INFO stopped: translation-worker (exit status 0)
|
|
||||||
2026-01-16 20:49:12,911 INFO stopped: discordbot (terminated by SIGTERM)
|
|
||||||
2026-01-16 20:50:01,374 WARN For [program:translation-worker], redirect_stderr=true but stderr_logfile has also been set to a filename, the filename has been ignored
|
|
||||||
2026-01-16 20:50:01,375 INFO Included extra file "/etc/supervisor/conf.d/discordbot.conf" during parsing
|
|
||||||
2026-01-16 20:50:01,375 INFO Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
|
|
||||||
2026-01-16 20:50:01,375 INFO Included extra file "/etc/supervisor/conf.d/translation-worker.conf" during parsing
|
|
||||||
2026-01-16 20:50:01,375 INFO Set uid to user 0 succeeded
|
|
||||||
2026-01-16 20:50:01,378 INFO supervisord started with pid 1
|
|
||||||
2026-01-16 20:50:02,380 INFO spawned: 'apache2' with pid 42
|
|
||||||
2026-01-16 20:50:02,382 INFO spawned: 'discordbot' with pid 43
|
|
||||||
2026-01-16 20:50:02,385 INFO spawned: 'translation-worker' with pid 44
|
|
||||||
2026-01-16 20:50:02,464 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-16 20:50:03,467 INFO spawned: 'apache2' with pid 51
|
|
||||||
2026-01-16 20:50:03,468 INFO success: discordbot entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-16 20:50:03,468 INFO success: translation-worker entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
|
|
||||||
2026-01-16 20:50:03,501 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-16 20:50:06,462 INFO spawned: 'apache2' with pid 52
|
|
||||||
2026-01-16 20:50:06,513 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-16 20:50:10,471 INFO spawned: 'apache2' with pid 53
|
|
||||||
2026-01-16 20:50:10,532 INFO exited: apache2 (exit status 0; not expected)
|
|
||||||
2026-01-16 20:50:10,533 INFO gave up: apache2 entered FATAL state, too many start retries too quickly
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
31
plan_diagnostico_docker.md
Executable file
31
plan_diagnostico_docker.md
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
### **Plan de Diagnóstico: Problemas en el Entorno Docker**
|
||||||
|
|
||||||
|
**Objetivo:** Identificar por qué la aplicación se comporta de manera diferente dentro de Docker, específicamente en la traducción de mensajes, el envío de imágenes y la funcionalidad de los botones.
|
||||||
|
|
||||||
|
**Fase 1: Verificación de Configuración y Entorno**
|
||||||
|
* [x] **1. Revisar la configuración de Docker:**
|
||||||
|
* **Acción:** Analizar los archivos `docker/Dockerfile`, `docker/docker-compose.local.yml`, `docker/entrypoint.sh`.
|
||||||
|
* **Resultado:** Se confirmó que el `entrypoint.sh` genera un nuevo archivo `.env` basado en las variables de entorno pasadas al contenedor. El `docker-compose.local.yml` actual pasa muy pocas variables.
|
||||||
|
|
||||||
|
* [x] **2. Confirmar la lógica de carga en `config.php`:**
|
||||||
|
* **Acción:** Volver a examinar `config.php`.
|
||||||
|
* **Resultado:** La lógica es correcta, pero el archivo `.env` que carga está incompleto en el contenedor.
|
||||||
|
|
||||||
|
* [x] **3. Comparar variables de entorno (Local vs. Docker):**
|
||||||
|
* **Acción:** Listar las variables del `.env.pruebas` local y compararlas con las proporcionadas en `docker-compose.local.yml`.
|
||||||
|
* **Resultado:** Se confirmó que variables críticas (`APP_URL`, `DB_*`, `LIBRETRANSLATE_URL`, etc.) NO se están pasando al contenedor. **Esta es la causa raíz del problema.**
|
||||||
|
|
||||||
|
**Fase 2: Análisis de Rutas, URLs y Conectividad**
|
||||||
|
* [x] **4, 5, 6. Análisis detallado de síntomas:**
|
||||||
|
* **Nota:** Se omite el análisis detallado de cada síntoma individual, ya que todos (fallo de traducción, imágenes y botones) son una consecuencia directa de la falta de variables de entorno identificada en la Fase 1.
|
||||||
|
|
||||||
|
**Fase 3: Propuesta de Soluciones y Verificación**
|
||||||
|
* [x] **7. Proponer e implementar las correcciones:**
|
||||||
|
* **Propuesta Original:** Modificar `docker-compose.local.yml` para utilizar la directiva `env_file` y apuntar al archivo `.env.pruebas`.
|
||||||
|
* **Actualización 1:** La causa principal está en el `entrypoint.sh` y su manejo de las variables en producción. Se ha modificado `docker/entrypoint.sh` para que capture *todas* las variables de entorno proporcionadas en el `yaml` de despliegue, en lugar de usar un filtro `grep` restrictivo.
|
||||||
|
* **Actualización 2:** Se identificó que `DB_PASS` en el YAML no estaba correctamente entrecomillado, lo que causaba corrupción. Se corrigió el `docker/bot-lastwar.yaml` para añadir comillas a `DB_PASS` y mejorar la organización de las variables.
|
||||||
|
* **Actualización 3:** Se identificó un error en `includes/db.php` donde el código dependía de `$_ENV`, el cual puede no estar poblado, causando un error de conexión a la base de datos `No such file or directory`. Se modificó `includes/db.php` para usar `getenv()` en lugar de `$_ENV` para una lectura más robusta de las variables de entorno de la base de datos.
|
||||||
|
|
||||||
|
* [ ] **8. Verificación final:**
|
||||||
|
* **Acción:** Construir la nueva imagen de Docker, desplegarla usando `bot-lastwar.yaml` y probar los escenarios que antes fallaban (traducciones, comandos con imágenes, botones).
|
||||||
|
* **Meta:** Confirmar que la aplicación funciona correctamente en el contenedor.
|
||||||
515
plan_separacion_plataformas.md
Normal file
515
plan_separacion_plataformas.md
Normal file
@@ -0,0 +1,515 @@
|
|||||||
|
PLAN DE MIGRACIÓN COMPLETO - SEPARACIÓN DE PLATAFORMAS DISCORD/TELEGRAM
|
||||||
|
============================================================================
|
||||||
|
|
||||||
|
OPCIÓN 1: SEPARACIÓN GRADUAL CON MANTENIMIENTO DE COMPATIBILIDAD
|
||||||
|
============================================================================
|
||||||
|
|
||||||
|
Fecha: 8 de febrero de 2026
|
||||||
|
Duración estimada: 15-20 días laborales
|
||||||
|
Riesgo: Alto (Mitigado con backups y pruebas)
|
||||||
|
Impacto: Muy alto (Requiere planificación cuidadosa)
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
VISIÓN GENERAL Y ESTRATEGIA
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Objetivo: Crear dos instancias completamente independientes del sistema de bots,
|
||||||
|
manteniendo funcionalidad existente y evitando downtime crítico.
|
||||||
|
|
||||||
|
Estrategia:
|
||||||
|
1. Crear estructura paralela sin afectar sistema actual
|
||||||
|
2. Migrar datos de forma segura
|
||||||
|
3. Implementar routing específico por plataforma
|
||||||
|
4. Validar extensivamente antes de corte
|
||||||
|
5. Realizar cambio mínimo de DNS/configuración final
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
ESTRUCTURA OBJETIVO FINAL
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
/bot/
|
||||||
|
├── shared/ # Mínimo compartido (solo config general)
|
||||||
|
│ ├── config_basic.php # Configuración no sensible
|
||||||
|
│ └── constants.php # Constantes globales
|
||||||
|
├── discord/
|
||||||
|
│ ├── bot.php # Bot de Discord independiente
|
||||||
|
│ ├── web/
|
||||||
|
│ │ ├── create_message.php # Interfaz específica Discord
|
||||||
|
│ │ ├── admin/ # Admin específico Discord
|
||||||
|
│ │ └── templates/ # Templates específicos
|
||||||
|
│ ├── includes/
|
||||||
|
│ │ ├── db.php # Conexión específica Discord
|
||||||
|
│ │ ├── DiscordSender.php # Sender específico
|
||||||
|
│ │ ├── message_handler.php # Handler específico
|
||||||
|
│ │ └── [todos los includes específicos]
|
||||||
|
│ ├── database/
|
||||||
|
│ │ └── estructura_discord.sql # Tablas específicas Discord
|
||||||
|
│ └── logs/
|
||||||
|
│ └── discord_*.log # Logs específicos
|
||||||
|
├── telegram/
|
||||||
|
│ ├── bot.php # Bot de Telegram independiente
|
||||||
|
│ ├── web/
|
||||||
|
│ │ ├── create_message.php # Interfaz específica Telegram
|
||||||
|
│ │ ├── admin/ # Admin específico Telegram
|
||||||
|
│ │ └── templates/ # Templates específicos
|
||||||
|
│ ├── includes/
|
||||||
|
│ │ ├── db.php # Conexión específica Telegram
|
||||||
|
│ │ ├── TelegramSender.php # Sender específico
|
||||||
|
│ │ ├── message_handler.php # Handler específico
|
||||||
|
│ │ └── [todos los includes específicos]
|
||||||
|
│ ├── database/
|
||||||
|
│ │ └── estructura_telegram.sql # Tablas específicas Telegram
|
||||||
|
│ └── logs/
|
||||||
|
│ └── telegram_*.log # Logs específicos
|
||||||
|
└── legacy/ # Backup del sistema actual
|
||||||
|
└── [todo el código actual]
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
FASE 1: PREPARACIÓN Y ANÁLISIS (Días 1-2)
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Objetivo: Análisis detallado y preparación del entorno
|
||||||
|
|
||||||
|
**DÍA 1: Análisis de Dependencias**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Mapear todas las dependencias entre archivos
|
||||||
|
│ ├── Identificar archivos críticos compartidos
|
||||||
|
│ ├── Documentar flujo completo de datos
|
||||||
|
│ └── Crear diagrama de arquitectura actual
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Análisis de base de datos actual
|
||||||
|
│ ├── Identificar tablas compartidas vs específicas
|
||||||
|
│ ├── Documentar relaciones y constraints
|
||||||
|
│ └── Estimar volumen de datos a migrar
|
||||||
|
|
||||||
|
**DÍA 2: Planificación y Preparación**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Crear repositorio de backup completo
|
||||||
|
│ ├── Setup de entorno de pruebas paralelo
|
||||||
|
│ ├── Definir estrategia de rollback
|
||||||
|
│ └── Preparar scripts de validación
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Crear estructura de directorios destino
|
||||||
|
│ ├── Setup de base de datos de pruebas
|
||||||
|
│ ├── Preparar scripts de migración de datos
|
||||||
|
│ └── Documentar puntos críticos de validación
|
||||||
|
|
||||||
|
**DELIVERABLES FASE 1:**
|
||||||
|
✅ Diagrama de dependencias completo
|
||||||
|
✅ Estructura de directorios creada
|
||||||
|
✅ Entorno de pruebas funcionando
|
||||||
|
✅ Scripts de backup y rollback listos
|
||||||
|
✅ Documentación de puntos críticos
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
FASE 2: DUPLICACIÓN DE ESTRUCTURA (Días 3-5)
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Objetivo: Crear estructura base duplicada sin modificar sistema actual
|
||||||
|
|
||||||
|
**DÍA 3: Estructura de Directorios y Configuración**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Copiar estructura completa a /discord/ y /telegram/
|
||||||
|
│ ├── Crear archivos de configuración específicos
|
||||||
|
│ ├── Setup de variables de entorno separadas
|
||||||
|
│ └── Configurar paths relativos específicos
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Adaptar includes de cada plataforma
|
||||||
|
│ ├── Configurar logging específico por plataforma
|
||||||
|
│ ├── Ajustar rutas de templates y assets
|
||||||
|
│ └── Validar estructura básica
|
||||||
|
|
||||||
|
**DÍA 4: Base de Datos Específica**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Exportar estructura completa de DB actual
|
||||||
|
│ ├── Crear databases discord_bot y telegram_bot
|
||||||
|
│ ├── Importar estructura a ambas BDs
|
||||||
|
│ └── Configurar usuarios y permisos específicos
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Crear scripts de conexión específicos
|
||||||
|
│ ├── Adaptar archivos de configuración de DB
|
||||||
|
│ ├── Probar conexiones a ambas BDs
|
||||||
|
│ └── Validar que no haya cruces
|
||||||
|
|
||||||
|
**DÍA 5: Adaptación Básica de Código**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Adaptar paths de includes en cada plataforma
|
||||||
|
│ ├── Modificar require_once para paths relativos
|
||||||
|
│ ├── Actualizar rutas de templates
|
||||||
|
│ └── Ajustar configuración de logging
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Probar carga básica de archivos PHP
|
||||||
|
│ ├── Validar que no haya errores de sintaxis
|
||||||
|
│ ├── Verificar conexión a DB específica
|
||||||
|
│ └── Documentar cambios realizados
|
||||||
|
|
||||||
|
**DELIVERABLES FASE 2:**
|
||||||
|
✅ Estructura duplicada completa
|
||||||
|
✅ Bases de datos separadas funcionando
|
||||||
|
✅ Configuración específica por plataforma
|
||||||
|
✅ Validación básica de estructura
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
FASE 3: MIGRACIÓN DE DATOS (Días 6-9)
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Objetivo: Migrar datos de forma segura manteniendo integridad
|
||||||
|
|
||||||
|
**DÍA 6: Scripts de Migración**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Crear scripts de exportación por plataforma
|
||||||
|
│ ├── Implementar filtros por platform='discord'/'telegram'
|
||||||
|
│ ├── Setup de validación de integridad referencial
|
||||||
|
│ └── Preparar scripts de rollback de datos
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Test de scripts con subset de datos
|
||||||
|
│ ├── Validar integridad de datos migrados
|
||||||
|
│ ├── Verificar counts y relaciones
|
||||||
|
│ └── Optimizar rendimiento de migración
|
||||||
|
|
||||||
|
**DÍA 7: Migración de Datos Principales**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Backup completo de producción
|
||||||
|
│ ├── Migrar tabla recipients (filtrada por plataforma)
|
||||||
|
│ ├── Migrar tabla messages
|
||||||
|
│ └── Migrar tabla schedules
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Migrar tabla sent_messages
|
||||||
|
│ ├── Migrar tabla recurrent_messages
|
||||||
|
│ ├── Migrar tabla supported_languages
|
||||||
|
│ └── Validar integridad de relaciones
|
||||||
|
|
||||||
|
**DÍA 8: Migración de Datos de Configuración**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Migrar tabla activity_log (con prefijo)
|
||||||
|
│ ├── Migrar tabla translation_queue
|
||||||
|
│ ├── Migrar tabla telegram_interactions (solo Telegram)
|
||||||
|
│ └── Migrar configuraciones específicas
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Validar consistencia de datos migrados
|
||||||
|
│ ├── Verificar counts vs original
|
||||||
|
│ ├── Test de queries complejas
|
||||||
|
│ └── Documentar datos migrados
|
||||||
|
|
||||||
|
**DÍA 9: Validación y Ajustes de Datos**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Ejecutar scripts de validación completa
|
||||||
|
│ ├── Verificar integridad referencial
|
||||||
|
│ ├── Test de operaciones CRUD
|
||||||
|
│ └── Validar timestamps y secuencias
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Corregir anomalías encontradas
|
||||||
|
│ ├── Optimizar índices específicos
|
||||||
|
│ ├── Validar performance de queries
|
||||||
|
│ └── Preparar reporte de migración
|
||||||
|
|
||||||
|
**DELIVERABLES FASE 3:**
|
||||||
|
✅ Datos completamente migrados a ambas BDs
|
||||||
|
✅ Validación de integridad completada
|
||||||
|
✅ Scripts de rollback de datos probados
|
||||||
|
✅ Documentación de migración
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
FASE 4: ADAPTACIÓN DE LÓGICA DE NEGOCIO (Días 10-13)
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Objetivo: Adaptar toda la lógica para operación independiente
|
||||||
|
|
||||||
|
**DÍA 10: Adaptación de Bot Files**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Adaptar discord_bot.php para BD específica
|
||||||
|
│ ├── Adaptar telegram_bot_webhook.php para BD específica
|
||||||
|
│ ├── Ajustar conexiones y paths
|
||||||
|
│ └── Configurar logging específico
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Adaptar includes específicos de cada bot
|
||||||
|
│ ├── Modificar handlers de mensajes
|
||||||
|
│ ├── Ajustar sistemas de traducción
|
||||||
|
│ └── Validar funcionamiento básico
|
||||||
|
|
||||||
|
**DÍA 11: Adaptación de Web Interface - Discord**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Adaptar discord/web/create_message.php
|
||||||
|
│ ├── Modificar para usar BD específica
|
||||||
|
│ ├── Ajustar recipient selection
|
||||||
|
│ └── Configurar paths específicos
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Adaptar discord/web/admin/
|
||||||
|
│ ├── Modificar todos los archivos de admin
|
||||||
|
│ ├── Ajustar templates específicos
|
||||||
|
│ └── Validar interfaz completa
|
||||||
|
|
||||||
|
**DÍA 12: Adaptación de Web Interface - Telegram**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Adaptar telegram/web/create_message.php
|
||||||
|
│ ├── Modificar para usar BD específica
|
||||||
|
│ ├── Ajustar recipient selection
|
||||||
|
│ └── Configurar paths específicos
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Adaptar telegram/web/admin/
|
||||||
|
│ ├── Modificar todos los archivos de admin
|
||||||
|
│ ├── Ajustar templates específicos
|
||||||
|
│ └── Validar interfaz completa
|
||||||
|
|
||||||
|
**DÍA 13: Adaptación de Procesos en Background**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Adaptar discord/process_queue.php
|
||||||
|
│ ├── Adaptar telegram/process_queue.php
|
||||||
|
│ ├── Ajustar sistemas de traducción específicos
|
||||||
|
│ └── Configurar logging independiente
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Adaptar scripts de workers
|
||||||
|
│ ├── Modificar sistemas de scheduling
|
||||||
|
│ ├── Ajustar procesos de traducción
|
||||||
|
│ └── Validar procesos background
|
||||||
|
|
||||||
|
**DELIVERABLES FASE 4:**
|
||||||
|
✅ Bots funcionando con BDs específicas
|
||||||
|
✅ Interfaces web adaptadas y funcionando
|
||||||
|
✅ Procesos background adaptados
|
||||||
|
✅ Logging específico funcionando
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
FASE 5: TESTING Y VALIDACIÓN (Días 14-16)
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Objetivo: Validación exhaustiva antes de producción
|
||||||
|
|
||||||
|
**DÍA 14: Testing Funcional**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Test completo de bot de Discord
|
||||||
|
│ ├── Validar todos los comandos
|
||||||
|
│ ├── Probar envío de mensajes
|
||||||
|
│ └── Test de sistema de traducción
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Test completo de bot de Telegram
|
||||||
|
│ ├── Validar todos los comandos
|
||||||
|
│ ├── Probar envío de mensajes
|
||||||
|
│ └── Test de sistema de traducción
|
||||||
|
|
||||||
|
**DÍA 15: Testing de Web Interface**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Test completo de web Discord
|
||||||
|
│ ├── Probar creación de mensajes
|
||||||
|
│ ├── Test de administración
|
||||||
|
│ └── Validar programación
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Test completo de web Telegram
|
||||||
|
│ ├── Probar creación de mensajes
|
||||||
|
│ ├── Test de administración
|
||||||
|
│ └── Validar programación
|
||||||
|
|
||||||
|
**DÍA 16: Testing de Integración y Stress**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Test de ambas plataformas simultáneamente
|
||||||
|
│ ├── Validar que no haya interferencia
|
||||||
|
│ ├── Test de carga concurrente
|
||||||
|
│ └── Medición de rendimiento
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Test de procesos background
|
||||||
|
│ ├── Validar sistema de traducción bajo carga
|
||||||
|
│ ├── Test de recuperación de errores
|
||||||
|
│ └── Documentar resultados
|
||||||
|
|
||||||
|
**DELIVERABLES FASE 5:**
|
||||||
|
✅ Validación funcional completa
|
||||||
|
✅ Testing de integración exitoso
|
||||||
|
✅ Métricas de性能 documentadas
|
||||||
|
✅ Checklist de validación completado
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
FASE 6: DEPLOY Y MIGRACIÓN FINAL (Días 17-18)
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Objetivo: Migración final con mínimo impacto
|
||||||
|
|
||||||
|
**DÍA 17: Preparación para Producción**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Backup final de sistema actual
|
||||||
|
│ ├── Preparar entorno de producción
|
||||||
|
│ ├── Configurar DNS y rutas
|
||||||
|
│ └── Documentar plan de corte
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Configurar variables de entorno producción
|
||||||
|
│ ├── Validar conexiones a BDs finales
|
||||||
|
│ ├── Test de endpoints expuestos
|
||||||
|
│ └── Preparar monitoreo
|
||||||
|
|
||||||
|
**DÍA 18: Migración Final**
|
||||||
|
├── **MAÑANA (2 horas) - WINDOW DE MIGRACIÓN:**
|
||||||
|
│ ├── Poner sistema actual en modo mantenimiento
|
||||||
|
│ ├── Migrar última data diferencial
|
||||||
|
│ ├── Apuntar rutas a nuevos sistemas
|
||||||
|
│ └── Iniciar nuevos servicios
|
||||||
|
├── **MAÑANA (2 horas) - VALIDACIÓN INMEDIATA:**
|
||||||
|
│ ├── Verificar bots conectados
|
||||||
|
│ ├── Test básico de funcionalidad
|
||||||
|
│ ├── Validar logs corriendo
|
||||||
|
│ └── Confirmar no hay errores críticos
|
||||||
|
├── **TARDE (4 horas) - MONITOREO INTENSIVO:**
|
||||||
|
│ ├── Monitorear rendimiento
|
||||||
|
│ ├── Validar todas las funcionalidades
|
||||||
|
│ ├── Revisar logs en tiempo real
|
||||||
|
│ └── Estar listo para rollback si es necesario
|
||||||
|
|
||||||
|
**DELIVERABLES FASE 6:**
|
||||||
|
✅ Sistema completamente migrado
|
||||||
|
✅ Ambas plataformas funcionando independientemente
|
||||||
|
✅ Monitoreo activo implementado
|
||||||
|
✅ Plan de rollback validado
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
FASE 7: POST-MIGRACIÓN Y OPTIMIZACIÓN (Días 19-20)
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Objetivo: Optimizar y documentar nueva arquitectura
|
||||||
|
|
||||||
|
**DÍA 19: Optimización y Ajustes**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Analizar performance post-migración
|
||||||
|
│ ├── Optimizar queries específicos
|
||||||
|
│ ├── Ajustar configuración de cache
|
||||||
|
│ └── Optimizar índices de BD
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Configurar monitoreo específico
|
||||||
|
│ ├── Setup de alertas personalizadas
|
||||||
|
│ ├── Optimizar procesos background
|
||||||
|
│ └── Ajustar configuración de logs
|
||||||
|
|
||||||
|
**DÍA 20: Documentación y Handover**
|
||||||
|
├── **MAÑANA (4 horas):**
|
||||||
|
│ ├── Documentar nueva arquitectura
|
||||||
|
│ ├── Crear guías de operación
|
||||||
|
│ ├── Documentar procedimientos de backup
|
||||||
|
│ └── Preparar documentación técnica
|
||||||
|
├── **TARDE (4 horas):**
|
||||||
|
│ ├── Capacitar al equipo en nueva estructura
|
||||||
|
│ ├── Crear runbooks de operación
|
||||||
|
│ ├── Documentar puntos críticos
|
||||||
|
│ └── Cerrar proyecto exitosamente
|
||||||
|
|
||||||
|
**DELIVERABLES FASE 7:**
|
||||||
|
✅ Sistema optimizado funcionando
|
||||||
|
✅ Documentación completa
|
||||||
|
✅ Equipo capacitado
|
||||||
|
✅ Proyecto cerrado exitosamente
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
RIESGOS CRÍTICOS Y MITIGACIÓN
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
**RIESGO 1: Pérdida de Datos During Migración**
|
||||||
|
├── Impacto: Crítico
|
||||||
|
├── Mitigación:
|
||||||
|
│ ├── Múltiples backups (antes, durante, después)
|
||||||
|
│ ├── Scripts de validación de integridad
|
||||||
|
│ ├── Test con datos de prueba primero
|
||||||
|
│ └── Rollback planificado y testado
|
||||||
|
|
||||||
|
**RIESGO 2: Downtime Prolongado**
|
||||||
|
├── Impacto: Alto
|
||||||
|
├── Mitigación:
|
||||||
|
│ ├── Ventana de migración planificada
|
||||||
|
│ ├── Estructura paralela pre-creada
|
||||||
|
│ ├── Scripts automatizados para velocidad
|
||||||
|
│ └── Team listo para rollback inmediato
|
||||||
|
|
||||||
|
**RIESGO 3: Regresiones Funcionales**
|
||||||
|
├── Impacto: Alto
|
||||||
|
├── Mitigación:
|
||||||
|
│ ├── Testing extensivo en ambiente aislado
|
||||||
|
│ ├── Checklist de validación detallado
|
||||||
|
│ ├── Monitoreo intensivo post-migración
|
||||||
|
│ └── Equipo de soporte listo
|
||||||
|
|
||||||
|
**RIESGO 4: Problemas de Performance**
|
||||||
|
├── Impacto: Medio
|
||||||
|
├── Mitigación:
|
||||||
|
│ ├── Medición de baseline actual
|
||||||
|
│ ├── Optimización específica por plataforma
|
||||||
|
│ ├── Monitoreo continuo de métricas
|
||||||
|
│ └── Plan de optimización post-migración
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
REQUERIMIENTOS DE RECURSOS
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
**Personal:**
|
||||||
|
├── 1 Desarrollador Senior (Líder del proyecto)
|
||||||
|
├── 1 Desarrollador Mid (Soporte técnico)
|
||||||
|
├── 1 DBA (Para migración de datos)
|
||||||
|
└── 1 DevOps/Infraestructura (Para deploy)
|
||||||
|
|
||||||
|
**Infraestructura:**
|
||||||
|
├── Servidor adicional para staging/paralelo
|
||||||
|
├── 2 bases de datos adicionales
|
||||||
|
├── Storage extra para backups
|
||||||
|
└── Herramientas de monitoreo
|
||||||
|
|
||||||
|
**Software/Herramientas:**
|
||||||
|
├── Herramientas de comparación de BD
|
||||||
|
├── Scripts de migración automatizados
|
||||||
|
├── Sistema de control de versiones
|
||||||
|
└── Herramientas de testing automatizado
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
MÉTRICAS DE ÉXITO
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
**Técnicas:**
|
||||||
|
✅ 0% de pérdida de datos durante migración
|
||||||
|
✅ <30 minutos de downtime total
|
||||||
|
✅ 100% de funcionalidades validadas
|
||||||
|
✅ Performance igual o superior al sistema actual
|
||||||
|
|
||||||
|
**Operativas:**
|
||||||
|
✅ 100% de independencia entre plataformas
|
||||||
|
✅ Capacidad de actualizar una plataforma sin afectar la otra
|
||||||
|
✅ Logs y monitoreo específico por plataforma
|
||||||
|
✅ Documentación completa y accesible
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
CHECKLIST FINAL DE VALIDACIÓN
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
**Pre-Migración:**
|
||||||
|
☐ Backup completo realizado y validado
|
||||||
|
☐ Scripts de migración testeados extensivamente
|
||||||
|
☐ Equipo completo notificado y listo
|
||||||
|
☐ Ventana de mantenimiento comunicada a usuarios
|
||||||
|
☐ Plan de rollback testado y validado
|
||||||
|
|
||||||
|
**Post-Migración:**
|
||||||
|
☐ Ambos bots conectados y funcionando
|
||||||
|
☐ Interfaces web accesibles y funcionales
|
||||||
|
☐ Datos migrados correctamente (counts validados)
|
||||||
|
☐ Logs generándose correctamente
|
||||||
|
☐ Procesos background corriendo
|
||||||
|
☐ Monitoreo detectando anomalías
|
||||||
|
☐ Backup post-migración realizado
|
||||||
|
|
||||||
|
**Week Post-Migración:**
|
||||||
|
☐ Performance estable
|
||||||
|
☐ Usuarios reportando normalidad
|
||||||
|
☐ Logs sin errores críticos
|
||||||
|
☐ Sistemas de traducción funcionando
|
||||||
|
☐ Programación de mensajes funcionando
|
||||||
|
☐ Documentación completada
|
||||||
|
☐ Equipo capacitado
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
CONCLUSIÓN
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Este plan proporciona una ruta clara y estructurada para lograr la separación completa
|
||||||
|
de las plataformas Discord y Telegram con mínimo riesgo y máximo beneficio.
|
||||||
|
|
||||||
|
La separación permitirá:
|
||||||
|
- Desarrollo independiente
|
||||||
|
- Despliegues seguros y aislados
|
||||||
|
- Especialización por plataforma
|
||||||
|
- Mayor estabilidad operativa
|
||||||
|
- Escalabilidad independiente
|
||||||
|
|
||||||
|
El tiempo estimado (15-20 días) considera todas las validaciones necesarias
|
||||||
|
para garantizar una migración exitosa sin impacto crítico en el negocio.
|
||||||
@@ -20,7 +20,7 @@ require_once __DIR__ . '/src/DiscordSender.php';
|
|||||||
use Discord\Parts\Embed\Embed;
|
use Discord\Parts\Embed\Embed;
|
||||||
|
|
||||||
// Instanciar las clases necesarias
|
// Instanciar las clases necesarias
|
||||||
$translator = new Translate();
|
$translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
|
|
||||||
$running = true;
|
$running = true;
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ while ($running) {
|
|||||||
custom_log("[JOB #{$job['id']}] Procesando trabajo para Discord con múltiples idiomas.");
|
custom_log("[JOB #{$job['id']}] Procesando trabajo para Discord con múltiples idiomas.");
|
||||||
$targetLangs = explode(',', $job['target_lang']);
|
$targetLangs = explode(',', $job['target_lang']);
|
||||||
|
|
||||||
$discordSender = new DiscordSender($_ENV['DISCORD_BOT_TOKEN']);
|
$discordSender = new DiscordSender(DISCORD_BOT_TOKEN);
|
||||||
|
|
||||||
// Pre-procesar el texto para proteger las menciones de Discord
|
// Pre-procesar el texto para proteger las menciones de Discord
|
||||||
$originalText = $job['text_to_translate'];
|
$originalText = $job['text_to_translate'];
|
||||||
@@ -128,7 +128,7 @@ while ($running) {
|
|||||||
// --- LÓGICA MEJORADA PARA TELEGRAM USANDO UN SOLO MENSAJE HTML ---
|
// --- LÓGICA MEJORADA PARA TELEGRAM USANDO UN SOLO MENSAJE HTML ---
|
||||||
custom_log("[JOB #{$job['id']}] Procesando trabajo para Telegram con múltiples idiomas.");
|
custom_log("[JOB #{$job['id']}] Procesando trabajo para Telegram con múltiples idiomas.");
|
||||||
$targetLangs = explode(',', $job['target_lang']);
|
$targetLangs = explode(',', $job['target_lang']);
|
||||||
$telegram = new TelegramSender($_ENV['TELEGRAM_BOT_TOKEN'], $pdo);
|
$telegram = new TelegramSender(TELEGRAM_BOT_TOKEN, $pdo, BOT_BASE_URL);
|
||||||
|
|
||||||
$htmlOutput = "<b>Traducciones:</b>\n\n";
|
$htmlOutput = "<b>Traducciones:</b>\n\n";
|
||||||
$translationCount = 0;
|
$translationCount = 0;
|
||||||
@@ -190,7 +190,6 @@ while ($running) {
|
|||||||
|
|
||||||
pcntl_signal_dispatch();
|
pcntl_signal_dispatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
custom_log("--- PROCESADOR DE COLA DETENIDO ---");
|
custom_log("--- PROCESADOR DE COLA DETENIDO ---");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ require_once __DIR__ . '/templates/header.php';
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<button class="btn btn-sm btn-info" onclick="previewMessage(<?php echo htmlspecialchars(json_encode($msg['message_content'])); ?>)" data-translate-title="true" title="Vista previa">
|
<button class="btn btn-sm btn-info" onclick='previewMessage(<?php echo json_encode($msg['message_content']); ?>)' data-translate-title="true" title="Vista previa">
|
||||||
<i class="bi bi-eye-fill"></i>
|
<i class="bi bi-eye-fill"></i>
|
||||||
</button>
|
</button>
|
||||||
<a href="edit_recurrent_message.php?id=<?php echo $msg['id']; ?>" class="btn btn-sm btn-warning" data-translate-title="true" title="Editar">
|
<a href="edit_recurrent_message.php?id=<?php echo $msg['id']; ?>" class="btn btn-sm btn-warning" data-translate-title="true" title="Editar">
|
||||||
@@ -150,7 +150,8 @@ require_once __DIR__ . '/templates/header.php';
|
|||||||
} else {
|
} else {
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
if (is_file($gallery_path . '/' . $file)) {
|
if (is_file($gallery_path . '/' . $file)) {
|
||||||
echo '<div class="col-lg-3 col-md-4 col-sm-6 mb-4 text-center"><img src="galeria/' . htmlspecialchars($file) . '" class="img-fluid img-thumbnail gallery-item" style="cursor:pointer;" alt="' . htmlspecialchars($file) . '"><p class="small text-muted mt-1">' . htmlspecialchars($file) . '</p></div>';
|
$image_url = site_url('galeria/' . $file);
|
||||||
|
echo '<div class="col-lg-3 col-md-4 col-sm-6 mb-4 text-center"><img src="' . htmlspecialchars($image_url) . '" class="img-fluid img-thumbnail gallery-item" style="cursor:pointer;" alt="' . htmlspecialchars($file) . '"><p class="small text-muted mt-1">' . htmlspecialchars($file) . '</p></div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -236,19 +237,25 @@ $(document).ready(function() {
|
|||||||
$(document).on('click', '.gallery-item', function() { $(this).toggleClass('border-primary'); });
|
$(document).on('click', '.gallery-item', function() { $(this).toggleClass('border-primary'); });
|
||||||
$('#insertImageFromGallery').click(function() {
|
$('#insertImageFromGallery').click(function() {
|
||||||
$('.gallery-item.border-primary').each(function(){
|
$('.gallery-item.border-primary').each(function(){
|
||||||
$('#messageContent').summernote('insertImage', $(this).attr('src'));
|
const imageSrc = $(this).attr('src');
|
||||||
|
console.log('Inserting image:', imageSrc);
|
||||||
|
$('#messageContent').summernote('insertImage', imageSrc);
|
||||||
});
|
});
|
||||||
$('#galleryModal').modal('hide');
|
$('#galleryModal').modal('hide');
|
||||||
$('.gallery-item').removeClass('border-primary');
|
$('.gallery-item').removeClass('border-primary');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Toggle between channel and user selection
|
// Toggle between channel and user selection (only if elements exist)
|
||||||
const recipientTypeChannel = document.getElementById('recipientTypeChannel');
|
const recipientTypeChannel = document.getElementById('recipientTypeChannel');
|
||||||
const recipientTypeUser = a = document.getElementById('recipientTypeUser');
|
const recipientTypeUser = document.getElementById('recipientTypeUser');
|
||||||
const channelSelect = document.getElementById('recipientId');
|
const channelSelect = document.getElementById('recipientId');
|
||||||
const userSelect = document.getElementById('recipientId_user');
|
const userSelect = document.getElementById('recipientId_user');
|
||||||
|
|
||||||
function updateRecipientType() {
|
function updateRecipientType() {
|
||||||
|
if (!recipientTypeChannel || !recipientTypeUser || !channelSelect || !userSelect) {
|
||||||
|
return; // Elements don't exist, exit gracefully
|
||||||
|
}
|
||||||
|
|
||||||
if (recipientTypeChannel.checked) {
|
if (recipientTypeChannel.checked) {
|
||||||
channelSelect.classList.remove('d-none');
|
channelSelect.classList.remove('d-none');
|
||||||
channelSelect.required = true;
|
channelSelect.required = true;
|
||||||
@@ -265,9 +272,13 @@ $(document).ready(function() {
|
|||||||
userSelect.disabled = false;
|
userSelect.disabled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only add event listeners if elements exist
|
||||||
|
if (recipientTypeChannel && recipientTypeUser) {
|
||||||
recipientTypeChannel.addEventListener('change', updateRecipientType);
|
recipientTypeChannel.addEventListener('change', updateRecipientType);
|
||||||
recipientTypeUser.addEventListener('change', updateRecipientType);
|
recipientTypeUser.addEventListener('change', updateRecipientType);
|
||||||
updateRecipientType(); // Initial call
|
updateRecipientType(); // Initial call
|
||||||
|
}
|
||||||
|
|
||||||
// Form validation
|
// Form validation
|
||||||
$('#recurrentMessageForm').submit(function(e) {
|
$('#recurrentMessageForm').submit(function(e) {
|
||||||
@@ -288,11 +299,27 @@ $(document).ready(function() {
|
|||||||
// Preview message function
|
// Preview message function
|
||||||
function previewMessage(content) {
|
function previewMessage(content) {
|
||||||
const previewModalBody = document.getElementById('previewModalBody');
|
const previewModalBody = document.getElementById('previewModalBody');
|
||||||
// Replace image URLs with absolute paths for preview
|
const modalElement = document.getElementById('previewModal');
|
||||||
const baseUrl = "<?php echo $base_url; ?>";
|
|
||||||
let processedContent = content.replace(/src="galeria\//g, 'src="' + baseUrl + 'galeria/');
|
if (!previewModalBody || !modalElement) {
|
||||||
|
console.error('Modal elements not found');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let processedContent = content;
|
||||||
|
|
||||||
|
// Simple cleanup - ensure all image URLs are correct
|
||||||
|
processedContent = processedContent
|
||||||
|
.replace(/src="[^"]*galeria\/([^"]+)"/g, 'src="/galeria/$1"')
|
||||||
|
.replace(/src='[^']*galeria\/([^']+)'/g, "src='/galeria/$1'");
|
||||||
|
|
||||||
|
// Add proper styling to images
|
||||||
|
processedContent = processedContent.replace(/<img([^>]*)>/g, '<img$1 style="max-width: 100%; height: auto; border-radius: 8px; margin: 10px 0;">');
|
||||||
|
|
||||||
previewModalBody.innerHTML = processedContent;
|
previewModalBody.innerHTML = processedContent;
|
||||||
var myModal = new bootstrap.Modal(document.getElementById('previewModal'));
|
|
||||||
|
// Create and show the modal
|
||||||
|
const myModal = new bootstrap.Modal(modalElement);
|
||||||
myModal.show();
|
myModal.show();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ try {
|
|||||||
$originalHtml = $stmt->fetchColumn();
|
$originalHtml = $stmt->fetchColumn();
|
||||||
|
|
||||||
if ($originalHtml) {
|
if ($originalHtml) {
|
||||||
$translator = new Translate();
|
$translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
$textContent = strip_tags(html_entity_decode($originalHtml));
|
$textContent = strip_tags(html_entity_decode($originalHtml));
|
||||||
$sourceLang = $translator->detectLanguage($textContent);
|
$sourceLang = $translator->detectLanguage($textContent);
|
||||||
|
|
||||||
@@ -78,8 +78,7 @@ try {
|
|||||||
|
|
||||||
if ($translatedHtml && $translatedHtml !== $originalHtml) {
|
if ($translatedHtml && $translatedHtml !== $originalHtml) {
|
||||||
$sender = new DiscordSender(DISCORD_BOT_TOKEN);
|
$sender = new DiscordSender(DISCORD_BOT_TOKEN);
|
||||||
$mention = "<@{"
|
$mention = "<@" . $userId . ">";
|
||||||
. $userId . "}>;
|
|
||||||
$finalContent = $mention . " *Traducción a {" . $targetLang . "}:*\n" . $translatedHtml;
|
$finalContent = $mention . " *Traducción a {" . $targetLang . "}:*\n" . $translatedHtml;
|
||||||
$sender->sendMessage($channelId, $finalContent);
|
$sender->sendMessage($channelId, $finalContent);
|
||||||
direct_log("[MANUAL_TRANSLATE_WORKER] Traducción enviada con éxito.");
|
direct_log("[MANUAL_TRANSLATE_WORKER] Traducción enviada con éxito.");
|
||||||
|
|||||||
@@ -4,21 +4,22 @@ class Translate
|
|||||||
{
|
{
|
||||||
private $apiUrl;
|
private $apiUrl;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct(string $apiUrl)
|
||||||
{
|
{
|
||||||
$this->apiUrl = rtrim($_ENV['LIBRETRANSLATE_URL'], '/');
|
$this->apiUrl = rtrim($apiUrl, '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function detectLanguage($text)
|
public function detectLanguage($text)
|
||||||
{
|
{
|
||||||
if (empty(trim($text))) {
|
if (empty(trim($text))) {
|
||||||
return null;
|
return null; // Or return an empty array indicating no detection
|
||||||
}
|
}
|
||||||
|
|
||||||
$response = $this->request('/detect', ['q' => $text]);
|
$response = $this->request('/detect', ['q' => $text]);
|
||||||
|
|
||||||
|
// Return the full response array if detection was successful
|
||||||
if (isset($response[0]['language'])) {
|
if (isset($response[0]['language'])) {
|
||||||
return $response[0]['language'];
|
return $response; // Return the array, e.g., [{"confidence":90.0,"language":"es"}]
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class TranslationWorker {
|
|||||||
public function __construct($workerId, $pdo) {
|
public function __construct($workerId, $pdo) {
|
||||||
$this->workerId = "worker_" . $workerId . "_" . getmypid();
|
$this->workerId = "worker_" . $workerId . "_" . getmypid();
|
||||||
$this->pdo = $pdo;
|
$this->pdo = $pdo;
|
||||||
$this->translator = new Translate();
|
$this->translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
|
|
||||||
// Configurar sleep time desde environment
|
// Configurar sleep time desde environment
|
||||||
if (isset($_ENV['TRANSLATION_WORKER_SLEEP'])) {
|
if (isset($_ENV['TRANSLATION_WORKER_SLEEP'])) {
|
||||||
|
|||||||
@@ -8,11 +8,13 @@ class TelegramSender
|
|||||||
private $botToken;
|
private $botToken;
|
||||||
private $apiUrl = 'https://api.telegram.org/bot';
|
private $apiUrl = 'https://api.telegram.org/bot';
|
||||||
private $pdo;
|
private $pdo;
|
||||||
|
private $baseUrl; // Nueva propiedad para almacenar BOT_BASE_URL
|
||||||
|
|
||||||
public function __construct($botToken, $pdo)
|
public function __construct($botToken, $pdo, string $baseUrl)
|
||||||
{
|
{
|
||||||
$this->botToken = $botToken;
|
$this->botToken = $botToken;
|
||||||
$this->pdo = $pdo;
|
$this->pdo = $pdo;
|
||||||
|
$this->baseUrl = rtrim($baseUrl, '/'); // Asegurarse de que no tenga una barra al final
|
||||||
}
|
}
|
||||||
|
|
||||||
public function sendMessage($chatId, $content, $options = [], $addTranslateButton = false, $messageLanguage = 'es', $originalFullContent = null)
|
public function sendMessage($chatId, $content, $options = [], $addTranslateButton = false, $messageLanguage = 'es', $originalFullContent = null)
|
||||||
@@ -302,7 +304,7 @@ class TelegramSender
|
|||||||
|
|
||||||
// Convertir rutas relativas a absolutas si es necesario
|
// Convertir rutas relativas a absolutas si es necesario
|
||||||
if (!preg_match('/^https?:\/\//', $image_url)) {
|
if (!preg_match('/^https?:\/\//', $image_url)) {
|
||||||
$base_url = rtrim($_ENV['APP_URL'], '/');
|
$base_url = $this->baseUrl;
|
||||||
$image_url = $base_url . '/' . ltrim($image_url, '/');
|
$image_url = $base_url . '/' . ltrim($image_url, '/');
|
||||||
custom_log("[DEBUG] URL de imagen convertida: " . $image_url);
|
custom_log("[DEBUG] URL de imagen convertida: " . $image_url);
|
||||||
|
|
||||||
@@ -605,7 +607,7 @@ class TelegramSender
|
|||||||
|
|
||||||
// Si la URL es relativa, intentar convertirla a absoluta
|
// Si la URL es relativa, intentar convertirla a absoluta
|
||||||
if (!preg_match('/^https?:\/\//i', $url)) {
|
if (!preg_match('/^https?:\/\//i', $url)) {
|
||||||
$baseUrl = rtrim($_ENV['APP_URL'], '/');
|
$baseUrl = $this->baseUrl;
|
||||||
$absoluteUrl = $baseUrl . '/' . ltrim($url, '/');
|
$absoluteUrl = $baseUrl . '/' . ltrim($url, '/');
|
||||||
custom_log("${logPrefix} URL relativa detectada, convirtiendo a absoluta: $absoluteUrl");
|
custom_log("${logPrefix} URL relativa detectada, convirtiendo a absoluta: $absoluteUrl");
|
||||||
$url = $absoluteUrl;
|
$url = $absoluteUrl;
|
||||||
@@ -712,7 +714,7 @@ class TelegramSender
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!preg_match('/^https?:\/\//', $url)) {
|
if (!preg_match('/^https?:\/\//', $url)) {
|
||||||
$baseUrl = rtrim($_ENV['APP_URL'], '/');
|
$baseUrl = $this->baseUrl;
|
||||||
$url = $baseUrl . '/' . ltrim($url, '/');
|
$url = $baseUrl . '/' . ltrim($url, '/');
|
||||||
custom_log("[DEBUG] isValidImageUrl: URL convertida a absoluta: " . $url);
|
custom_log("[DEBUG] isValidImageUrl: URL convertida a absoluta: " . $url);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ ini_set('log_errors', 1);
|
|||||||
|
|
||||||
// Verificación de autenticación
|
// Verificación de autenticación
|
||||||
$authToken = $_GET['auth_token'] ?? '';
|
$authToken = $_GET['auth_token'] ?? '';
|
||||||
$expectedToken = $_ENV['TELEGRAM_WEBHOOK_TOKEN'] ?? '';
|
$expectedToken = TELEGRAM_WEBHOOK_TOKEN;
|
||||||
if (!empty($expectedToken) && $authToken !== $expectedToken) {
|
if (!empty($expectedToken) && $authToken !== $expectedToken) {
|
||||||
http_response_code(403);
|
http_response_code(403);
|
||||||
custom_log("Acceso no autorizado: token inválido.");
|
custom_log("Acceso no autorizado: token inválido.");
|
||||||
@@ -30,7 +30,7 @@ if (!empty($expectedToken) && $authToken !== $expectedToken) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Verificar token del bot
|
// Verificar token del bot
|
||||||
$botToken = $_ENV['TELEGRAM_BOT_TOKEN'] ?? '';
|
$botToken = TELEGRAM_BOT_TOKEN;
|
||||||
if (empty($botToken)) {
|
if (empty($botToken)) {
|
||||||
http_response_code(500);
|
http_response_code(500);
|
||||||
custom_log("Token de bot no configurado.");
|
custom_log("Token de bot no configurado.");
|
||||||
@@ -49,8 +49,8 @@ if (!$update) {
|
|||||||
custom_log("Update recibido: " . json_encode($update, JSON_PRETTY_PRINT));
|
custom_log("Update recibido: " . json_encode($update, JSON_PRETTY_PRINT));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$telegram = new TelegramSender($botToken, $pdo);
|
$telegram = new TelegramSender(TELEGRAM_BOT_TOKEN, $pdo, BOT_BASE_URL);
|
||||||
$translator = new Translate();
|
$translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
$commandLocker = new CommandLocker($pdo);
|
$commandLocker = new CommandLocker($pdo);
|
||||||
|
|
||||||
$message = $update['message'] ?? $update['channel_post'] ?? null;
|
$message = $update['message'] ?? $update['channel_post'] ?? null;
|
||||||
@@ -248,7 +248,8 @@ try {
|
|||||||
|
|
||||||
if (!empty($originalText)) {
|
if (!empty($originalText)) {
|
||||||
try {
|
try {
|
||||||
$sourceLang = $translator->detectLanguage($originalText);
|
$detectionResult = $translator->detectLanguage($originalText);
|
||||||
|
$sourceLang = $detectionResult[0]['language'] ?? null;
|
||||||
if ($sourceLang && $sourceLang !== $targetLang) {
|
if ($sourceLang && $sourceLang !== $targetLang) {
|
||||||
$translatedText = $translator->translateHtml($originalText, $sourceLang, $targetLang);
|
$translatedText = $translator->translateHtml($originalText, $sourceLang, $targetLang);
|
||||||
$telegram->answerCallbackQuery($callbackId, ['text' => $translatedText, 'show_alert' => true]);
|
$telegram->answerCallbackQuery($callbackId, ['text' => $translatedText, 'show_alert' => true]);
|
||||||
@@ -279,7 +280,8 @@ try {
|
|||||||
if ($originalContent) {
|
if ($originalContent) {
|
||||||
// Detectar idioma real del contenido y aplicar fallback si coincide con el destino
|
// Detectar idioma real del contenido y aplicar fallback si coincide con el destino
|
||||||
$plain = strip_tags(html_entity_decode($originalContent, ENT_QUOTES | ENT_HTML5, 'UTF-8'));
|
$plain = strip_tags(html_entity_decode($originalContent, ENT_QUOTES | ENT_HTML5, 'UTF-8'));
|
||||||
$sourceLang = $translator->detectLanguage($plain) ?? 'es';
|
$detectionResult = $translator->detectLanguage($plain);
|
||||||
|
$sourceLang = $detectionResult[0]['language'] ?? 'es';
|
||||||
if ($sourceLang === $targetLang) {
|
if ($sourceLang === $targetLang) {
|
||||||
$fallbackSrc = 'es';
|
$fallbackSrc = 'es';
|
||||||
if ($fallbackSrc !== $targetLang) {
|
if ($fallbackSrc !== $targetLang) {
|
||||||
@@ -351,7 +353,8 @@ try {
|
|||||||
|
|
||||||
function handleCommand($pdo, $telegram, $commandLocker, $translator, $text, $from, $chatId, $messageId) {
|
function handleCommand($pdo, $telegram, $commandLocker, $translator, $text, $from, $chatId, $messageId) {
|
||||||
$userId = $from['id'];
|
$userId = $from['id'];
|
||||||
$detectedLang = $translator->detectLanguage($text) ?? 'es';
|
$detectionResult = $translator->detectLanguage($text);
|
||||||
|
$detectedLang = $detectionResult[0]['language'] ?? 'es';
|
||||||
|
|
||||||
if (strpos($text, '/setlang') === 0 || strpos($text, '/setlanguage') === 0) {
|
if (strpos($text, '/setlang') === 0 || strpos($text, '/setlanguage') === 0) {
|
||||||
$parts = explode(' ', $text, 2);
|
$parts = explode(' ', $text, 2);
|
||||||
@@ -459,7 +462,8 @@ function handleCommand($pdo, $telegram, $commandLocker, $translator, $text, $fro
|
|||||||
$converter = new HtmlToTelegramHtmlConverter();
|
$converter = new HtmlToTelegramHtmlConverter();
|
||||||
$content = $converter->convert($content);
|
$content = $converter->convert($content);
|
||||||
|
|
||||||
$detectedLang = $translator->detectLanguage(strip_tags($content)) ?? 'es';
|
$detectionResult = $translator->detectLanguage(strip_tags($content));
|
||||||
|
$detectedLang = $detectionResult[0]['language'] ?? 'es';
|
||||||
if ($detectedLang !== 'es') {
|
if ($detectedLang !== 'es') {
|
||||||
$translatedContent = $translator->translateHtml($content, $detectedLang, 'es');
|
$translatedContent = $translator->translateHtml($content, $detectedLang, 'es');
|
||||||
if ($translatedContent) $content = $translatedContent;
|
if ($translatedContent) $content = $translatedContent;
|
||||||
@@ -520,7 +524,8 @@ function handleRegularMessage($pdo, $telegram, $commandLocker, $translator, $tex
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// 1. Detectar el idioma del mensaje entrante
|
// 1. Detectar el idioma del mensaje entrante
|
||||||
$detectedLang = $translator->detectLanguage(strip_tags($text)) ?? 'es';
|
$detectionResult = $translator->detectLanguage(strip_tags($text));
|
||||||
|
$detectedLang = $detectionResult[0]['language'] ?? 'es';
|
||||||
|
|
||||||
// 2. Guardar la interacción original en la base de datos
|
// 2. Guardar la interacción original en la base de datos
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ try {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
$translator = new Translate();
|
$translator = new Translate(LIBRETRANSLATE_URL);
|
||||||
$translatedText = $translator->translateHtml($originalText, $sourceLang, $targetLang);
|
$translatedText = $translator->translateHtml($originalText, $sourceLang, $targetLang);
|
||||||
|
|
||||||
if ($translatedText) {
|
if ($translatedText) {
|
||||||
|
|||||||
@@ -21,18 +21,20 @@ if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
|||||||
|
|
||||||
// Cargar las variables de entorno
|
// Cargar las variables de entorno
|
||||||
try {
|
try {
|
||||||
// Determinar el entorno desde la variable de entorno del servidor
|
// Determinar el entorno
|
||||||
$environment = $_SERVER['APP_ENVIRONMENT'] ?? 'pruebas'; // Usar 'pruebas' como fallback
|
$environment = getenv('APP_ENVIRONMENT') ?: 'pruebas';
|
||||||
$envFile = '.env.' . $environment;
|
|
||||||
|
|
||||||
// Verificar si el archivo de entorno existe
|
// Construir el nombre del archivo de entorno correcto
|
||||||
if (!file_exists(__DIR__ . '/' . $envFile)) {
|
if ($environment === 'reod') {
|
||||||
throw new \Dotenv\Exception\InvalidPathException("El archivo de entorno '{$envFile}' no se encuentra.");
|
$envFile = '.env';
|
||||||
|
} else {
|
||||||
|
$envFile = '.env.' . $environment;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cargar el archivo de entorno correspondiente
|
// Cargar el archivo de entorno
|
||||||
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, $envFile);
|
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, $envFile);
|
||||||
$dotenv->load();
|
$dotenv->load();
|
||||||
|
|
||||||
} catch (\Dotenv\Exception\InvalidPathException $e) {
|
} catch (\Dotenv\Exception\InvalidPathException $e) {
|
||||||
http_response_code(500);
|
http_response_code(500);
|
||||||
$errorMessage = "Error al cargar la configuración del entorno: " . $e->getMessage();
|
$errorMessage = "Error al cargar la configuración del entorno: " . $e->getMessage();
|
||||||
|
|||||||
Reference in New Issue
Block a user