Python实现Telegram频道加粗文本发送失败求助
问题:Telegram MarkdownV2 加粗文本不生效且出现异常转义字符
问题原因
核心问题是转义时机错误:
- 先在消息中插入了MarkdownV2的加粗标记
*,随后调用转义函数时把这些*也转义了,导致Telegram无法识别为格式标记,只能将其当作普通文本显示 - 虽然
Sky Sports+中的+被转义为\+是符合规则的,但由于整体格式被破坏,显得异常
解决方案
调整逻辑:先转义用户输入的变量内容,再添加MarkdownV2格式标记,避免格式标记被误转义。
修正后的代码
转义函数可保留,需调整消息生成逻辑:
def escape_markdown_v2(text): special_chars = r"_[]()~`>#+|{}.!" for char in special_chars: text = text.replace(char, f'\\{char}') return text
def create_match_message(home_team, away_team, match_date, match_time, stadium, tv_channels): # 先转义所有变量中的特殊字符,避免破坏格式 escaped_home = escape_markdown_v2(home_team) escaped_away = escape_markdown_v2(away_team) escaped_date = escape_markdown_v2(match_date) escaped_time = escape_markdown_v2(match_time) escaped_stadium = escape_markdown_v2(stadium) escaped_tv = escape_markdown_v2(tv_channels) # 最后添加MarkdownV2加粗标记,此时*不会被转义 message = ( f"*{escaped_home} vs {escaped_away}*\n" f"*Date:* {escaped_date}\n" f"*Time:* {escaped_time}\n" f"*Venue:* {escaped_stadium}\n" f"*TV Channels:* {escaped_tv}" ) return message
发送函数无需修改:
def send_telegram_message(group_id, topic_id, message): url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = { "chat_id": group_id, "text": message, "reply_to_message_id": topic_id, "parse_mode": "MarkdownV2" } response = requests.post(url, json=payload) if response.status_code != 200: print(f"Error sending message: {response.status_code}, Response: {response.text}") else: print("Message sent successfully!")
效果说明
- 变量中的特殊字符(如
+)会被正确转义,不会干扰格式解析 - 加粗标记
*未被转义,Telegram会将其解析为加粗格式,最终消息会正常显示加粗效果
内容的提问来源于stack exchange,提问作者C0BRa
相关产品推荐
相关产品推荐

