From 70a5c36e57249d30c256c7f4c74ecea16a5fef91 Mon Sep 17 00:00:00 2001 From: kislovdm Date: Thu, 9 Apr 2026 13:12:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B5=D0=B0=D0=BA=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D1=81=D1=8B=D0=BB=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B2=20=D1=82=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bridge.py | 1 + src/reverse_bridge.py | 16 ++++++++++++++++ src/telegram_api.py | 11 +++++++++++ 3 files changed, 28 insertions(+) diff --git a/src/bridge.py b/src/bridge.py index 3dd4028..eb8237f 100644 --- a/src/bridge.py +++ b/src/bridge.py @@ -33,6 +33,7 @@ class MaxToTelegramBridge: # - если найден целевой Telegram-чат (не fallback): "Ирина:\n<текст>" # - если fallback: "Ирина / Свободный микрофон:\n<текст>" # Решение о том, включать ли название чата, принимаем после определения маршрута. + has_any_payload = bool((parsed.text or "").strip()) or bool(parsed.image_urls) or bool(parsed.video_urls) if not has_any_payload: logger.debug("Skip empty message %s/%s", parsed.chat_id, parsed.message_id) return diff --git a/src/reverse_bridge.py b/src/reverse_bridge.py index e13791f..5f7810e 100644 --- a/src/reverse_bridge.py +++ b/src/reverse_bridge.py @@ -271,6 +271,16 @@ class TelegramToMaxBridge: logger.error("Cannot resolve MAX message id after sending media group (chat_id=%s)", max_chat_id) return + # Реакция на каждое сообщение альбома в Telegram — best effort. + for m in messages: + mid = m.get("message_id") + if mid is None: + continue + try: + await self._telegram.add_reaction(chat_id=telegram_chat_id, message_id=str(mid), emoji="🦄") + except Exception: + logger.debug("Cannot add Telegram reaction", exc_info=True) + for m in messages: tid = str(m.get("message_id")) if tid: @@ -322,6 +332,12 @@ class TelegramToMaxBridge: logger.error("Cannot resolve MAX message id after sending (chat_id=%s)", max_chat_id) return + # Реакция в Telegram: best effort. + try: + await self._telegram.add_reaction(chat_id=telegram_chat_id, message_id=telegram_message_id, emoji="🦄") + except Exception: + logger.debug("Cannot add Telegram reaction", exc_info=True) + self._storage.save_mapping( telegram_chat_id=telegram_chat_id, telegram_message_id=telegram_message_id, diff --git a/src/telegram_api.py b/src/telegram_api.py index 564a534..2aa5d47 100644 --- a/src/telegram_api.py +++ b/src/telegram_api.py @@ -120,6 +120,17 @@ class TelegramClient: raise TelegramApiError(f"Telegram getFile: missing file_path {data}") return f"{self._file_base_url}/{file_path}" + async def add_reaction(self, *, chat_id: str, message_id: str, emoji: str) -> None: + # setMessageReaction доступен не везде/не всегда; ошибки реакции не должны ломать бридж + await self._request( + "setMessageReaction", + { + "chat_id": chat_id, + "message_id": int(message_id), + "reaction": [{"type": "emoji", "emoji": emoji}], + }, + ) + async def _find_chat_id_by_title(self, chat_title: str) -> str | None: normalized = self._normalize_title(chat_title) if not normalized: