我应该如何在电报 python 机器人中使用 parse_mode='HTML'?

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

我正在尝试使用 Telegram API 的

send_photo()
方法通过机器人在频道中发送消息。它需要一个标题参数(类型
String
),但我无法通过
parse_mode='HTML'
参数对其进行格式化...

如果我使用这样的东西:

send_photo(chat_id, photo, caption="<b>Some text</b>", parse_mode='HTML') 

它发送消息但没有任何格式。有人知道为什么吗?谢谢

python bots telegram telegram-bot python-telegram-bot
3个回答
23
投票

首先,你需要像这样import

ParseMode
from
telegram

from telegram import ParseMode

然后,您只需要指定

parse_mode=ParseMode.HTML
。这是一个工作示例:

def jordan(bot, update):
    chat_id = update.message.chat.id
    with open('JordanPeterson.jpg', 'rb') as jordan_picture:
        caption = "<a href='https://twitter.com/jordanbpeterson'>Jordan B. Peterson</a>"
        bot.send_photo(
            chat_id, 
            photo=jordan_picture, 
            caption=caption,
            parse_mode=ParseMode.HTML
        )

我们可以看到它有效:

更新:实际上,

parse_mode='html'
(如 @slackmart 所建议)和您自己使用的
parse_mode='HTML'
都为我工作!

另一个更新(根据您的评论):您can使用多个标签。这是一个例子,有

hyperlink
bold
italic

又一次更新:关于您的评论

...我对 HTML 标签有任何限制吗?我不能用像

<img>
<br>
这样的东西来画线

老实说,

我就是这么做的!

现在你正在尝试格式化图像的caption,使用

HTML
,这意味着你正在格式化
text
,所以很明显,你不能使用“像
<img>
这样的东西。”它必须是“text formatting tag”(加上
<a>
)。甚至不是所有人!我相信你只能使用这些:
<a>
,
<b>
,
<strong>
,
<i>
and
<em>
.

如果你尝试使用像

<del>
这样的文本格式标签,它会给你这个错误:

无法解析实体:unsupported 在字节偏移量 148 处开始标记“del”

真可惜! 我希望能够在图像的标题中做这样的事情。或类似的事情!


2
投票

对我有用!这是我正在使用的代码:

>>> from telegram import Bot
>>> tkn = '88888:199939393'; chid = '-31828'
>>> bot = Bot(tkn)
>>> with open('ye.jpeg', 'rb') as fme:
...   bot.send_photo(chid, fme, caption='<b>Hallo</b>', parse_mode='html')
...
<telegram.message.Message object at 0x7f6301b44d10>

当然,你必须使用自己的telegram token和channel id。另请注意我正在使用

parse_mode='html'  # lowercase


0
投票

根据版本 20,您需要使用:

from telegram.constants import ParseMode

更多关于它的官方文档:https://pythontelegramrobot.readthedocs.io/en/latest/telegram.parsemode.html

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