This commit is contained in:
Yuriy Yuriev
2026-05-22 16:20:23 +07:00
parent a4d1bae975
commit fbc01dd29f
+7 -6
View File
@@ -85,7 +85,7 @@ class TwitchIRCClient:
decoded = line.decode('utf-8', errors='ignore').strip() decoded = line.decode('utf-8', errors='ignore').strip()
# PING - отвечаем СРАЗУ # PING от Twitch — отвечаем СРАЗУ, возвращаем None чтобы не путать с нашим PONG
if decoded.startswith('PING'): if decoded.startswith('PING'):
pong_msg = f"PONG {decoded.split()[1]}" pong_msg = f"PONG {decoded.split()[1]}"
self._writer.write(f"{pong_msg}\r\n".encode()) self._writer.write(f"{pong_msg}\r\n".encode())
@@ -94,7 +94,7 @@ class TwitchIRCClient:
except (ConnectionResetError, BrokenPipeError, OSError) as e: except (ConnectionResetError, BrokenPipeError, OSError) as e:
logger.warning(f"Failed to send PONG: {e}") logger.warning(f"Failed to send PONG: {e}")
logger.debug(f"🏓 {pong_msg}") logger.debug(f"🏓 {pong_msg}")
return f"PONG {decoded.split()[1]}" # Возвращаем PONG для отслеживания return None # не пробрасываем в основной цикл
return decoded return decoded
@@ -177,8 +177,8 @@ class TwitchIRCClient:
start_time = datetime.now() start_time = datetime.now()
last_message_time = datetime.now() last_message_time = datetime.now()
last_ping_time = datetime.now() last_ping_time = datetime.now()
ping_interval = 20 # пинговать каждые 20 сек ping_interval = 120 # пинговать каждые 2 минуты
pong_timeout = 10 # ждать PONG 10 сек, иначе реконнект pong_timeout = 30 # ждать PONG 30 сек, иначе реконнект
waiting_pong = False waiting_pong = False
ping_sent_at: Optional[float] = None ping_sent_at: Optional[float] = None
drain_errors = 0 drain_errors = 0
@@ -272,9 +272,10 @@ class TwitchIRCClient:
await asyncio.sleep(0.5) await asyncio.sleep(0.5)
continue continue
if line.startswith('PONG'): # Twitch отвечает: ":tmi.twitch.tv PONG tmi.twitch.tv :..." — не startswith
if 'PONG' in line:
last_message_time = datetime.now() last_message_time = datetime.now()
waiting_pong = False # подтверждение что соединение живо waiting_pong = False
continue continue
msg = self._parse_message(line) msg = self._parse_message(line)