feat: add api and mcp

This commit is contained in:
hh committed 2026-05-30 01:32:35 +02:00
1 parent 6a5cde6ae4
commit c40e720163
30 files changed
+2354 -31

No files matched your search

+160
View File
@@ -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