From f9ea0118d9ff0e00a090ed884f4e18dbc411fef5 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Mon, 22 Jun 2026 20:16:37 +0800 Subject: [PATCH] Handle Telegramify 1.2 compatibility --- app/chain/message.py | 8 ++++---- app/modules/telegram/telegram.py | 23 +++++++++++++++++++---- requirements.in | 4 ++-- tests/test_telegram.py | 9 +++++++++ 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/app/chain/message.py b/app/chain/message.py index b4024f86..a2bb1382 100644 --- a/app/chain/message.py +++ b/app/chain/message.py @@ -173,7 +173,7 @@ class MessageChain(ChainBase): images = CommingMessage.MessageImage.normalize_list(images) processing_status = None - continues_async = False + processing_finish_deferred = False try: # 语音输入只用于转写为文本,不默认改变回复形式。 has_audio_input = bool(audio_refs) @@ -228,7 +228,7 @@ class MessageChain(ChainBase): text=text, ) - continues_async = self._handle_message_core( + processing_finish_deferred = self._handle_message_core( channel=channel, source=source, userid=userid, @@ -241,9 +241,9 @@ class MessageChain(ChainBase): files=files, has_audio_input=has_audio_input, processing_status=processing_status, - ) + ) is True finally: - if continues_async: + if not processing_finish_deferred: self._mark_message_processing_finished( channel=channel, source=source, diff --git a/app/modules/telegram/telegram.py b/app/modules/telegram/telegram.py index a16db0aa..31471f07 100644 --- a/app/modules/telegram/telegram.py +++ b/app/modules/telegram/telegram.py @@ -15,8 +15,15 @@ from telebot.types import ( InlineKeyboardButton, InputMediaPhoto, ) -from telegramify_markdown import entities_to_markdownv2, standardize, telegramify # noqa -from telegramify_markdown.content import ContentTypes, File, Photo, Text +from telegramify_markdown import standardize, telegramify # noqa +try: + from telegramify_markdown import entities_to_markdownv2 # noqa +except ImportError: + entities_to_markdownv2 = None +try: + from telegramify_markdown.content import ContentTypes, File, Photo, Text +except ImportError: + from telegramify_markdown.type import ContentTypes, File, Photo, Text from app.core.config import settings from app.core.context import MediaInfo, Context @@ -255,14 +262,22 @@ class Telegram: @staticmethod def _telegramify_item_text(item: Text) -> str: """将 telegramify 文本片段转换为 Telegram MarkdownV2 字符串。""" - return entities_to_markdownv2(item.text, item.entities) + if hasattr(item, "content"): + return item.content + if entities_to_markdownv2: + return entities_to_markdownv2(item.text, item.entities) + return standardize(item.text) @staticmethod def _telegramify_item_caption(item: Text | File | Photo) -> str: """将 telegramify 文本或媒体片段转换为 Telegram MarkdownV2 caption。""" if isinstance(item, Text): return Telegram._telegramify_item_text(item) - return entities_to_markdownv2(item.caption_text, item.caption_entities) + if hasattr(item, "caption"): + return item.caption + if entities_to_markdownv2: + return entities_to_markdownv2(item.caption_text, item.caption_entities) + return standardize(item.caption_text) @staticmethod def _normalize_parse_mode(parse_mode: Optional[str] = None) -> str: diff --git a/requirements.in b/requirements.in index 9a302c87..5a33d243 100644 --- a/requirements.in +++ b/requirements.in @@ -37,8 +37,8 @@ beautifulsoup4~=4.15.0 pillow~=12.2.0 pillow-avif-plugin~=1.5.5 pyTelegramBotAPI~=4.34.0 -telegramify-markdown~=1.1.5 -cloakbrowser~=0.3.31 +telegramify-markdown~=1.2.0 +cloakbrowser~=0.4.0 torrentool~=1.2.0 fast-bencode~=1.1.8 slack-bolt~=1.28.0 diff --git a/tests/test_telegram.py b/tests/test_telegram.py index 9035a142..f892c189 100644 --- a/tests/test_telegram.py +++ b/tests/test_telegram.py @@ -253,6 +253,15 @@ def test_send_msg_markdown_escaping(telegram): assert send_kwargs["text"].startswith("*测试标题*\n") +def test_telegramify_new_content_fields_are_used_directly(): + """新版telegramify对象应直接使用已渲染的MarkdownV2字段""" + text_item = SimpleNamespace(content="已转义\\_文本") + file_item = SimpleNamespace(caption="已转义\\_说明") + + assert Telegram._telegramify_item_text(text_item) == "已转义\\_文本" + assert Telegram._telegramify_item_caption(file_item) == "已转义\\_说明" + + def test_send_msg_with_html_parse_mode_keeps_html(telegram): """HTML模式发送时应保留调用方传入的HTML内容""" result = telegram.send_msg(