From f7b7e87cffc9dcb2817b070d7a003ac234c96ec3 Mon Sep 17 00:00:00 2001 From: Tolmachev Igor Date: Mon, 23 Mar 2026 18:07:30 +0300 Subject: Add new_announcement command --- models/rich_text.py | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'models/rich_text.py') 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 @@ -from aiogram.types import MessageEntity +from typing import Self + +from aiogram import Bot +from aiogram.types import Message, MessageEntity from pydantic import BaseModel class RichText(BaseModel): text: str entities: list[MessageEntity] = [] + + @classmethod + def from_message(cls, msg: Message) -> Self: + assert msg.text is not None + return cls( + text=msg.text, + entities=[] if msg.entities is None else msg.entities, + ) + + @classmethod + def from_text(cls, *text: RichText | str) -> Self: + result = cls(text="", entities=[]) + + for t in text: + if isinstance(t, RichText): + entities = t.entities.copy() + for e in entities: + e.offset += len(result.text) + result.entities += entities + + result.text += t.text + else: + result.text += t + + return result + + async def send(self, bot: Bot, chat_id: int) -> Message: + return await bot.send_message( + chat_id=chat_id, + text=self.text, + entities=self.entities, + parse_mode=None, + ) -- cgit v1.3