diff options
| author | Tolmachev Igor <me@igorek.dev> | 2026-03-23 18:07:30 +0300 |
|---|---|---|
| committer | Tolmachev Igor <me@igorek.dev> | 2026-03-23 18:07:30 +0300 |
| commit | f7b7e87cffc9dcb2817b070d7a003ac234c96ec3 (patch) | |
| tree | 47f8af52edcac24f16ae58d0501bd2a4a42c2278 /models/rich_text.py | |
| parent | 8e034766bb7e2d23f88c5ff1a254126f11a5f412 (diff) | |
| download | vpn_manager_bot-f7b7e87cffc9dcb2817b070d7a003ac234c96ec3.tar.gz vpn_manager_bot-f7b7e87cffc9dcb2817b070d7a003ac234c96ec3.zip | |
Add new_announcement command
Diffstat (limited to 'models/rich_text.py')
| -rw-r--r-- | models/rich_text.py | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/models/rich_text.py b/models/rich_text.py index 2b433ec..e5441b6 100644 --- a/models/rich_text.py +++ b/models/rich_text.py | |||
| @@ -1,7 +1,43 @@ | |||
| 1 | from aiogram.types import MessageEntity | 1 | from typing import Self |
| 2 | |||
| 3 | from aiogram import Bot | ||
| 4 | from aiogram.types import Message, MessageEntity | ||
| 2 | from pydantic import BaseModel | 5 | from pydantic import BaseModel |
| 3 | 6 | ||
| 4 | 7 | ||
| 5 | class RichText(BaseModel): | 8 | class RichText(BaseModel): |
| 6 | text: str | 9 | text: str |
| 7 | entities: list[MessageEntity] = [] | 10 | entities: list[MessageEntity] = [] |
| 11 | |||
| 12 | @classmethod | ||
| 13 | def from_message(cls, msg: Message) -> Self: | ||
| 14 | assert msg.text is not None | ||
| 15 | return cls( | ||
| 16 | text=msg.text, | ||
| 17 | entities=[] if msg.entities is None else msg.entities, | ||
| 18 | ) | ||
| 19 | |||
| 20 | @classmethod | ||
| 21 | def from_text(cls, *text: RichText | str) -> Self: | ||
| 22 | result = cls(text="", entities=[]) | ||
| 23 | |||
| 24 | for t in text: | ||
| 25 | if isinstance(t, RichText): | ||
| 26 | entities = t.entities.copy() | ||
| 27 | for e in entities: | ||
| 28 | e.offset += len(result.text) | ||
| 29 | result.entities += entities | ||
| 30 | |||
| 31 | result.text += t.text | ||
| 32 | else: | ||
| 33 | result.text += t | ||
| 34 | |||
| 35 | return result | ||
| 36 | |||
| 37 | async def send(self, bot: Bot, chat_id: int) -> Message: | ||
| 38 | return await bot.send_message( | ||
| 39 | chat_id=chat_id, | ||
| 40 | text=self.text, | ||
| 41 | entities=self.entities, | ||
| 42 | parse_mode=None, | ||
| 43 | ) | ||
