message_builder重构完成

This commit is contained in:
UnCLAS-Prommer
2025-08-20 22:48:52 +08:00
parent 9253c0ad77
commit 924983e6de
6 changed files with 123 additions and 107 deletions

View File

@@ -1,26 +1,27 @@
import copy
from typing import Dict, Any
class AbstractClassFlag:
pass
class BaseDataModel:
def deepcopy(self):
return copy.deepcopy(self)
def temporarily_transform_class_to_dict(obj: Any) -> Any:
"""
将对象或容器中的 AbstractClassFlag 子类(类对象)或 AbstractClassFlag 实例
将对象或容器中的 BaseDataModel 子类(类对象)或 BaseDataModel 实例
递归转换为普通 dict不修改原对象。
- 对于类对象isinstance(value, type) 且 issubclass(..., AbstractClassFlag)
- 对于类对象isinstance(value, type) 且 issubclass(..., BaseDataModel)
读取类的 __dict__ 中非 dunder 项并递归转换。
- 对于实例isinstance(value, AbstractClassFlag)),读取 vars(instance) 并递归转换。
- 对于实例isinstance(value, BaseDataModel)),读取 vars(instance) 并递归转换。
"""
def _transform(value: Any) -> Any:
# 值是类对象且为 AbstractClassFlag 的子类
if isinstance(value, type) and issubclass(value, AbstractClassFlag):
# 值是类对象且为 BaseDataModel 的子类
if isinstance(value, type) and issubclass(value, BaseDataModel):
return {k: _transform(v) for k, v in value.__dict__.items() if not k.startswith("__") and not callable(v)}
# 值是 AbstractClassFlag 的实例
if isinstance(value, AbstractClassFlag):
# 值是 BaseDataModel 的实例
if isinstance(value, BaseDataModel):
return {k: _transform(v) for k, v in vars(value).items()}
# 常见容器类型,递归处理

View File

@@ -1,11 +1,11 @@
from typing import Optional, Dict, Any
from dataclasses import dataclass, field, fields, MISSING
from typing import Optional, Any
from dataclasses import dataclass, field
from . import AbstractClassFlag
from . import BaseDataModel
@dataclass
class DatabaseUserInfo(AbstractClassFlag):
class DatabaseUserInfo(BaseDataModel):
platform: str = field(default_factory=str)
user_id: str = field(default_factory=str)
user_nickname: str = field(default_factory=str)
@@ -21,7 +21,7 @@ class DatabaseUserInfo(AbstractClassFlag):
@dataclass
class DatabaseGroupInfo(AbstractClassFlag):
class DatabaseGroupInfo(BaseDataModel):
group_id: str = field(default_factory=str)
group_name: str = field(default_factory=str)
group_platform: Optional[str] = None
@@ -35,7 +35,7 @@ class DatabaseGroupInfo(AbstractClassFlag):
@dataclass
class DatabaseChatInfo(AbstractClassFlag):
class DatabaseChatInfo(BaseDataModel):
stream_id: str = field(default_factory=str)
platform: str = field(default_factory=str)
create_time: float = field(default_factory=float)
@@ -55,7 +55,7 @@ class DatabaseChatInfo(AbstractClassFlag):
@dataclass(init=False)
class DatabaseMessages(AbstractClassFlag):
class DatabaseMessages(BaseDataModel):
def __init__(
self,
message_id: str = "",

View File

@@ -1,8 +1,10 @@
from dataclasses import dataclass, field
from typing import Optional
from . import BaseDataModel
@dataclass
class TargetPersonInfo:
class TargetPersonInfo(BaseDataModel):
platform: str = field(default_factory=str)
user_id: str = field(default_factory=str)
user_nickname: str = field(default_factory=str)

View File

@@ -1,9 +1,10 @@
from typing import Optional
from dataclasses import dataclass, field
from . import BaseDataModel
@dataclass
class MessageAndActionModel:
class MessageAndActionModel(BaseDataModel):
time: float = field(default_factory=float)
user_id: str = field(default_factory=str)
user_platform: str = field(default_factory=str)