feat(talkbot): preserve image captions and support replies
Tento commit je obsažen v:
@@ -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,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Odkázat v novém úkolu
Zablokovat Uživatele