feat(talkbot): preserve image captions and support replies

Tento commit je obsažen v:
2026-09-05 17:02:54 +02:00
rodič 884c30b546
revize 162416ae1a
+33 -3
Zobrazit soubor
@@ -354,6 +354,25 @@ def actor_user_id(actor: dict) -> str:
return actor_id
def extract_reply_to_message_id(obj: dict) -> Optional[int]:
in_reply_to = obj.get("inReplyTo")
if not isinstance(in_reply_to, dict):
return None
reply_object = in_reply_to.get("object")
reply_id = (
reply_object.get("id")
if isinstance(reply_object, dict)
else in_reply_to.get("id")
)
try:
return int(reply_id) if reply_id is not None else None
except (TypeError, ValueError):
return None
def get_conversation_participants(token: str) -> list[dict]:
response = httpx.get(
f"{NC_URL}/ocs/v2.php/apps/spreed/api/v4/room/{token}/participants",
@@ -923,7 +942,15 @@ def share_file_to_talk(
def post_manager_message(
token: str,
message: str,
reply_to_message_id: Optional[int] = None,
) -> int:
data = {
"message": message,
}
if reply_to_message_id is not None:
data["replyTo"] = str(reply_to_message_id)
response = httpx.post(
f"{NC_URL}/ocs/v2.php/apps/spreed/api/v1/chat/{token}",
headers={
@@ -931,9 +958,7 @@ def post_manager_message(
"Accept": "application/json",
},
auth=(NC_USER, NC_PASSWORD),
data={
"message": message,
},
data=data,
timeout=30,
)
@@ -1214,6 +1239,7 @@ def process_event(job: dict) -> None:
file_param = job.get("file_param")
message_text = job.get("message_text", "")
preserve_original = job.get("preserve_original", False)
reply_to_message_id = job.get("reply_to_message_id")
try:
recipients = get_target_user_ids(
@@ -1319,6 +1345,7 @@ def process_event(job: dict) -> None:
post_manager_message(
token,
f"@{sender_display_name}: {translated}",
reply_to_message_id=reply_to_message_id,
)
log.info(
@@ -1471,6 +1498,8 @@ async def webhook(
}
)
reply_to_message_id = extract_reply_to_message_id(obj)
if LOG_WEBHOOK_PAYLOAD:
log.warning(
"Webhook payload for message %s: %s",
@@ -1565,6 +1594,7 @@ async def webhook(
"file_param": file_param,
"message_text": message_text,
"preserve_original": preserve_original,
"reply_to_message_id": reply_to_message_id,
}
)