From 6ce08ee602610df2eaf403f1b298addacae06c6f Mon Sep 17 00:00:00 2001 From: Lewis Freiberg <1716917+l3wi@users.noreply.github.com> Date: Tue, 13 Jan 2026 00:58:18 +0100 Subject: [PATCH] feat(transport): add sender_id and raw to MessageRef for plugins (#112) Co-authored-by: Lewis Freiberg --- src/takopi/telegram/commands.py | 6 ++++- src/takopi/transport.py | 1 + tests/test_transport.py | 39 +++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 tests/test_transport.py diff --git a/src/takopi/telegram/commands.py b/src/takopi/telegram/commands.py index 434596f..53a787e 100644 --- a/src/takopi/telegram/commands.py +++ b/src/takopi/telegram/commands.py @@ -1537,7 +1537,11 @@ async def _dispatch_command( stateful_mode=stateful_mode, ) message_ref = MessageRef( - channel_id=chat_id, message_id=user_msg_id, thread_id=msg.thread_id + channel_id=chat_id, + message_id=user_msg_id, + thread_id=msg.thread_id, + sender_id=msg.sender_id, + raw=msg.raw, ) try: backend = get_command(command_id, allowlist=allowlist, required=False) diff --git a/src/takopi/transport.py b/src/takopi/transport.py index 19c71a2..f07b1ef 100644 --- a/src/takopi/transport.py +++ b/src/takopi/transport.py @@ -14,6 +14,7 @@ class MessageRef: message_id: MessageId raw: Any | None = field(default=None, compare=False, hash=False) thread_id: ThreadId | None = field(default=None, compare=False, hash=False) + sender_id: int | None = field(default=None, compare=False, hash=False) @dataclass(frozen=True, slots=True) diff --git a/tests/test_transport.py b/tests/test_transport.py new file mode 100644 index 0000000..eda4c5e --- /dev/null +++ b/tests/test_transport.py @@ -0,0 +1,39 @@ +"""Tests for the transport module.""" + +from takopi.transport import MessageRef + + +def test_message_ref_sender_id_field() -> None: + """Test that MessageRef has sender_id field and it works correctly.""" + # Without sender_id + ref1 = MessageRef(channel_id=123, message_id=456) + assert ref1.sender_id is None + + # With sender_id + ref2 = MessageRef(channel_id=123, message_id=456, sender_id=789) + assert ref2.sender_id == 789 + + # sender_id should not affect equality (compare=False) + ref3 = MessageRef(channel_id=123, message_id=456, sender_id=999) + assert ref2 == ref3 # Same channel_id and message_id + + # sender_id should not affect hash (hash=False) + assert hash(ref2) == hash(ref3) + + +def test_message_ref_all_fields() -> None: + """Test MessageRef with all fields populated.""" + raw_data = {"from": {"id": 789, "first_name": "Test"}} + ref = MessageRef( + channel_id=123, + message_id=456, + raw=raw_data, + thread_id=100, + sender_id=789, + ) + + assert ref.channel_id == 123 + assert ref.message_id == 456 + assert ref.raw == raw_data + assert ref.thread_id == 100 + assert ref.sender_id == 789