Skip to content
Merged
Show file tree
Hide file tree
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
5 changes: 5 additions & 0 deletions gateway/platforms/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1034,6 +1034,11 @@ def merge_pending_message_event(
existing.text = event.text
if existing_is_photo or incoming_is_photo:
existing.message_type = MessageType.PHOTO
elif (
getattr(existing, "message_type", None) == MessageType.TEXT
and event.message_type != MessageType.TEXT
):
existing.message_type = event.message_type
return

if (
Expand Down
33 changes: 33 additions & 0 deletions tests/gateway/test_session_race_guard.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,39 @@ def test_merge_pending_message_event_merges_text_and_photo_followups():
assert merged.media_types == ["image/png"]


def test_merge_pending_message_event_promotes_document_followups_over_text():
pending = {}
source = SessionSource(
platform=Platform.TELEGRAM,
chat_id="12345",
chat_type="dm",
user_id="u1",
)
session_key = build_session_key(source)

text_event = MessageEvent(
text="please review this",
message_type=MessageType.TEXT,
source=source,
)
document_event = MessageEvent(
text="",
message_type=MessageType.DOCUMENT,
source=source,
media_urls=["/tmp/report.pdf"],
media_types=["application/pdf"],
)

merge_pending_message_event(pending, session_key, text_event, merge_text=True)
merge_pending_message_event(pending, session_key, document_event, merge_text=True)

merged = pending[session_key]
assert merged.message_type == MessageType.DOCUMENT
assert merged.text == "please review this"
assert merged.media_urls == ["/tmp/report.pdf"]
assert merged.media_types == ["application/pdf"]


@pytest.mark.asyncio
async def test_recent_telegram_text_followup_is_queued_without_interrupt():
runner = _make_runner()
Expand Down
Loading