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

Posted

技术标签:

【中文标题】我应该如何在电报 python bot 中使用 parse_mode=\'HTML\'?【英文标题】:How should I use parse_mode='HTML' in telegram python bot?我应该如何在电报 python bot 中使用 parse_mode='HTML'? 【发布时间】:2019-09-29 22:07:34 【问题描述】:

我正在尝试使用 Telegram API 的 send_photo() 方法在带有机器人的频道中发送消息。它需要一个标题参数(类型为String),但我无法通过parse_mode='html' 参数对其进行格式化...

如果我使用这样的东西:

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

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

【问题讨论】:

【参考方案1】:

首先,您需要像这样导入 ParseMode 来自 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' 你曾经为我工作!

另一个更新(根据您的comment):您可以使用多个标签。这是一个例子,hyperlinkbolditalic

另一个更新:关于你的comment:

...我对 HTML 标签有什么限制吗?我不能使用 &lt;img&gt;&lt;br&gt; 之类的东西来画线

老实说,

我就是这么做的!

现在您正在尝试使用HTML 格式化图像的标题,这意味着您正在格式化text,所以很明显,您不能使用“类似@ 987654345@。”它必须是“text formatting tag”(加上&lt;a&gt;)。甚至不是全部!我相信你只能使用这些:&lt;a&gt;&lt;b&gt;&lt;strong&gt;&lt;i&gt;&lt;em&gt;

如果你尝试使用像&lt;del&gt; 这样的文本格式标签,它会给你这个错误:

无法解析实体:不支持在字节偏移 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>

当然,您必须使用自己的电报令牌和频道 ID。另请注意,我使用的是parse_mode='html' # lowercase

【讨论】:

嗯,我总是用parse_mode=ParseMode.HTML 做的。没想到parse_mode='html' 也可以!为此 +1。 顺便说一句,您的回答表明问题在于HTML,它是大写的。但是,html 也可以。 谢谢,但我可以使用的标签有限制吗?我的意思是,我不能在标题上使用 ,对吗?或者有没有办法同样使用它? @Federico 查看我的第二次更新。此外,您可以使用&lt;a href=""&gt;&lt;/a&gt;!你有没有看我的回答? @Federico 我添加了另一个更新来解决您的问题。让我们把话题移到我自己的答案下,以免给@slackmart 制造不必要的噪音。但是,cmets 不适用于扩展对话,如果有一些问题没有得到解答,您应该更新您的问题,以明确您希望理解的内容。

以上是关于我应该如何在电报 python bot 中使用 parse_mode='HTML'?的主要内容,如果未能解决你的问题,请参考以下文章

python 电报BOT pyTelegramBotAPI

Python Telegram bot 作为一个包

如何使用 Telegram Python bot 发送粗体文本

C ++电报Bot POST请求更新,没有结果

使用 ktor 将文件上传到电报 bot api

Telegram bot:如何通过 id(而不是用户名)提及用户