Skip to content

Commit b41ae6c

Browse files
CopilotBukeLy
andcommitted
Refactor: Extract reply_to_id logic into helper function and improve comments
Co-authored-by: BukeLy <19304666+BukeLy@users.noreply.github.com>
1 parent 3f42aa2 commit b41ae6c

1 file changed

Lines changed: 23 additions & 19 deletions

File tree

agent-sdk-client/consumer.py

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,23 @@
1515
from config import Config
1616

1717

18+
def _get_reply_to_id(message_id: int, thread_id: int | None, message_thread_id: int | None) -> int | None:
19+
"""Determine if we should reply to the original message.
20+
21+
Only reply to the original message if we're in the same thread.
22+
This prevents Telegram API errors when sending to a different thread (e.g., /newchat).
23+
24+
Args:
25+
message_id: The original message ID
26+
thread_id: The target thread ID (may be overridden by handler)
27+
message_thread_id: The original message's thread ID
28+
29+
Returns:
30+
message_id if in same thread, None otherwise
31+
"""
32+
return message_id if thread_id == message_thread_id else None
33+
34+
1835
def lambda_handler(event: dict, context: Any) -> dict:
1936
"""SQS Consumer Lambda entry point."""
2037
for record in event['Records']:
@@ -43,6 +60,7 @@ async def process_message(message_data: dict) -> None:
4360
"""Process single message from SQS queue."""
4461
import logging
4562
logger = logging.getLogger()
63+
# Enable INFO logging as suggested in issue for better debugging
4664
logger.setLevel(logging.INFO)
4765

4866
config = Config.from_env()
@@ -56,7 +74,8 @@ async def process_message(message_data: dict) -> None:
5674
logger.warning("Received update with no message or edited_message")
5775
return
5876

59-
# Use message_data fields for SQS message (allows handler to override text/thread_id)
77+
# Extract thread_id and user_message early - needed for all message processing
78+
# (allows handler to override text/thread_id via SQS message_data)
6079
user_message = message_data.get('text') or message.text
6180
thread_id = message_data.get('thread_id') or message.message_thread_id
6281

@@ -67,12 +86,7 @@ async def process_message(message_data: dict) -> None:
6786
"Handling local command in consumer (fallback path)",
6887
extra={'chat_id': message.chat_id, 'message_id': message.message_id},
6988
)
70-
# Only reply to original message if we're in the same thread
71-
reply_to_id = (
72-
message.message_id
73-
if thread_id == message.message_thread_id
74-
else None
75-
)
89+
reply_to_id = _get_reply_to_id(message.message_id, thread_id, message.message_thread_id)
7690
try:
7791
await bot.send_message(
7892
chat_id=message.chat_id,
@@ -93,12 +107,7 @@ async def process_message(message_data: dict) -> None:
93107
'message_id': message.message_id,
94108
},
95109
)
96-
# Only reply to original message if we're in the same thread
97-
reply_to_id = (
98-
message.message_id
99-
if thread_id == message.message_thread_id
100-
else None
101-
)
110+
reply_to_id = _get_reply_to_id(message.message_id, thread_id, message.message_thread_id)
102111
try:
103112
await bot.send_message(
104113
chat_id=message.chat_id,
@@ -175,12 +184,7 @@ async def process_message(message_data: dict) -> None:
175184
text = text[:4000] + "\n\n... (truncated)"
176185

177186
# Send response to Telegram
178-
# Only reply to original message if we're in the same thread
179-
reply_to_id = (
180-
message.message_id
181-
if thread_id == message.message_thread_id
182-
else None
183-
)
187+
reply_to_id = _get_reply_to_id(message.message_id, thread_id, message.message_thread_id)
184188

185189
try:
186190
await bot.send_message(

0 commit comments

Comments
 (0)