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) {