Fix voice message forwarding and playback

This commit is contained in:
Курнат Андрей
2026-07-14 14:53:18 +03:00
parent edf108f621
commit 8e9a4c1151
13 changed files with 618 additions and 37 deletions
+25 -2
View File
@@ -686,8 +686,12 @@ async def normalize_attachment(client: Client, message: Any, att: Any, sort_orde
req = await client.get_video_by_id(int(chat_id), int(message_id), int(data["video_id"]))
req_data = dump_model(req)
remote_url = req_data.get("url") or remote_url
except Exception: # noqa: BLE001
pass
except Exception as exc: # noqa: BLE001
print(
f"Failed to resolve MAX {kind} download URL "
f"(chat_id={chat_id}, message_id={message_id}): {type(exc).__name__}: {exc}",
flush=True,
)
if kind == "photo":
content_type = "image/jpeg"
@@ -1247,6 +1251,24 @@ async def send_attachment(request: web.Request) -> web.Response:
return json_response({"success": bool(external_id), "externalMessageId": external_id or None, "error": None if external_id else "PyMax returned no message id.", "chatUrl": f"pymax://chat/{chat_id}"})
@route_errors
async def forward_message(request: web.Request) -> web.Response:
data = await read_json(request)
client = await runtime.get_client()
chat_id = parse_chat_id(data.get("externalChatId"))
source_chat_id = parse_chat_id(data.get("sourceExternalChatId"))
source_message_id = str(data.get("sourceExternalMessageId") or "").strip()
if not source_message_id:
raise ValueError("sourceExternalMessageId is required")
sent = await client.forward_message(
chat_id=chat_id,
message_id=source_message_id,
source_chat_id=source_chat_id,
)
external_id = clean_id(getattr(sent, "id", None))
return json_response({"success": bool(external_id), "externalMessageId": external_id or None, "error": None if external_id else "PyMax returned no forwarded message id.", "chatUrl": f"pymax://chat/{chat_id}"})
@route_errors
async def media_fetch(request: web.Request) -> web.StreamResponse:
remote_url = request.query.get("url")
@@ -1297,6 +1319,7 @@ def create_app() -> web.Application:
app.router.add_post("/chat/delete", chat_delete)
app.router.add_post("/send/text", send_text)
app.router.add_post("/send/attachment", send_attachment)
app.router.add_post("/message/forward", forward_message)
app.router.add_post("/message/edit", disabled_action)
app.router.add_post("/message/delete", disabled_action)
app.router.add_post("/message/reaction", disabled_action)