| """ |
| Webhook数据模型 |
| 定义Bot间消息传递的数据结构 |
| """ |
| |
| from typing import Optional, Dict, List, Any |
| from datetime import datetime |
| from pydantic import BaseModel, Field, ConfigDict |
| import uuid |
| |
| |
| class UserInfo(BaseModel): |
| """用户信息""" |
| user_id: int |
| username: Optional[str] = None |
| first_name: Optional[str] = None |
| last_name: Optional[str] = None |
| is_bot: bool = False |
| |
| |
| class ReplyInfo(BaseModel): |
| """回复消息信息""" |
| user_info: UserInfo |
| timestamp: Optional[datetime] = None |
| content: str |
| message_id: Optional[int] = None |
| |
| |
| class BotMessage(BaseModel): |
| """Bot消息模型""" |
| # 消息基本信息 |
| message_id: str = Field(default_factory=lambda: str(uuid.uuid4())) |
| bot_username: str |
| group_id: int |
| timestamp: datetime = Field(default_factory=datetime.now) |
| |
| # 消息内容 |
| message_content: str |
| message_type: str = "text" # text, photo, document, etc. |
| |
| # 用户信息 |
| sender_info: UserInfo |
| |
| # 回复信息(可选) |
| reply_info: Optional[ReplyInfo] = None |
| |
| # Telegram特定字段 |
| telegram_message_id: Optional[int] = None |
| chat_type: str = "group" # group, supergroup, private |
| |
| # 扩展字段 |
| metadata: Dict[str, Any] = Field(default_factory=dict) |
| |
| model_config = ConfigDict( |
| json_encoders={ |
| datetime: lambda v: v.isoformat() |
| } |
| ) |
| |
| |
| class WebhookConfig(BaseModel): |
| """Webhook配置""" |
| # 服务器配置 |
| server_host: str = "0.0.0.0" |
| server_port: int = 8080 |
| |
| # 认证配置 |
| auth_token: str |
| |
| # 连接配置 |
| webhook_url: Optional[str] = None # 客户端连接的Webhook URL |
| |
| # 消息过滤配置 |
| enabled_groups: List[int] = Field(default_factory=list) |
| message_filters: Dict[str, Any] = Field(default_factory=dict) |
| |
| # 重试配置 |
| max_retries: int = 3 |
| retry_delay: float = 1.0 |
| |
| # 超时配置 |
| connection_timeout: float = 10.0 |
| request_timeout: float = 5.0 |
| |
| |
| class BotRegistration(BaseModel): |
| """Bot注册信息""" |
| bot_username: str |
| auth_token: str |
| subscribed_groups: List[int] = Field(default_factory=list) |
| webhook_endpoint: Optional[str] = None # Bot的回调端点 |
| |
| # 注册时间 |
| registered_at: datetime = Field(default_factory=datetime.now) |
| last_seen: datetime = Field(default_factory=datetime.now) |
| |
| model_config = ConfigDict( |
| json_encoders={ |
| datetime: lambda v: v.isoformat() |
| } |
| ) |
| |
| |
| class WebhookResponse(BaseModel): |
| """Webhook响应""" |
| success: bool |
| message: str = "" |
| data: Optional[Dict[str, Any]] = None |
| timestamp: datetime = Field(default_factory=datetime.now) |
| |
| model_config = ConfigDict( |
| json_encoders={ |
| datetime: lambda v: v.isoformat() |
| } |
| ) |
| |
| |
| class MessageBroadcast(BaseModel): |
| """消息广播请求""" |
| bot_message: BotMessage |
| target_groups: Optional[List[int]] = None # 如果为None,则广播给所有订阅的Bot |
| exclude_bots: List[str] = Field(default_factory=list) # 排除的Bot用户名列表 |