Как мне использовать parse_mode = 'HTML' в боте telegram python? - PullRequest
1 голос
/ 13 мая 2019

Я пытаюсь отправить сообщение по каналу с ботом, используя метод Telegram API send_photo(). Он принимает параметр заголовка (тип String), но я не могу отформатировать его с помощью параметра parse_mode='HTML' ...

Если я использую что-то вроде этого:

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

отправляет сообщение, но без какого-либо форматирования. Кто-нибудь знает почему? Спасибо

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Во-первых, вам нужно импортировать 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
        )

И мы видим, что это работает:

works

Обновление: на самом деле, оба parse_mode='html' (как подсказывают @ slackmart ) и parse_mode='HTML', что вы использовали себя, работайте на меня!

Другое обновление (согласно вашему комментарию ): Вы можно использовать несколько тегов.Вот пример одного с hyperlink, bold и italic:

multiple tags

Еще одно обновление: Относительно вашего комментарий :

... есть ли у меня ограничения на теги HTML?Я не могу использовать что-то вроде <img> или <br>, чтобы нарисовать линию

Честно говоря,

try and find out

Вот что я сделал!

Теперь вы пытаетесь отформатировать заголовок изображения, используя HTML, то есть вы форматируете text, поэтому, очевидно, вы можетене использовать "что-то вроде <img>."Это должен быть тег для форматирования текста (плюс <a>).И даже не все из них!Я считаю, что вы можете использовать только эти: <a>, <b>, <strong>, <i> и <em>.

Если вы попытаетесь использовать тег форматирования текста, такой как <del>, онвыдаст вам эту ошибку:

Невозможно проанализировать сущности: не поддерживается начальный тег "del" со смещением байтов 148

Какой позор! Я бы хотел сделать что-то подобное в подписях к изображениям. или что-то подобное!

1 голос
/ 13 мая 2019

у меня работает! Вот код, который я использую:

>>> 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>

Конечно, вы должны использовать свой токен телеграммы и идентификатор канала. Также обратите внимание, что я использую parse_mode='html' # lowercase

...