Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Telegram Bot Markdown

I am working on a Telegram Bot in Python but I struggle to use markdown correctly and I can not find any proper resources about the telegram markdown implementation. It gets even more complicated because of two different markdown "versions" (Markdown and Markdown_V2). And none of them is matching the behavior of the normal chat field (typing by hand).

Test String:

*Bold*, _italic_, *_bold and italic_*, **double bold**, __double italic__, __**double bold and double italic**__

parse_mode="Markdown":

Bold, italic, _bold and italic_, double bold, double italic, double bold and double italic

parse_mode="Markdown V2":

Bold, italic, bold and italic, double bold, double italic, double bold and double italic

in Chat:

*Bold*, _italic_, *bold and italic*, double bold, double italic, **double bold and double italic**

-

How do I add bold and italic, and are there any other commands like underline and more? I need some explanation. Thanks.

like image 960
Schneyer Avatar asked Mar 23 '26 18:03

Schneyer


2 Answers

Bots need a different markdown syntax.

To send bold and italic text use:

update.message.reply_text('*_bold and italic_*', parse_mode='MarkdownV2')

from the official telegram website https://core.telegram.org/bots/api#markdownv2-style

*bold \*text*
_italic \*text_
__underline__
~strikethrough~
*bold _italic bold ~italic bold strikethrough~ __underline italic bold___ bold*
[inline URL](http://www.example.com/)
[inline mention of a user](tg://user?id=123456789)
`inline fixed-width code`
```
pre-formatted fixed-width code block
```
```python
pre-formatted fixed-width code block written in the Python programming language
```

I recommend to use only MarkdownV2 syntax, since Markdown is less powerful

like image 61
Alban Avatar answered Mar 25 '26 08:03

Alban


Just a note, with Markdownv2 you have to escape special characters. "Special" here means those that Telegram defined as special (doc).

Personally I find it easier to work with parse_mode='HTML' where you can use a common function to escape HTML chars (e.g. html.escape in Python, _.escape in JS). With HTML you have way more options for text decoration.

like image 32
Aleksandr Avatar answered Mar 25 '26 06:03

Aleksandr



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!