pytgbot
pytgbot copied to clipboard
Markup submodule support
Hello! I want to table a proposal to add a special submodule to generate Telegram-specific markup easily.
Motivation
A common markdown format that every programmer uses is really simple and doesn’t require special utils for that, but MarkdownV2 and HTML which let include spoiler, strikethrough and other telegram innovations are different. For example, MarkdownV2 also requires to escape 18 characters, and if it’s not, reject the request. This may make the task of designing markup generation for bots that include business logic complicated enough and I suppose it’s better to have a ready-made out-of-the-box solution for this.
Implementation suggestion
General explanation
I have recently worked on a related challenge and I’m writing this to propose to re-use my solution. It’s the telegram-text
module. The general structure in the context of the pytgbot
module I propose to implement is the following:
- Add
telegram-text
as a dependency (maybe even optional) - Add support for message objects rendering depending on format mode (Markdown / MarkdownV2 / HTML) inside the message sending function
- Add imports into the
pytgbot
module core to import styles and other needed classes asfrom pytgbot import ...
. Or it’s quite pretty to add a separated file (text.py
ormarkup.py
for example) to import asfrom pytgbot.text import ...
Why telegram-text
module?
- Include all rules for all markup modes
- Almost entirely covered by tests
- Fully documented
- Open to contribute
- Has a few presets and is easily expandable to add new
Example of the module:
from telegram_text import Bold, Italic, Underline
text = Underline(Bold("Bold") + "and" + Italic("italic") + "with underline.")
Usage example in the pytgbot
context
from pytgbot import Bot
from pytgbot.text import Spoiler
API_KEY: str
CHAT: str
bot = Bot(API_KEY)
bot.send_message(CHAT, Spoiler("Example Text!"))
The same proposal for the teleflask
framework 👨🏻💻
Interesting proposal. I'll have a closer look next week.
Ok. Also, I can help with the integration if you agree with the approach
Hi! What have you decided on this issue?
from telegram_text import Bold, Italic, Underline
text = Underline(Bold("Bold") + "and" + Italic("italic") + "with underline.")