Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 23 additions & 5 deletions src/ccbot/handlers/interactive_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import logging

from telegram import Bot, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.error import BadRequest

from ..session import session_manager
from ..terminal_parser import extract_interactive_content, is_interactive_ui
Expand Down Expand Up @@ -202,13 +203,24 @@ async def handle_interactive_ui(
)
_interactive_mode[ikey] = window_id
return True
except Exception:
# Edit failed (message deleted, etc.) - clear stale msg_id and send new
except BadRequest as e:
if "Message is not modified" in str(e):
# Content unchanged — keep existing message as-is
_interactive_mode[ikey] = window_id
return True
# Other edit failure — fall through to send new message,
# but keep old message until replacement succeeds
logger.debug(
"Edit failed for interactive msg %s: %s, sending new",
existing_msg_id,
e,
)
except Exception as e:
logger.debug(
"Edit failed for interactive msg %s, sending new", existing_msg_id
"Edit failed for interactive msg %s: %s, sending new",
existing_msg_id,
e,
)
_interactive_msgs.pop(ikey, None)
# Fall through to send new message

# Send new message (plain text — terminal content is not markdown)
logger.info(
Expand All @@ -228,6 +240,12 @@ async def handle_interactive_ui(
if sent:
_interactive_msgs[ikey] = sent.message_id
_interactive_mode[ikey] = window_id
# New message sent successfully — now safe to delete the old one
if existing_msg_id:
try:
await bot.delete_message(chat_id=chat_id, message_id=existing_msg_id)
except Exception:
pass # Old message may already be gone
return True
return False

Expand Down
Loading