Skip to content

fix(sessions): implement per-message sessions with captions and cancel#39

Merged
ZenonEl merged 1 commit into
mainfrom
fix/per-message-sessions
Mar 30, 2026
Merged

fix(sessions): implement per-message sessions with captions and cancel#39
ZenonEl merged 1 commit into
mainfrom
fix/per-message-sessions

Conversation

@ZenonEl
Copy link
Copy Markdown
Owner

@ZenonEl ZenonEl commented Mar 30, 2026

Summary

Fixes the critical bug where pressing a button on one link processed a different link.

  • Each link creates a MediaSession keyed by status message ID
  • Session ID embedded in all button callback data
  • Multiple links can coexist simultaneously per user
  • Expired sessions show friendly "Session expired" message
  • Cancel button added to distribution keyboard
  • Caption extracted from message text alongside URL

Closes #30

Architecture

User sends link → MediaSession created (key = status msgId)
→ Keyboard buttons: send_to_all:{msgId}, cancel:{msgId}
→ Button press → lookup session by msgId → process correct URL

New files

  • TelegramBot/Sessions/MediaSession.cs — session model
  • TelegramBot/Sessions/MediaSessionManager.cs — ConcurrentDictionary manager with TTL
  • TelegramBot/Handlers/ICallBackQuery/IMediaSessionCallbackQuery.cs — 6 session-aware handlers

Test plan

  • dotnet build passes
  • Send 3 links, press button on first → correct link processed
  • Expired session → "Session expired" message
  • Cancel button removes session
  • Caption from message text sent with media

…closes #30

Replace single-URL-per-user state (ProcessVideoDC) with per-link MediaSession
keyed by status message ID. Each link now gets its own session with independent
URL, caption, and cancellation token, so pressing a button always processes the
correct link regardless of how many were sent.

Changes:
- Add MediaSession and MediaSessionManager (ConcurrentDictionary-based)
- Encode session ID in keyboard callback data (send_to_all_contacts:{id}, etc.)
- Add parameterized callback handlers for all distribution actions + cancel
- Route media session callbacks through factory before UserSession check
- Add Cancel button to distribution keyboard
- Handle expired sessions with user-friendly alert
- Add resource strings for Cancel, SessionExpired, Cancelled (EN + RU)
@ZenonEl ZenonEl merged commit 0c090c0 into main Mar 30, 2026
1 check passed
@ZenonEl ZenonEl deleted the fix/per-message-sessions branch March 30, 2026 02:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix link processing: per-message sessions, captions, cancel buttons

1 participant