Форматування¶
Сделайте форматирование ваших сообщений гибким и простым
Этот инструмент работает на основе сущностей сообщений, а не используя HTML или розмитку Markdown, вы можете легко создать свое сообщения и отправить его в Telegram без необходимости помнить о парнисть тегив (открытия и закриття) или о экранирования пользовательского ввода.
Использование¶
Основний сценарий¶
Составьте свое сообщение и отправьте его в Telegram.
content = Text("Hello, ", Bold(message.from_user.full_name), "!")
await message.answer(**content.as_kwargs())
Такой самий, как следующий пример, но без использования розмитки
await message.answer(
text=f"Hello, <b>{html.quote(message.from_user.full_name)}</b>!",
parse_mode=ParseMode.HTML
)
Досливно, когда вы виконуете метод as_kwargs, объект Text перетворюеться в текст Hello, Alex! из списком сущностей [MessageEntity(type='bold', offset=7, length=4)] и передаеться в словарь, который может быть использован как **kwargs в API-вызова.
Повний список елементив приведено на сторинци ниже.
Розширений сценарий¶
На дополнение к базових елементив могут быть реализовани структуры рендерингу контенту, поэтому с коробки litegram предоставляет декилька уже реализованных функций, которые помогают форматувати ваши сообщения:
- litegram.utils.formatting.as_line(*items: Any, end: str = '\n', sep: str = '') Text[исходный код]¶
Об’еднайте несколько узлов в строку из
\nв кинци рядка.- Параметры:
items – Текст или Другое
end – завершения рядка, по умолчанию
\nsep – разделитель между елеменими, по умолчанию пуст строку
- Результат:
Текст
- litegram.utils.formatting.as_list(*items: Any, sep: str = '\n') Text[исходный код]¶
Обгорнить каждый елемент в отдельный строку
- Параметры:
items
sep
- Результат:
- litegram.utils.formatting.as_marked_list(*items: Any, marker: str = '- ') Text[исходный код]¶
Обгорнить елементи в маркированный список
- Параметры:
items
marker – маркер рядка, по умолчанию „- „
- Результат:
Текст
- litegram.utils.formatting.as_numbered_list(*items: Any, start: int = 1, fmt: str = '{}. ') Text[исходный код]¶
Обгорнить елементи в нумерованный список
- Параметры:
items
start – начальный номер, по умолчанию 1
fmt – формат номера, по умолчанию „{}. „
- Результат:
Текст
- litegram.utils.formatting.as_section(title: Any, *body: Any) Text[исходный код]¶
Обгорнить елементи в простой раздел, раздел имеет заголовок и тело
- Параметры:
title
body
- Результат:
Текст
- litegram.utils.formatting.as_marked_section(title: Any, *body: Any, marker: str = '- ') Text[исходный код]¶
Обгорнить елементи в раздел из маркованим списком
- Параметры:
title
body
marker
- Результат:
- litegram.utils.formatting.as_numbered_section(title: Any, *body: Any, start: int = 1, fmt: str = '{}. ') Text[исходный код]¶
Обгорнить елементи в раздел из нумерованим списком
- Параметры:
title
body
start
fmt
- Результат:
- litegram.utils.formatting.as_key_value(key: Any, value: Any) Text[исходный код]¶
Обгорнить пари елементив в строку ключ-значение. (
<b>{key}:</b> {value})- Параметры:
key
value
- Результат:
Текст
и давайте завершимо их всех:
content = as_list(
as_marked_section(
Bold("Success:"),
"Test 1",
"Test 3",
"Test 4",
marker="✅ ",
),
as_marked_section(
Bold("Failed:"),
"Test 2",
marker="❌ ",
),
as_marked_section(
Bold("Summary:"),
as_key_value("Total", 4),
as_key_value("Success", 3),
as_key_value("Failed", 1),
marker=" ",
),
HashTag("#test"),
sep="\n\n",
)
Буде отрендерено в:
Успишно:
✅ Тест 1
✅ Тест 3
✅ Тест 4
Помилки:
❌ Тест 2
Пидсумки:
Загалом: 4
Успишно: 3
Помилки: 1
#тест
Або как HTML:
<b>Success:</b>
✅ Test 1
✅ Test 3
✅ Test 4
<b>Failed:</b>
❌ Test 2
<b>Summary:</b>
<b>Total:</b> 4
<b>Success:</b> 3
<b>Failed:</b> 1
#test
Available methods¶
- class litegram.utils.formatting.Text(*body: Any, **params: Any)[исходный код]¶
-
Simple text element
- __init__(*body: Any, **params: Any) None[исходный код]¶
- render(*, _offset: int = 0, _sort: bool = True, _collect_entities: bool = True) tuple[str, list[MessageEntity]][исходный код]¶
Обгорнить елементи в раздел из нумерованим списком
- Результат:
- as_kwargs(*, text_key: str = 'text', entities_key: str = 'entities', replace_parse_mode: bool = True, parse_mode_key: str = 'parse_mode') dict[str, Any][исходный код]¶
Render element tree as keyword arguments for usage in an API call, for example:
entities = Text(...) await message.answer(**entities.as_kwargs())
- Параметры:
text_key
entities_key
replace_parse_mode
parse_mode_key
- Результат:
- as_caption_kwargs(*, replace_parse_mode: bool = True) dict[str, Any][исходный код]¶
Shortcut for
as_kwargs()for usage with API calls that takecaptionas a parameter.entities = Text(...) await message.answer_photo(**entities.as_caption_kwargs(), photo=phot)
- Параметры:
replace_parse_mode – Will be passed to
as_kwargs().- Результат:
- as_poll_question_kwargs(*, replace_parse_mode: bool = True) dict[str, Any][исходный код]¶
Shortcut for
as_kwargs()for usage with methodlitegram.methods.send_poll.SendPoll.entities = Text(...) await message.answer_poll(**entities.as_poll_question_kwargs(), options=options)
- Параметры:
replace_parse_mode – Will be passed to
as_kwargs().- Результат:
- as_poll_explanation_kwargs(*, replace_parse_mode: bool = True) dict[str, Any][исходный код]¶
Shortcut for
as_kwargs()for usage with methodlitegram.methods.send_poll.SendPoll.question_entities = Text(...) explanation_entities = Text(...) await message.answer_poll( **question_entities.as_poll_question_kwargs(), options=options, **explanation_entities.as_poll_explanation_kwargs(), )
- Параметры:
replace_parse_mode – Will be passed to
as_kwargs().- Результат:
- as_gift_text_kwargs(*, replace_parse_mode: bool = True) dict[str, Any][исходный код]¶
Shortcut for
as_kwargs()for usage with methodlitegram.methods.send_gift.SendGift.entities = Text(...) await bot.send_gift(gift_id=gift_id, user_id=user_id, **entities.as_gift_text_kwargs())
- Параметры:
replace_parse_mode – Will be passed to
as_kwargs().- Результат:
- as_html() str[исходный код]¶
Render elements tree as HTML markup
- as_markdown() str[исходный код]¶
Render elements tree as MarkdownV2 markup
Available elements¶
- class litegram.utils.formatting.Text(*body: Any, **params: Any)[исходный код]
-
Simple text element
- class litegram.utils.formatting.HashTag(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextHashtag element.
Предупреждение
The value should always start with „#“ symbol
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.HASHTAG
- class litegram.utils.formatting.CashTag(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextCashtag element.
Предупреждение
The value should always start with „$“ symbol
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.CASHTAG
- class litegram.utils.formatting.BotCommand(*body: Any, **params: Any)[исходный код]
Базовые классы:
TextBot command element.
Предупреждение
The value should always start with „/“ symbol
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.BOT_COMMAND
- class litegram.utils.formatting.Url(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextUrl element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.URL
- class litegram.utils.formatting.Email(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextEmail element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.EMAIL
- class litegram.utils.formatting.PhoneNumber(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextPhone number element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.PHONE_NUMBER
- class litegram.utils.formatting.Bold(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextBold element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.BOLD
- class litegram.utils.formatting.Italic(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextItalic element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.ITALIC
- class litegram.utils.formatting.Underline(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextUnderline element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.UNDERLINE
- class litegram.utils.formatting.Strikethrough(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextStrikethrough element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.STRIKETHROUGH
- class litegram.utils.formatting.Spoiler(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextSpoiler element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.SPOILER
- class litegram.utils.formatting.Code(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextCode element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.CODE
- class litegram.utils.formatting.Pre(*body: Any, language: str | None = None, **params: Any)[исходный код]¶
Базовые классы:
TextPre element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.PRE
- class litegram.utils.formatting.TextLink(*body: Any, url: str, **params: Any)[исходный код]¶
Базовые классы:
TextText link element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.TEXT_LINK
- class litegram.utils.formatting.TextMention(*body: Any, user: User, **params: Any)[исходный код]¶
Базовые классы:
TextText mention element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.TEXT_MENTION
- class litegram.utils.formatting.CustomEmoji(*body: Any, custom_emoji_id: str, **params: Any)[исходный код]¶
Базовые классы:
TextCustom emoji element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.CUSTOM_EMOJI
- class litegram.utils.formatting.BlockQuote(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextBlock quote element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.BLOCKQUOTE
- class litegram.utils.formatting.ExpandableBlockQuote(*body: Any, **params: Any)[исходный код]¶
Базовые классы:
TextExpandable block quote element.
Will be wrapped into
litegram.types.message_entity.MessageEntitywith typelitegram.enums.message_entity_type.MessageEntityType.EXPANDABLE_BLOCKQUOTE