From 26414094d4262e5ab092028955a4f0de57092f43 Mon Sep 17 00:00:00 2001 From: nickpons666 Date: Sat, 7 Feb 2026 20:09:16 -0600 Subject: [PATCH] =?UTF-8?q?Soluci=C3=B3n=20cr=C3=ADtica:=20Reconexi=C3=B3n?= =?UTF-8?q?=20autom=C3=A1tica=20bot=20Discord=20y=20sistema=20de=20health?= =?UTF-8?q?=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Implementa heartbeat cada 30 segundos para mantener conexión WebSocket activa - Agrega manejo de eventos de conexión/desconexión/reconexión - Sistema de health check cada 2 minutos para verificar estado del bot - Configuración mejorada de timeouts y reconexión automática - Soluciona problema de bot no responde después de períodos de inactividad --- discord_bot.php | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/discord_bot.php b/discord_bot.php index a3da799..51d0cb4 100755 --- a/discord_bot.php +++ b/discord_bot.php @@ -39,9 +39,15 @@ try { $discord = new Discord([ 'token' => DISCORD_BOT_TOKEN, 'intents' => Intents::GUILDS | Intents::GUILD_MESSAGES | Intents::DIRECT_MESSAGES | Intents::GUILD_MEMBERS | Intents::GUILD_MESSAGE_REACTIONS, - 'logger' => $logger + 'logger' => $logger, + 'loop' => \React\EventLoop\Loop::get(), + 'socket_options' => [ + 'heartbeat_interval' => 30, // Enviar heartbeat cada 30 segundos + 'reconnect_timeout' => 60, // Timeout para reconexión + ] ]); + // Manejar eventos de conexión y desconexión $discord->on('ready', function (Discord $discord) { $discord->getLogger()->info("=================================================="); $discord->getLogger()->info("Bot conectado y listo para escuchar!"); @@ -49,6 +55,21 @@ try { $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 $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."); @@ -400,6 +421,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(); } catch (Throwable $e) {