当在 Python 中使用 Telethon 发送等宽或 HTML 文本的 Telegram 消息时,
parse_mode
选项(例如 parse_mode='markdown'
或 parse_mode='html'
)在初始消息发送期间效果很好。但是,当尝试编辑以前发送的消息时,parse_mode 选项似乎不可用。如何有效地编辑消息并合并等宽或 HTML 格式的文本?
示例:发送包含等宽字符串的消息
sent_message = client.send_message(To_id, "the authentication code `8632496`", parse_mode='markdown')
然后编辑消息并发送包含等宽字符串的新文本
client(EditMessageRequest(
peer=To_id,
id=sent_message.id,
message="the new authentication code `9832798237`"
))
我知道使用实体是一种选择。例如:
entities = [MessageEntityCode(offset=9, length=18)] # specifying a code block entity
client(EditMessageRequest(
peer=To_id,
id=sent_message.id,
message='This is a monospace string.',
no_webpage=True,
entities=entities
))
但是,我的文本很长,并且包含来自各种来源的多个等宽字符串,例如: text = f“某事{变量1},某事{变量2}”
因此,确定每个等宽字符串的起点和长度具有挑战性。
我非常感谢有关如何解决此问题的任何指导,包括在使用 Telethon 编辑 Telegram 消息时有效管理等宽或 HTML 文本的方法或最佳实践。
client(EditMessageRequest(
是一种古老的、不受欢迎的编辑消息方式。
您应该使用
client.edit_message
方法,在您的示例中:
client.edit_message(tst_id, first.id, 'Oeps, the code is `1234789`')
这样,您甚至不需要指定
parse_mode
,它与您编辑的消息相同。
测试此功能的完整代码:
from telethon import TelegramClient
import asyncio
import time
client = TelegramClient('anon', '1234567', '0123456789abcdef0123456789abcdef')
client.start()
async def main():
tst_id = 1234
first = await client.send_message(tst_id, "the authentication code `8632496`", parse_mode='markdown')
time.sleep(3)
second = await client.edit_message(tst_id, first.id, 'Oeps, the code is `1234789`')
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
结果为
.gif
,因为 上传器已损坏: