ForcePilot/backend/package/yuxi/channels/adapters/matrix/sticker.py
Kris 2063145ce1 feat(matrix): 新增完整的Matrix适配器工具集
新增了20+个Matrix相关工具模块,包含线程处理、自动加入、消息去重、配置管理、安全策略、媒体处理、命令解析等功能,完善Matrix适配器基础能力
2026-05-12 00:45:54 +08:00

47 lines
1.3 KiB
Python

from __future__ import annotations
from typing import Any
_STICKER_CONTENT_KEY = "body"
_STICKER_INFO_KEY = "info"
def is_sticker_event(event_source: dict[str, Any]) -> bool:
content = event_source.get("content", {})
return content.get("msgtype") == "m.sticker"
def parse_sticker(event_source: dict[str, Any]) -> dict[str, Any] | None:
content = event_source.get("content", {})
info = content.get("info", {})
mxc_url = content.get("url", "")
return {
"type": "sticker",
"body": content.get(_STICKER_CONTENT_KEY, ""),
"url": mxc_url,
"mimetype": info.get("mimetype", ""),
"width": info.get("w", 0),
"height": info.get("h", 0),
"text": f"[贴纸] {content.get(_STICKER_CONTENT_KEY, '')}" if content.get(_STICKER_CONTENT_KEY) else "[贴纸]",
}
def build_outbound_sticker(
sticker_url: str,
body: str = "",
mimetype: str = "image/png",
width: int = 0,
height: int = 0,
) -> dict[str, Any]:
content: dict[str, Any] = {
"msgtype": "m.sticker",
"body": body or "sticker",
"url": sticker_url,
"info": {"mimetype": mimetype},
}
if width and height:
content["info"]["w"] = width
content["info"]["h"] = height
return content