Реализованы задачи бэклога 1-5 (1я не до конца)

This commit is contained in:
mi
2026-07-21 12:50:46 +03:00
parent 3b71caf7b3
commit 0d7f7a819f
105 changed files with 7185 additions and 38 deletions
@@ -41,6 +41,11 @@ from app.postgres import create_postgres_engine
logger = logging.getLogger("bitrix-local-app")
BITRIX_SENDER_PREFIX = re.compile(
r"^\[b\][^\r\n\[]+:\[/b\]\s*(?:\[br\]\s*)?",
re.IGNORECASE,
)
CONNECTOR_ICON_DATA_URI = "data:image/svg+xml," + quote(
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">'
'<path fill="#fff" d="M20 20h15v25h30V20h15v60H65V60H35v20H20z"/>'
@@ -222,6 +227,10 @@ def first(value: Any, *paths: tuple[str, ...]) -> Any:
return None
def strip_bitrix_sender_prefix(text: str) -> str:
return BITRIX_SENDER_PREFIX.sub("", text, count=1)
def normalize_event(payload: dict[str, Any]) -> dict[str, Any] | None:
event = str(payload.get("event", "")).upper()
if event not in {
@@ -257,6 +266,7 @@ def normalize_event(payload: dict[str, Any]) -> dict[str, Any] | None:
text_value = str(
first(data, ("MESSAGES", "0", "message", "text"), ("MESSAGE", "TEXT")) or ""
)
text_value = strip_bitrix_sender_prefix(text_value)
files_raw = first(data, ("MESSAGES", "0", "message", "files"), ("MESSAGE", "FILES")) or []
if isinstance(files_raw, dict):
files_raw = list(files_raw.values())
@@ -58,12 +58,36 @@ def test_normalize_message_and_finish():
assert message["event_type"] == "message.new"
assert message["external_chat_id"] == external
assert message["bitrix_message_id"] == "86497"
assert message["message"]["text"] == "Ответ"
closed = normalize_event(
{"event": "ONIMCONNECTORDIALOGFINISH", "data": {"external_chat_id": external}}
)
assert closed["event_type"] == "dialog.closed"
def test_normalize_message_removes_bitrix_sender_prefix():
external = str(uuid.uuid4())
message = normalize_event(
{
"event": "ONIMCONNECTORMESSAGEADD",
"data": {
"MESSAGES": [
{
"im": {"message_id": 86498},
"chat": {"id": external},
"message": {
"text": "[b]Антон Пичугин:[/b] [br]опять ты?",
"files": [],
},
}
]
},
}
)
assert message["message"]["text"] == "опять ты?"
def test_normalize_bitrix_file_uses_download_url_and_infers_mime_type():
external = str(uuid.uuid4())
message = normalize_event(