如何使用 Telethon 编辑等宽或 HTML 文本的 Telegram 消息?

问题描述 投票:0回答:1

当在 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 文本的方法或最佳实践。

python telegram telethon formatted-text
1个回答
0
投票

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
,因为 上传器已损坏

© www.soinside.com 2019 - 2024. All rights reserved.