This commit is contained in:
baby20162016
2026-01-01 00:58:01 +08:00
parent 386534c250
commit 3e91c05688
11 changed files with 114 additions and 80 deletions

View File

@@ -1,2 +1,3 @@
from .event import Event, MessageSegment
__all__ = ["Event", "MessageSegment", "Sender"]
__all__ = ["Event", "MessageSegment", "Sender"]

View File

@@ -1 +1 @@
#TODO 数据类型
# TODO 数据类型

View File

@@ -1,7 +1,9 @@
from dataclasses import dataclass, field
from typing import List, Optional, Dict, Any
from typing import Any, Dict, List, Optional
from .sender import Sender
@dataclass
class MessageSegment:
type: str
@@ -26,7 +28,6 @@ class MessageSegment:
return f"[MS:{self.type}:{self.data}]"
@dataclass
class Event:
post_type: str
@@ -58,27 +59,25 @@ class Event:
segments = []
if isinstance(raw_msg_array, list):
segments = [
MessageSegment(type=seg["type"], data=seg["data"])
MessageSegment(type=seg["type"], data=seg["data"])
for seg in raw_msg_array
]
sender_data = data.get("sender")
sender_obj = None
if isinstance(sender_data, dict):
sender_obj = Sender(**{
k: v for k, v in sender_data.items()
if k in Sender.__annotations__
})
sender_obj = Sender(
**{k: v for k, v in sender_data.items() if k in Sender.__annotations__}
)
# 数据整合
processed_data = data.copy()
processed_data["message"] = segments
processed_data["sender"] = sender_obj
# 字段过滤:只提取 dataclass 中定义的字段
valid_data = {
k: v for k, v in processed_data.items()
if k in cls.__annotations__
k: v for k, v in processed_data.items() if k in cls.__annotations__
}
return cls(**valid_data)
@@ -93,4 +92,4 @@ class Event:
@property
def is_request(self) -> bool:
return self.post_type == "request"
return self.post_type == "request"

View File

@@ -1,16 +1,17 @@
from dataclasses import dataclass
from typing import Optional
@dataclass
class Sender:
user_id: int
nickname: str
sex: str = "unknown"
age: int = 0
# 群聊特有字段
card: Optional[str] = None # 群名片
area: Optional[str] = None # 地区
level: Optional[str] = None # 等级
role: Optional[str] = None # 角色: owner/admin/member
title: Optional[str] = None # 专属头衔
card: Optional[str] = None # 群名片
area: Optional[str] = None # 地区
level: Optional[str] = None # 等级
role: Optional[str] = None # 角色: owner/admin/member
title: Optional[str] = None # 专属头衔