feat: add api and mcp
This commit is contained in:
1 parent
6a5cde6ae4
commit
c40e720163
30 files changed
+2354
-31
No files matched your search
@@ -0,0 +1,160 @@
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
DEFAULT_LIMIT = 50
|
||||
MAX_LIMIT = 500
|
||||
|
||||
|
||||
class Page(BaseModel):
|
||||
limit: int = DEFAULT_LIMIT
|
||||
offset: int = 0
|
||||
|
||||
@property
|
||||
def capped_limit(self) -> int:
|
||||
return min(self.limit, MAX_LIMIT)
|
||||
|
||||
|
||||
class ChatListItem(BaseModel):
|
||||
chat_id: int
|
||||
title: str | None
|
||||
message_count: int
|
||||
last_date: datetime | None
|
||||
|
||||
|
||||
class MessageView(BaseModel):
|
||||
chat_id: int
|
||||
message_id: int
|
||||
date: datetime
|
||||
sender_id: int | None
|
||||
text: str | None
|
||||
has_media: bool
|
||||
is_self_destruct: bool
|
||||
edited_at: datetime | None
|
||||
deleted_at: datetime | None
|
||||
|
||||
|
||||
class MessageVersionView(BaseModel):
|
||||
observed_at: datetime
|
||||
edit_date: datetime | None
|
||||
text: str | None
|
||||
|
||||
|
||||
class MediaView(BaseModel):
|
||||
id: int
|
||||
account_id: int
|
||||
chat_id: int
|
||||
message_id: int
|
||||
kind: str
|
||||
storage_key: str | None
|
||||
file_size: int | None
|
||||
mime: str | None
|
||||
ttl_seconds: int | None
|
||||
downloaded: bool
|
||||
extracted_text: str | None
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class CallbackView(BaseModel):
|
||||
position: int
|
||||
label: str | None
|
||||
data: str | None
|
||||
|
||||
|
||||
class ReactionView(BaseModel):
|
||||
peer_id: int
|
||||
reaction: str
|
||||
added_at: datetime
|
||||
removed_at: datetime | None
|
||||
|
||||
|
||||
class LinkView(BaseModel):
|
||||
position: int
|
||||
url: str
|
||||
kind: str
|
||||
web_url: str | None
|
||||
web_title: str | None
|
||||
web_description: str | None
|
||||
web_site_name: str | None
|
||||
|
||||
|
||||
class PresenceSample(BaseModel):
|
||||
peer_id: int
|
||||
ts: datetime
|
||||
status: str
|
||||
last_online_date: datetime | None
|
||||
next_offline_date: datetime | None
|
||||
|
||||
|
||||
class PresenceHourly(BaseModel):
|
||||
peer_id: int
|
||||
bucket: datetime
|
||||
samples: int
|
||||
online_samples: int
|
||||
last_seen: datetime | None
|
||||
|
||||
|
||||
class PeerView(BaseModel):
|
||||
peer_id: int
|
||||
first_name: str | None
|
||||
last_name: str | None
|
||||
username: str | None
|
||||
phone: str | None
|
||||
photo_unique_id: str | None
|
||||
is_deleted_account: bool
|
||||
updated_at: datetime
|
||||
|
||||
|
||||
class PeerHistoryView(BaseModel):
|
||||
observed_at: datetime
|
||||
first_name: str | None
|
||||
last_name: str | None
|
||||
username: str | None
|
||||
phone: str | None
|
||||
photo_unique_id: str | None
|
||||
is_deleted_account: bool
|
||||
|
||||
|
||||
class StoryView(BaseModel):
|
||||
peer_id: int
|
||||
story_id: int
|
||||
date: datetime | None
|
||||
expire_date: datetime | None
|
||||
caption: str | None
|
||||
media_kind: str | None
|
||||
storage_key: str | None
|
||||
downloaded: bool
|
||||
views: int | None
|
||||
pinned: bool
|
||||
deleted: bool
|
||||
|
||||
|
||||
class AnnotationView(BaseModel):
|
||||
id: int
|
||||
account_id: int
|
||||
chat_id: int
|
||||
message_id: int
|
||||
text: str
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
|
||||
class WatchView(BaseModel):
|
||||
id: int
|
||||
account_id: int
|
||||
kind: str
|
||||
params: dict[str, Any]
|
||||
enabled: bool
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
|
||||
class AlertView(BaseModel):
|
||||
id: int
|
||||
account_id: int
|
||||
watch_id: int
|
||||
ts: datetime
|
||||
payload: dict[str, Any]
|
||||
seen: bool
|
||||
created_at: datetime
|
||||
Reference in new issue
Block a user