-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
81 lines (69 loc) · 2.44 KB
/
models.py
File metadata and controls
81 lines (69 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import datetime
from dataclasses import dataclass, field
from typing import Dict, List, Optional, Any, Callable, Set
from websockets import ServerConnection
from enums import GroupStatus, GroupRole, UserStatus, MessageType
@dataclass
class Group:
"""群组信息"""
group_id: str
name: str
owner_id: int # 群主ID
_id: str = ""
description: str = ""
avatar: str = "group_default.jpg"
created_at: int = field(default_factory=lambda: int(datetime.datetime.now().timestamp()))
status: GroupStatus = GroupStatus.ACTIVE
max_members: int = 500 # 最大成员数
member_count: int = 0 # 当前成员数
settings: Dict[str, Any] = field(default_factory=dict) # 群设置
@dataclass
class GroupMember:
"""群成员信息"""
group_id: str
user_id: int
role: GroupRole = GroupRole.MEMBER
_id: str = ""
joined_at: int = field(default_factory=lambda: int(datetime.datetime.now().timestamp()))
nickname: str = "" # 群昵称
last_read_message_id: Optional[str] = None # 最后读取的消息ID
mute_until: int = 0 # 禁言到期时间戳,0表示不禁言
# 数据类定义
@dataclass
class User:
"""用户信息"""
user_id: int = 0
username: str = ""
nickname: str = ""
password_hash: str = "" # 存储密码哈希
avatar: str = "default.jpg"
status: UserStatus = UserStatus.OFFLINE
last_seen: int = 0
department: str = ""
tags: List[str] = field(default_factory=list)
contact_list: List[int] = field(default_factory=list) # 联系人ID列表
@dataclass
class ClientConnection:
"""客户端连接信息"""
connection_id: str
websocket: ServerConnection
user_id: Optional[int] = None
device_id: Optional[str] = None
authenticated: bool = False
last_heartbeat: datetime.datetime = field(default_factory=datetime.datetime.now)
last_activity: datetime.datetime = field(default_factory=datetime.datetime.now)
created_at: datetime.datetime = field(default_factory=datetime.datetime.now)
client_info: Dict[str, Any] = field(default_factory=dict)
@dataclass
class Message:
"""消息结构"""
message_id: str
sender_id: int
receiver_id: int # 对于群聊,这里是group_id
message_type: MessageType
content: Dict[str, Any]
timestamp: int
read: bool = False
delivered: bool = False
is_group: bool = False # 是否是群消息
reply_to: Optional[str] = None # 回复的消息ID