From 2930731bea2a5d0f1b4b1b8be5e623c7c21a75d1 Mon Sep 17 00:00:00 2001 From: banteg <4562643+banteg@users.noreply.github.com> Date: Sun, 28 Dec 2025 21:55:27 +0400 Subject: [PATCH] fix: drain backlog only once --- .../src/codex_telegram_bridge/exec_bridge.py | 17 ++++++++++------- .../src/codex_telegram_bridge/mcp_bridge.py | 17 ++++++++++------- .../src/codex_telegram_bridge/tmux_reply_bot.py | 17 ++++++++++------- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py b/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py index 496fc46..0e39987 100644 --- a/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py +++ b/codex_telegram_bridge/src/codex_telegram_bridge/exec_bridge.py @@ -330,6 +330,16 @@ def run( offset: Optional[int] = None ignore_backlog = bool(ignore_backlog) + if ignore_backlog: + try: + updates = bot.get_updates(offset=offset, timeout_s=0, allowed_updates=["message"]) + except Exception as e: + log(f"[startup] backlog drain failed: {e}") + updates = [] + if updates: + offset = updates[-1]["update_id"] + 1 + log(f"[startup] drained {len(updates)} pending update(s)") + log(f"[startup] pwd={startup_pwd}") log("Option1 bridge running (codex exec). Long-polling Telegram...") if startup_ids: @@ -484,13 +494,6 @@ def run( time.sleep(2.0) continue - if ignore_backlog: - if updates: - offset = updates[-1]["update_id"] + 1 - log(f"[startup] drained {len(updates)} pending update(s)") - continue - ignore_backlog = False - for upd in updates: offset = upd["update_id"] + 1 msg = upd.get("message") or {} diff --git a/codex_telegram_bridge/src/codex_telegram_bridge/mcp_bridge.py b/codex_telegram_bridge/src/codex_telegram_bridge/mcp_bridge.py index bbad796..ae963c0 100644 --- a/codex_telegram_bridge/src/codex_telegram_bridge/mcp_bridge.py +++ b/codex_telegram_bridge/src/codex_telegram_bridge/mcp_bridge.py @@ -293,6 +293,16 @@ def run( offset: Optional[int] = None ignore_backlog = bool(ignore_backlog) + if ignore_backlog: + try: + updates = bot.get_updates(offset=offset, timeout_s=0, allowed_updates=["message"]) + except Exception as e: + print(f"[startup] backlog drain failed: {e}") + updates = [] + if updates: + offset = updates[-1]["update_id"] + 1 + print(f"[startup] drained {len(updates)} pending update(s)") + print("Option2 bridge running (codex mcp-server). Long-polling Telegram...") # Single worker queue so we never overlap tools/call @@ -348,13 +358,6 @@ def run( time.sleep(2.0) continue - if ignore_backlog: - if updates: - offset = updates[-1]["update_id"] + 1 - print(f"[startup] drained {len(updates)} pending update(s)") - continue - ignore_backlog = False - for upd in updates: offset = upd["update_id"] + 1 msg = upd.get("message") or {} diff --git a/codex_telegram_bridge/src/codex_telegram_bridge/tmux_reply_bot.py b/codex_telegram_bridge/src/codex_telegram_bridge/tmux_reply_bot.py index e413334..71d2982 100644 --- a/codex_telegram_bridge/src/codex_telegram_bridge/tmux_reply_bot.py +++ b/codex_telegram_bridge/src/codex_telegram_bridge/tmux_reply_bot.py @@ -45,6 +45,16 @@ def run( offset: Optional[int] = None ignore_backlog = bool(ignore_backlog) + + if ignore_backlog: + try: + updates = bot.get_updates(offset=offset, timeout_s=0, allowed_updates=["message"]) + except Exception as e: + print(f"[startup] backlog drain failed: {e}") + updates = [] + if updates: + offset = updates[-1]["update_id"] + 1 + print(f"[startup] drained {len(updates)} pending update(s)") print("Option3 reply bot running (tmux injector). Long-polling Telegram...") while True: @@ -55,13 +65,6 @@ def run( time.sleep(2.0) continue - if ignore_backlog: - if updates: - offset = updates[-1]["update_id"] + 1 - print(f"[startup] drained {len(updates)} pending update(s)") - continue - ignore_backlog = False - for upd in updates: offset = upd["update_id"] + 1 msg = upd.get("message") or {}