Implement delay timing

This commit is contained in:
2026-02-17 21:49:33 +00:00
parent dc28745fc3
commit eedad846ef
6 changed files with 310 additions and 34 deletions

View File

@@ -42,7 +42,9 @@ def _is_internal_compose_blob_url(value: str) -> bool:
def _is_compose_blob_only_text(text_value: str) -> bool:
lines = [line.strip() for line in str(text_value or "").splitlines() if line.strip()]
lines = [
line.strip() for line in str(text_value or "").splitlines() if line.strip()
]
if not lines:
return False
return all(_is_internal_compose_blob_url(line) for line in lines)

View File

@@ -48,7 +48,9 @@ async def download_and_encode_base64(file_url, filename, content_type, session=N
return None
file_data = await response.read()
base64_encoded = base64.b64encode(file_data).decode("utf-8")
return f"data:{content_type};filename={filename};base64,{base64_encoded}"
return (
f"data:{content_type};filename={filename};base64,{base64_encoded}"
)
async with aiohttp.ClientSession() as local_session:
async with local_session.get(file_url, timeout=10) as response:
@@ -104,7 +106,9 @@ async def send_message_raw(recipient_uuid, text=None, attachments=None):
file_url = row.get("url")
if not file_url:
return None
return await download_and_encode_base64(file_url, filename, content_type, session)
return await download_and_encode_base64(
file_url, filename, content_type, session
)
# Asynchronously resolve and encode all attachments
attachments = attachments or []

View File

@@ -2168,9 +2168,8 @@ class WhatsAppClient(ClientBase):
if not isinstance(payload, (bytes, bytearray)):
return []
filename = (
self._pluck(msg_obj, "documentMessage", "fileName")
or self._pluck(msg_obj, "document_message", "file_name")
filename = self._pluck(msg_obj, "documentMessage", "fileName") or self._pluck(
msg_obj, "document_message", "file_name"
)
content_type = (
self._pluck(msg_obj, "documentMessage", "mimetype")
@@ -2184,7 +2183,9 @@ class WhatsAppClient(ClientBase):
or self._infer_media_content_type(msg_obj)
)
if not filename:
ext = mimetypes.guess_extension(str(content_type or "").split(";", 1)[0].strip().lower())
ext = mimetypes.guess_extension(
str(content_type or "").split(";", 1)[0].strip().lower()
)
filename = f"wa-{int(time.time())}{ext or '.bin'}"
blob_key = media_bridge.put_blob(
service="whatsapp",
@@ -2749,7 +2750,9 @@ class WhatsAppClient(ClientBase):
"whatsapp media send ok: method=%s filename=%s ts=%s",
send_method,
filename,
self._normalize_timestamp(self._pluck(response, "Timestamp") or 0),
self._normalize_timestamp(
self._pluck(response, "Timestamp") or 0
),
)
except Exception as exc:
self.log.warning("whatsapp attachment send failed: %s", exc)
@@ -2984,7 +2987,9 @@ class WhatsAppClient(ClientBase):
]
for args in attempts:
try:
response = await self._call_client_method(method, *args, timeout=9.0)
response = await self._call_client_method(
method, *args, timeout=9.0
)
if response is not None:
self.log.debug(
"reaction-bridge whatsapp-send ok method=%s args_len=%s",

View File

@@ -1188,7 +1188,9 @@ class XMPPComponent(ComponentXMPP):
recipient_service,
identifier.identifier,
emoji=str(reaction_payload.get("emoji") or ""),
target_message_id=str((bridge or {}).get("upstream_message_id") or ""),
target_message_id=str(
(bridge or {}).get("upstream_message_id") or ""
),
target_timestamp=int((bridge or {}).get("upstream_ts") or 0),
target_author=str((bridge or {}).get("upstream_author") or ""),
remove=bool(reaction_payload.get("remove")),
@@ -1542,7 +1544,9 @@ class XMPPComponent(ComponentXMPP):
service=person_identifier.service,
xmpp_message_id=xmpp_id,
xmpp_ts=int(time.time() * 1000),
upstream_message_id=str((source_ref or {}).get("upstream_message_id") or ""),
upstream_message_id=str(
(source_ref or {}).get("upstream_message_id") or ""
),
upstream_author=str((source_ref or {}).get("upstream_author") or ""),
upstream_ts=int((source_ref or {}).get("upstream_ts") or 0),
text_preview=str(text or ""),
@@ -1553,9 +1557,13 @@ class XMPPComponent(ComponentXMPP):
identifier=person_identifier,
source_service=person_identifier.service,
local_message_id=str((source_ref or {}).get("legacy_message_id") or ""),
local_ts=int((source_ref or {}).get("xmpp_source_ts") or int(time.time() * 1000)),
local_ts=int(
(source_ref or {}).get("xmpp_source_ts") or int(time.time() * 1000)
),
xmpp_message_id=xmpp_id,
upstream_message_id=str((source_ref or {}).get("upstream_message_id") or ""),
upstream_message_id=str(
(source_ref or {}).get("upstream_message_id") or ""
),
upstream_author=str((source_ref or {}).get("upstream_author") or ""),
upstream_ts=int((source_ref or {}).get("upstream_ts") or 0),
)
@@ -1569,7 +1577,9 @@ class XMPPComponent(ComponentXMPP):
service=person_identifier.service,
xmpp_message_id=xmpp_id,
xmpp_ts=int(time.time() * 1000),
upstream_message_id=str((source_ref or {}).get("upstream_message_id") or ""),
upstream_message_id=str(
(source_ref or {}).get("upstream_message_id") or ""
),
upstream_author=str((source_ref or {}).get("upstream_author") or ""),
upstream_ts=int((source_ref or {}).get("upstream_ts") or 0),
text_preview=str(text or ""),
@@ -1580,9 +1590,13 @@ class XMPPComponent(ComponentXMPP):
identifier=person_identifier,
source_service=person_identifier.service,
local_message_id=str((source_ref or {}).get("legacy_message_id") or ""),
local_ts=int((source_ref or {}).get("xmpp_source_ts") or int(time.time() * 1000)),
local_ts=int(
(source_ref or {}).get("xmpp_source_ts") or int(time.time() * 1000)
),
xmpp_message_id=xmpp_id,
upstream_message_id=str((source_ref or {}).get("upstream_message_id") or ""),
upstream_message_id=str(
(source_ref or {}).get("upstream_message_id") or ""
),
upstream_author=str((source_ref or {}).get("upstream_author") or ""),
upstream_ts=int((source_ref or {}).get("upstream_ts") or 0),
)
@@ -1611,7 +1625,9 @@ class XMPPComponent(ComponentXMPP):
service=person_identifier.service,
xmpp_message_id=str(row.get("xmpp_message_id") or "").strip(),
xmpp_ts=int(time.time() * 1000),
upstream_message_id=str((source_ref or {}).get("upstream_message_id") or ""),
upstream_message_id=str(
(source_ref or {}).get("upstream_message_id") or ""
),
upstream_author=str((source_ref or {}).get("upstream_author") or ""),
upstream_ts=int((source_ref or {}).get("upstream_ts") or 0),
text_preview=str(row.get("url") or text or ""),
@@ -1622,13 +1638,21 @@ class XMPPComponent(ComponentXMPP):
identifier=person_identifier,
source_service=person_identifier.service,
local_message_id=str((source_ref or {}).get("legacy_message_id") or ""),
local_ts=int((source_ref or {}).get("xmpp_source_ts") or int(time.time() * 1000)),
local_ts=int(
(source_ref or {}).get("xmpp_source_ts") or int(time.time() * 1000)
),
xmpp_message_id=str(row.get("xmpp_message_id") or "").strip(),
upstream_message_id=str((source_ref or {}).get("upstream_message_id") or ""),
upstream_message_id=str(
(source_ref or {}).get("upstream_message_id") or ""
),
upstream_author=str((source_ref or {}).get("upstream_author") or ""),
upstream_ts=int((source_ref or {}).get("upstream_ts") or 0),
)
return [str(row.get("url") or "").strip() for row in normalized_rows if str(row.get("url") or "").strip()]
return [
str(row.get("url") or "").strip()
for row in normalized_rows
if str(row.get("url") or "").strip()
]
class XMPPClient(ClientBase):