使用Telethon Python修改消息时,如何保留原消息的字体与链接?
消息编辑保留格式的正确实现
直接拼接字符串导致格式丢失的核心原因:你仅拼接了纯文本内容,原消息的富文本格式(字体样式、链接等)存储在单独的实体字段中,并未传递到编辑接口。
以下是主流Telegram SDK的解决方案:
Pyrogram 实现方案
原消息的entities字段保存了格式、链接等信息,编辑时需同时传入文本和实体:
# 提取原消息的文本与格式实体 old_text = message.text old_entities = message.entities # 拼接新内容 new_text = old_text + new_str # 编辑消息时传入实体参数,保留原格式 client.edit_message(chat_id=chat, message_id=message.id, text=new_text, entities=old_entities)
如果新字符串需要添加格式,需构建对应的实体对象并合并到old_entities中,同时调整实体的偏移量以匹配新文本位置。
Telethon 实现方案
Telethon中格式实体存储在message.entities,编辑时通过formatting_entities参数传递:
old_text = message.message old_entities = message.entities new_text = old_text + new_str client.edit_message(chat, message.id, new_text, formatting_entities=old_entities)
若新内容需格式,需创建对应MessageEntity子类实例,合并到原有实体列表后传入。
核心注意事项
- 避免直接将消息对象转为字符串拼接,需单独提取文本内容和格式实体
- 编辑接口必须同时接收文本和实体参数才能保留富文本格式
- 新增内容带格式时,需确保实体偏移量与新文本的字符位置对应
内容的提问来源于stack exchange,提问作者johan1
相关产品推荐
相关产品推荐

