From 77274c12486749a4299cc77281dfb80fb7af42f7 Mon Sep 17 00:00:00 2001 From: yshtcn Date: Tue, 9 Jul 2024 10:19:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=B6=88=E6=81=AF=E8=BF=87?= =?UTF-8?q?=E9=95=BF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ServerChanPush2TelegramBot.py | 58 ++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/ServerChanPush2TelegramBot.py b/ServerChanPush2TelegramBot.py index 2491749..1aac0f4 100644 --- a/ServerChanPush2TelegramBot.py +++ b/ServerChanPush2TelegramBot.py @@ -163,30 +163,46 @@ def send_telegram_message(bot_id, chat_id, title, desp=None, url=None): text = escape(text) # 处理 HTML 标签 text = re.sub(r'<[^>]+>', '', text) # 移除所有 HTML 标签 + # 添加对消息长度的检查和拆分 + max_length = 4096 # Telegram 允许的最大消息长度 + messages = [] + while len(text) > max_length: + part = text[:max_length] + last_space = part.rfind(' ') + if last_space != -1: + part = part[:last_space] + messages.append(part) + text = text[len(part):].strip() + messages.append(text) + if url: - text += f"\n\n详情:" - text += f"{url}" - text = unescape_url(text) + for i in range(len(messages)): + if i == len(messages) - 1: + messages[i] += f"\n\n详情:{url}" + messages[i] = unescape_url(messages[i]) - payload = { - 'chat_id': chat_id, - 'text': text, - 'parse_mode': 'HTML', - 'disable_web_page_preview': False - } + success = True + for msg in messages: + payload = { + 'chat_id': chat_id, + 'text': msg, + 'parse_mode': 'HTML', + 'disable_web_page_preview': False + } - try: - response = requests.post(api_url, data=payload, proxies=proxies, timeout=2) - logging.info(f"response: {response.text}") - if response.status_code == 200 and response.json().get("ok"): - converted_sent_data = convert_str_gbk_to_utf8(str(payload)) - save_sent_data(api_url, converted_sent_data) - return True, response.json() - else: - return False, response.json() - except requests.RequestException as e: - logging.error(f"Failed to send message: {e}") - return False, None + try: + response = requests.post(api_url, data=payload, proxies=proxies, timeout=2) + logging.info(f"response: {response.text}") + if response.status_code == 200 and response.json().get("ok"): + converted_sent_data = convert_str_gbk_to_utf8(str(payload)) + save_sent_data(api_url, converted_sent_data) + else: + success = False + except requests.RequestException as e: + logging.error(f"Failed to send message: {e}") + success = False + + return success, None if success else {"error": "Failed to send all parts of the message"} @app.route('/', methods=['GET', 'POST'])