2018-01-06 11:18:15 +00:00
|
|
|
Text Formatting
|
|
|
|
===============
|
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
.. role:: strike
|
|
|
|
:class: strike
|
2018-07-29 01:40:04 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
.. role:: underline
|
|
|
|
:class: underline
|
2018-07-29 01:40:04 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
.. role:: bold-underline
|
|
|
|
:class: bold-underline
|
|
|
|
|
|
|
|
.. role:: strike-italic
|
|
|
|
:class: strike-italic
|
|
|
|
|
|
|
|
Pyrogram uses a custom Markdown dialect for text formatting which adds some unique features that make writing styled
|
2022-01-07 09:18:51 +00:00
|
|
|
texts easier in both Markdown and HTML. You can send sophisticated text messages and media captions using a
|
2019-06-27 21:15:12 +00:00
|
|
|
variety of decorations that can also be nested in order to combine multiple styles together.
|
|
|
|
|
2020-04-01 18:08:46 +00:00
|
|
|
.. contents:: Contents
|
|
|
|
:backlinks: none
|
2020-08-22 06:05:05 +00:00
|
|
|
:depth: 1
|
2020-04-01 18:08:46 +00:00
|
|
|
:local:
|
|
|
|
|
|
|
|
-----
|
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
Basic Styles
|
|
|
|
------------
|
|
|
|
|
|
|
|
When formatting your messages, you can choose between Markdown-style, HTML-style or both (default). The following is a
|
|
|
|
list of the basic styles currently supported by Pyrogram.
|
|
|
|
|
|
|
|
- **bold**
|
|
|
|
- *italic*
|
|
|
|
- :strike:`strike`
|
|
|
|
- :underline:`underline`
|
2021-12-30 08:14:49 +00:00
|
|
|
- spoiler
|
2019-06-27 21:15:12 +00:00
|
|
|
- `text URL <https://pyrogram.org>`_
|
2022-01-07 09:18:51 +00:00
|
|
|
- `user text mention <tg://user?id=123456789>`_
|
2019-06-27 21:15:12 +00:00
|
|
|
- ``inline fixed-width code``
|
|
|
|
- .. code-block:: text
|
|
|
|
|
|
|
|
pre-formatted
|
|
|
|
fixed-width
|
|
|
|
code block
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
User text mentions are only guaranteed to work if you have already met the user (in groups or private chats).
|
2018-01-06 11:18:15 +00:00
|
|
|
|
2018-01-23 15:14:43 +00:00
|
|
|
Markdown Style
|
|
|
|
--------------
|
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
To strictly use this mode, pass "markdown" to the *parse_mode* parameter when using
|
2019-05-28 14:41:55 +00:00
|
|
|
:meth:`~pyrogram.Client.send_message`. Use the following syntax in your message:
|
2018-01-06 11:18:15 +00:00
|
|
|
|
2018-07-29 01:37:50 +00:00
|
|
|
.. code-block:: text
|
2018-01-06 11:18:15 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
**bold**
|
|
|
|
|
|
|
|
__italic__
|
2018-01-06 11:18:15 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
--underline--
|
2018-01-06 11:18:15 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
~~strike~~
|
2018-01-06 11:18:15 +00:00
|
|
|
|
2022-01-03 10:19:02 +00:00
|
|
|
||spoiler||
|
2021-12-30 08:14:49 +00:00
|
|
|
|
2022-01-07 09:18:51 +00:00
|
|
|
[text URL](https://pyrogram.org/)
|
2019-06-27 21:15:12 +00:00
|
|
|
|
2022-01-07 09:18:51 +00:00
|
|
|
[text user mention](tg://user?id=123456789)
|
2018-01-06 11:18:15 +00:00
|
|
|
|
|
|
|
`inline fixed-width code`
|
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
```
|
|
|
|
pre-formatted
|
|
|
|
fixed-width
|
|
|
|
code block
|
2018-01-06 11:18:15 +00:00
|
|
|
```
|
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
**Example**:
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
app.send_message(
|
2022-01-07 09:18:51 +00:00
|
|
|
"me",
|
2019-06-27 21:15:12 +00:00
|
|
|
(
|
|
|
|
"**bold**, "
|
|
|
|
"__italic__, "
|
|
|
|
"--underline--, "
|
2019-06-30 16:51:04 +00:00
|
|
|
"~~strike~~, "
|
2022-01-03 10:19:02 +00:00
|
|
|
"||spoiler||, "
|
2019-06-27 21:15:12 +00:00
|
|
|
"[URL](https://pyrogram.org), "
|
|
|
|
"`code`, "
|
|
|
|
"```"
|
|
|
|
"for i in range(10):\n"
|
|
|
|
" print(i)"
|
|
|
|
"```"
|
|
|
|
),
|
|
|
|
parse_mode="markdown"
|
|
|
|
)
|
2018-05-12 12:15:16 +00:00
|
|
|
|
2018-01-23 15:14:43 +00:00
|
|
|
HTML Style
|
|
|
|
----------
|
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
To strictly use this mode, pass "html" to the *parse_mode* parameter when using :meth:`~pyrogram.Client.send_message`.
|
2019-05-12 17:26:55 +00:00
|
|
|
The following tags are currently supported:
|
2018-01-23 15:14:43 +00:00
|
|
|
|
2018-07-29 01:37:50 +00:00
|
|
|
.. code-block:: text
|
2018-01-23 15:14:43 +00:00
|
|
|
|
|
|
|
<b>bold</b>, <strong>bold</strong>
|
|
|
|
|
|
|
|
<i>italic</i>, <em>italic</em>
|
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
<u>underline</u>
|
2018-01-23 15:14:43 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
<s>strike</s>, <del>strike</del>, <strike>strike</strike>
|
|
|
|
|
2021-12-30 08:14:49 +00:00
|
|
|
<spoiler>spoiler</spoiler>
|
|
|
|
|
2022-01-07 09:18:51 +00:00
|
|
|
<a href="https://pyrogram.org/">text URL</a>
|
2019-06-27 21:15:12 +00:00
|
|
|
|
2022-01-07 09:18:51 +00:00
|
|
|
<a href="tg://user?id=123456789">inline mention</a>
|
2018-01-23 15:14:43 +00:00
|
|
|
|
|
|
|
<code>inline fixed-width code</code>
|
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
<pre>
|
|
|
|
pre-formatted
|
|
|
|
fixed-width
|
|
|
|
code block
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
**Example**:
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
app.send_message(
|
2022-01-07 09:18:51 +00:00
|
|
|
"me",
|
2019-06-27 21:15:12 +00:00
|
|
|
(
|
|
|
|
"<b>bold</b>, "
|
|
|
|
"<i>italic</i>, "
|
|
|
|
"<u>underline</u>, "
|
2019-06-30 16:51:04 +00:00
|
|
|
"<s>strike</s>, "
|
2021-12-30 08:14:49 +00:00
|
|
|
"<spoiler>spoiler</spoiler>, "
|
2019-06-27 21:15:12 +00:00
|
|
|
"<a href=\"https://pyrogram.org/\">URL</a>, "
|
|
|
|
"<code>code</code>\n\n"
|
|
|
|
"<pre>"
|
|
|
|
"for i in range(10):\n"
|
|
|
|
" print(i)"
|
|
|
|
"</pre>"
|
|
|
|
),
|
|
|
|
parse_mode="html"
|
|
|
|
)
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
All ``<``, ``>`` and ``&`` symbols that are not a part of a tag or an HTML entity must be replaced with the
|
|
|
|
corresponding HTML entities (``<`` with ``<``, ``>`` with ``>`` and ``&`` with ``&``). You can use this
|
|
|
|
snippet to quickly escape those characters:
|
2018-01-23 15:14:43 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
.. code-block:: python
|
2018-01-23 15:14:43 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
import html
|
2018-01-06 11:18:15 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
text = "<my text>"
|
|
|
|
text = html.escape(text)
|
2018-01-06 11:18:15 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
print(text)
|
2018-01-06 11:18:15 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
.. code-block:: text
|
2018-01-23 15:14:43 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
<my text>
|
|
|
|
|
|
|
|
Different Styles
|
|
|
|
----------------
|
|
|
|
|
|
|
|
By default, when ignoring the *parse_mode* parameter, both Markdown and HTML styles are enabled together.
|
|
|
|
This means you can combine together both syntaxes in the same text:
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
2022-01-07 09:18:51 +00:00
|
|
|
app.send_message("me", "**bold**, <i>italic</i>")
|
2019-06-27 21:15:12 +00:00
|
|
|
|
|
|
|
Result:
|
|
|
|
|
|
|
|
**bold**, *italic*
|
|
|
|
|
|
|
|
If you don't like this behaviour you can always choose to only enable either Markdown or HTML in strict mode by passing
|
|
|
|
"markdown" or "html" as argument to the *parse_mode* parameter.
|
|
|
|
|
|
|
|
.. code-block::
|
|
|
|
|
2022-01-07 09:18:51 +00:00
|
|
|
app.send_message("me", "**bold**, <i>italic</i>", parse_mode="markdown")
|
|
|
|
app.send_message("me", "**bold**, <i>italic</i>", parse_mode="html")
|
2019-06-27 21:15:12 +00:00
|
|
|
|
|
|
|
Result:
|
|
|
|
|
|
|
|
**bold**, <i>italic</i>
|
|
|
|
|
|
|
|
\*\*bold**, *italic*
|
|
|
|
|
|
|
|
In case you want to completely turn off the style parser, simply pass ``None`` to *parse_mode*. The text will be sent
|
|
|
|
as-is.
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
2022-01-07 09:18:51 +00:00
|
|
|
app.send_message("me", "**bold**, <i>italic</i>", parse_mode=None)
|
2019-06-27 21:15:12 +00:00
|
|
|
|
|
|
|
Result:
|
|
|
|
|
|
|
|
\*\*bold**, <i>italic</i>
|
|
|
|
|
|
|
|
Nested and Overlapping Entities
|
|
|
|
-------------------------------
|
|
|
|
|
|
|
|
You can also style texts with more than one decoration at once by nesting entities together. For example, you can send
|
2019-07-01 11:37:12 +00:00
|
|
|
a text message with both :bold-underline:`bold and underline` styles, or a text that has both :strike-italic:`italic and
|
2019-06-27 21:15:12 +00:00
|
|
|
strike` styles, and you can still combine both Markdown and HTML together.
|
|
|
|
|
|
|
|
Here there are some example texts you can try sending:
|
|
|
|
|
|
|
|
**Markdown**:
|
|
|
|
|
|
|
|
- ``**bold, --underline--**``
|
2019-06-30 16:51:04 +00:00
|
|
|
- ``**bold __italic --underline ~~strike~~--__**``
|
2019-06-27 21:15:12 +00:00
|
|
|
- ``**bold __and** italic__``
|
|
|
|
|
|
|
|
**HTML**:
|
|
|
|
|
|
|
|
- ``<b>bold, <u>underline</u></b>``
|
2019-06-30 16:51:04 +00:00
|
|
|
- ``<b>bold <i>italic <u>underline <s>strike</s></u></i></b>``
|
2019-06-27 21:15:12 +00:00
|
|
|
- ``<b>bold <i>and</b> italic</i>``
|
|
|
|
|
|
|
|
**Combined**:
|
2018-01-23 15:14:43 +00:00
|
|
|
|
2019-06-27 21:15:12 +00:00
|
|
|
- ``--you can combine <i>HTML</i> with **Markdown**--``
|
|
|
|
- ``**and also <i>overlap** --entities</i> this way--``
|