aboutsummaryrefslogtreecommitdiff
path: root/models/rich_text.py
diff options
context:
space:
mode:
Diffstat (limited to 'models/rich_text.py')
-rw-r--r--models/rich_text.py38
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 @@
1from aiogram.types import MessageEntity 1from typing import Self
2
3from aiogram import Bot
4from aiogram.types import Message, MessageEntity
2from pydantic import BaseModel 5from pydantic import BaseModel
3 6
4 7
5class RichText(BaseModel): 8class 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 )