pytgbot icon indicating copy to clipboard operation
pytgbot copied to clipboard

Markup submodule support

Open SKY-ALIN opened this issue 2 years ago • 5 comments

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 as from pytgbot import .... Or it’s quite pretty to add a separated file (text.py or markup.py for example) to import as from 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!"))

SKY-ALIN avatar Sep 24 '22 04:09 SKY-ALIN

The same proposal for the teleflask framework 👨🏻‍💻

SKY-ALIN avatar Sep 24 '22 04:09 SKY-ALIN

Interesting proposal. I'll have a closer look next week.

luckydonald avatar Sep 27 '22 07:09 luckydonald

Ok. Also, I can help with the integration if you agree with the approach

SKY-ALIN avatar Sep 28 '22 11:09 SKY-ALIN

Hi! What have you decided on this issue?

SKY-ALIN avatar Jan 12 '23 20:01 SKY-ALIN

from telegram_text import Bold, Italic, Underline

text = Underline(Bold("Bold") + "and" + Italic("italic") + "with underline.")

Andreasannoeuzg avatar Feb 12 '24 05:02 Andreasannoeuzg