56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
from dataclasses import dataclass, field
|
|
from typing import Optional, List, Dict, Any
|
|
|
|
@dataclass
|
|
class SourceChannel:
|
|
id: Optional[int]
|
|
channel_id: int
|
|
username: Optional[str]
|
|
title: Optional[str]
|
|
is_active: bool = True
|
|
created_at: Optional[str] = None
|
|
|
|
@dataclass
|
|
class TargetChannel:
|
|
id: Optional[int]
|
|
channel_id: int
|
|
title: Optional[str]
|
|
username: Optional[str]
|
|
post_interval_min: int = 30
|
|
personality: str = ""
|
|
custom_footer: str = ""
|
|
last_post_time: Optional[str] = None
|
|
is_active: bool = True
|
|
created_at: Optional[str] = None
|
|
|
|
@dataclass
|
|
class Post:
|
|
id: Optional[int]
|
|
source_channel_id: int
|
|
source_message_id: int
|
|
raw_text: Optional[str]
|
|
media_path: Optional[str] = None
|
|
media_type: Optional[str] = None
|
|
content_hash: Optional[str] = None
|
|
tags: List[str] = field(default_factory=list)
|
|
is_duplicate: bool = False
|
|
duplicate_of_id: Optional[int] = None
|
|
similarity_reason: Optional[str] = None
|
|
subject: Optional[str] = None
|
|
ai_text: Optional[str] = None
|
|
suggested_target_id: Optional[int] = None
|
|
target_channel_id: Optional[int] = None
|
|
status: str = "pending_review" # pending_review, published, rejected, deleted
|
|
published_to: List[Dict[str, Any]] = field(default_factory=list)
|
|
is_deleted: bool = False
|
|
review_message_id: Optional[int] = None
|
|
scheduled_at: Optional[str] = None
|
|
published_at: Optional[str] = None
|
|
created_at: Optional[str] = None
|
|
|
|
@dataclass
|
|
class Setting:
|
|
key: str
|
|
value: str
|
|
description: Optional[str] = None
|