From fbc01dd29f6cc31687ed4dff0fcdda38516cb606 Mon Sep 17 00:00:00 2001 From: Yuriy Yuriev Date: Fri, 22 May 2026 16:20:23 +0700 Subject: [PATCH] fix irc --- services/irc_service.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/services/irc_service.py b/services/irc_service.py index 01ddc04..fefd7a0 100644 --- a/services/irc_service.py +++ b/services/irc_service.py @@ -85,7 +85,7 @@ class TwitchIRCClient: decoded = line.decode('utf-8', errors='ignore').strip() - # PING - отвечаем СРАЗУ + # PING от Twitch — отвечаем СРАЗУ, возвращаем None чтобы не путать с нашим PONG if decoded.startswith('PING'): pong_msg = f"PONG {decoded.split()[1]}" self._writer.write(f"{pong_msg}\r\n".encode()) @@ -94,7 +94,7 @@ class TwitchIRCClient: except (ConnectionResetError, BrokenPipeError, OSError) as e: logger.warning(f"Failed to send PONG: {e}") logger.debug(f"🏓 {pong_msg}") - return f"PONG {decoded.split()[1]}" # Возвращаем PONG для отслеживания + return None # не пробрасываем в основной цикл return decoded @@ -177,8 +177,8 @@ class TwitchIRCClient: start_time = datetime.now() last_message_time = datetime.now() last_ping_time = datetime.now() - ping_interval = 20 # пинговать каждые 20 сек - pong_timeout = 10 # ждать PONG 10 сек, иначе реконнект + ping_interval = 120 # пинговать каждые 2 минуты + pong_timeout = 30 # ждать PONG 30 сек, иначе реконнект waiting_pong = False ping_sent_at: Optional[float] = None drain_errors = 0 @@ -272,9 +272,10 @@ class TwitchIRCClient: await asyncio.sleep(0.5) continue - if line.startswith('PONG'): + # Twitch отвечает: ":tmi.twitch.tv PONG tmi.twitch.tv :..." — не startswith + if 'PONG' in line: last_message_time = datetime.now() - waiting_pong = False # подтверждение что соединение живо + waiting_pong = False continue msg = self._parse_message(line)