78 lines
3.3 KiB
Python
78 lines
3.3 KiB
Python
from uuid import UUID
|
||
from datetime import datetime
|
||
from pydantic import BaseModel, Field
|
||
from typing import Optional, Literal, List, Any, Dict
|
||
|
||
|
||
class MessageForward(BaseModel):
|
||
forward_type: Optional[Literal["chat_private_messages", "chat_group_messages",
|
||
"chat_public_messages", "reply"]] = Field(None, description="Тип пересылаемого контента")
|
||
forward_sender_id: Optional[UUID] = Field(None, description="ID чата, откуда переслано сообщение")
|
||
forward_message_id: Optional[int] = Field(None, description="Данные внутренний ид сообщения в forward_chat")
|
||
forward_chat_data: Optional[Any] = Field(default=None, description="Данные о чате пересылаемом (беседы и паблики)")
|
||
|
||
|
||
class MessageItem(BaseModel):
|
||
message_id: int = Field(..., description="внутренний ID сообщения")
|
||
message_type: List[Literal["text", "media", "circle", "voice", "system", "forward",
|
||
"reply", "poll"]] = Field(..., alias="message_type", description="Типы сообщения")
|
||
|
||
forward_metadata: Optional[MessageForward]
|
||
|
||
chat_id: UUID = Field(..., description="Чат ID")
|
||
sender_id: UUID = Field(..., description="Кто отправил")
|
||
sender_data: Optional[Any] = Field(default=None, description="Данные о пользователе")
|
||
content: Optional[str] = Field(None, description="Текст сообщения")
|
||
media_link: Optional[Any] = Field(None, description="Ссылка на медиа (заглушка)")
|
||
is_viewed: bool = Field(..., description="Флаг просмотра")
|
||
created_at: datetime = Field(..., description="Дата и время создания сообщения")
|
||
updated_at: Optional[datetime] = Field(None, description="Дата и время обновления сообщения")
|
||
|
||
|
||
class PrivateChatListItem(BaseModel):
|
||
chat_id: UUID = Field(..., description="ID чата")
|
||
chat_type: Literal["self", "private"] = Field(..., description="Тип чата")
|
||
chat_data: Optional[Dict[str, Any]] = Field(default=None, description="Данные о чате")
|
||
last_message: Optional[MessageItem] = Field(None, description="Последнее сообщение в чате")
|
||
created_at: datetime = Field(..., description="Дата создания чата")
|
||
|
||
|
||
class PrivateChatListData(BaseModel):
|
||
items: List[PrivateChatListItem]
|
||
has_more: bool
|
||
|
||
|
||
class PrivateChatListResponse(BaseModel):
|
||
status: str
|
||
data: PrivateChatListData
|
||
|
||
|
||
# history
|
||
class PrivateChatHistoryData(BaseModel):
|
||
items: List[MessageItem]
|
||
has_more: bool
|
||
|
||
|
||
class PrivateChatHistoryResponse(BaseModel):
|
||
status: str
|
||
data: PrivateChatHistoryData
|
||
|
||
|
||
# send
|
||
class PrivateMessageSendRequest(BaseModel):
|
||
chat_id: UUID
|
||
content: Optional[str] = Field(None, description="Содержимое сообщения (макс. 4096 символов)", max_length=4096)
|
||
message_type: List[Literal["text"]] = Field(
|
||
..., description="Один или несколько типов сообщения"
|
||
)
|
||
|
||
|
||
class PrivateMessageSendData(BaseModel):
|
||
message_id: int
|
||
chat_id: UUID
|
||
created_at: datetime
|
||
|
||
|
||
class PrivateMessageSendResponse(BaseModel):
|
||
status: str
|
||
data: PrivateMessageSendData |