From 3e75cb6ef61b6d2c0e198a9dc014b03264f49245 Mon Sep 17 00:00:00 2001 From: zayac Date: Mon, 3 Jun 2024 22:58:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E9=99=90=E6=B5=81?= =?UTF-8?q?=E5=99=A8,=E7=8E=B0=E5=9C=A8=E9=99=90=E6=B5=81=E5=99=A8?= =?UTF-8?q?=E6=98=AF=E6=A0=B9=E6=8D=AEbot=5Ftoken=E9=99=90=E6=B5=81?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/message_server.py | 44 ++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/src/core/message_server.py b/src/core/message_server.py index 6708823..dbd0e4e 100644 --- a/src/core/message_server.py +++ b/src/core/message_server.py @@ -17,7 +17,6 @@ telegram_bot_token = os.getenv("TELEGRAM_BOT_TOKEN") logger.remove() # 添加新的日志处理器,设置日志级别为 DEBUG - logger.add(sys.stderr, level="INFO") @@ -48,11 +47,13 @@ async def _send_message_to_user(bot_token, target_id, message, rate_limiter, ses await asyncio.sleep(1) return await _send_message_to_user(bot_token, target_id, message, rate_limiter, session) + parse_mode = determine_parse_mode(message) + base_url = f"https://api.telegram.org/bot{bot_token}/sendMessage" params = { "chat_id": target_id, "text": message, - "parse_mode": "MarkdownV2" + "parse_mode": parse_mode } max_retry = 3 @@ -74,15 +75,46 @@ async def _send_message_to_user(bot_token, target_id, message, rate_limiter, ses logger.debug('消息发送失败') +def determine_parse_mode(message_text): + """ + Determine the appropriate parse mode based on the message content. + For simplicity, assume that if the message contains certain HTML tags, use HTML parse mode. + Otherwise, use MarkdownV2. + """ + html_tags = ['', '', '', '', '
']
+    if any(tag in message_text for tag in html_tags):
+        return 'HTML'
+    return 'MarkdownV2'
+
+
+def parse_message(body):
+    parts = body.split('|')
+    if len(parts) == 3:
+        bot_token, target_id, message_text = parts
+    else:
+        parts = body.split('#')
+        if len(parts) == 3:
+            bot_token, target_id, message_text = parts
+        else:
+            raise ValueError("Unknown message format")
+    return bot_token, target_id, message_text
+
+
 async def message_handler(message: aio_pika.IncomingMessage):
     async with message.process():
         logger.info(message.body.decode())
-        bot_token, target_id, message_text = message.body.decode().split('|')
+        try:
+            bot_token, target_id, message_text = parse_message(message.body.decode())
+        except ValueError as e:
+            logger.error(f'无法解析消息格式: {e}')
+            return
+
         if target_id.startswith('-'):  # 群组ID以'-'开头
-            rate_limiter = group_rate_limiters[target_id]
+            rate_limiter = group_rate_limiters[bot_token]
         else:
-            rate_limiter = rate_limiters[target_id]
-        await _send_message_to_user(bot_token, target_id, message_text, rate_limiter, session)
+            rate_limiter = rate_limiters[bot_token]
+        if message_text:
+            await _send_message_to_user(bot_token, target_id, message_text, rate_limiter, session)
 
 
 async def main():