如何使用Telethon编辑带等宽/HTML格式的Telegram消息?
编辑Telegram消息时保留格式的解决方案
问题背景
用Telethon发送消息时,parse_mode参数(如parse_mode='markdown'或parse_mode='html')能正常解析等宽(monospace)或HTML格式,但编辑已发送消息时,该参数无法直接使用,手动编写entities又因文本长、包含多个变量导致偏移量和长度计算困难。
解决方法
方法1:用Telethon内置工具自动解析格式
Telethon提供了parse_message_text工具,可以直接将带Markdown/HTML格式的文本解析成对应的消息内容和entities,无需手动计算偏移量和长度。
示例代码(Markdown格式):
from telethon.helpers import parse_message_text from telethon.tl.types import EditMessageRequest # 包含变量的带格式文本 variable1 = "8632496" variable2 = "9832798237" formatted_text = f"the authentication code `{variable1}`, new code `{variable2}`" # 解析Markdown格式,得到处理后的文本和实体列表 parsed_text, entities = parse_message_text(formatted_text, parse_mode='markdown') # 执行消息编辑 client(EditMessageRequest( peer=To_id, id=sent_message.id, message=parsed_text, entities=entities ))
方法2:使用HTML格式解析
如果更习惯用HTML格式,同样可以用parse_message_text解析<code>标签实现等宽效果:
formatted_text = f"the authentication code <code>{variable1}</code>, new code <code>{variable2}</code>" parsed_text, entities = parse_message_text(formatted_text, parse_mode='html') client(EditMessageRequest( peer=To_id, id=sent_message.id, message=parsed_text, entities=entities ))
最佳实践
- 优先使用
parse_message_text工具,完全替代手动编写entities,避免计算错误 - 封装重复操作成工具函数,简化代码:
from telethon.helpers import parse_message_text from telethon.tl.types import EditMessageRequest def edit_formatted_msg(client, target_peer, msg_id, content, parse_mode='markdown'): parsed_content, entities = parse_message_text(content, parse_mode) return client(EditMessageRequest( peer=target_peer, id=msg_id, message=parsed_content, entities=entities )) # 调用示例 edit_formatted_msg(client, To_id, sent_message.id, f"updated code `{new_auth_code}`")
- 若使用HTML格式,注意转义特殊字符(如
<、>、&),或直接选择Markdown格式以简化特殊字符处理 - 调试时可打印
parsed_text和entities,确认解析结果符合预期后再执行编辑操作
内容的提问来源于stack exchange,提问作者mostafa a
相关产品推荐
相关产品推荐

