refactor(core): 优化权限管理和事件模型

- 重构 AdminManager 和 PermissionManager 以 Redis 为主要数据源
- 为所有事件模型添加 slots=True 提升性能
- 更新文档说明 Mypyc 编译注意事项
- 清理测试和调试文件
- 移动静态资源到 web_static 目录
This commit is contained in:
2026-01-13 08:35:54 +08:00
parent 7f331970dd
commit 3cbf5328bb
25 changed files with 434 additions and 409 deletions

View File

@@ -5,7 +5,7 @@
事件类型常量 `EventType`。所有具体的事件模型都应继承自 `OneBotEvent`。
"""
from dataclasses import dataclass, field
from typing import TYPE_CHECKING, Optional
from typing import TYPE_CHECKING, Optional, Final
from abc import ABC, abstractmethod
if TYPE_CHECKING:
@@ -18,15 +18,15 @@ class EventType:
用于标识不同种类的事件上报。
"""
META = 'meta_event'
META: Final[str] = 'meta_event'
"""元事件 (meta_event): 如心跳、生命周期等。"""
REQUEST = 'request'
REQUEST: Final[str] = 'request'
"""请求事件 (request): 如加好友请求、加群请求等。"""
NOTICE = 'notice'
NOTICE: Final[str] = 'notice'
"""通知事件 (notice): 如群成员增加、文件上传等。"""
MESSAGE = 'message'
MESSAGE: Final[str] = 'message'
"""消息事件 (message): 如私聊消息、群消息等。"""
MESSAGE_SENT = 'message_sent'
MESSAGE_SENT: Final[str] = 'message_sent'
"""消息发送事件 (message_sent): 机器人自己发送消息的上报。"""

View File

@@ -4,7 +4,7 @@
定义了消息相关的事件类,包括 MessageEvent, PrivateMessageEvent, GroupMessageEvent。
"""
from dataclasses import dataclass, field
from typing import List, Optional, Union
from typing import List, Optional, Union, ClassVar
from core.permission import Permission
from models.message import MessageSegment
@@ -27,16 +27,16 @@ class Anonymous:
"""匿名用户 flag"""
@dataclass
@dataclass(slots=True)
class MessageEvent(OneBotEvent):
"""
消息事件基类
"""
# 权限级别常量,用于装饰器参数
ADMIN = Permission.ADMIN
OP = Permission.OP
USER = Permission.USER
ADMIN: ClassVar[Permission] = Permission.ADMIN
OP: ClassVar[Permission] = Permission.OP
USER: ClassVar[Permission] = Permission.USER
message_type: str
"""消息类型: private (私聊), group (群聊)"""
@@ -80,7 +80,7 @@ class MessageEvent(OneBotEvent):
raise NotImplementedError("reply method must be implemented by subclasses")
@dataclass
@dataclass(slots=True)
class PrivateMessageEvent(MessageEvent):
"""
私聊消息事件
@@ -98,7 +98,7 @@ class PrivateMessageEvent(MessageEvent):
)
@dataclass
@dataclass(slots=True)
class GroupMessageEvent(MessageEvent):
"""
群聊消息事件

View File

@@ -4,7 +4,7 @@
定义了元事件相关的事件类,包括心跳事件和生命周期事件。
"""
from dataclasses import dataclass, field
from typing import Optional
from typing import Optional, Final
from .base import OneBotEvent, EventType
@@ -21,12 +21,12 @@ class LifeCycleSubType:
"""
生命周期子类型枚举
"""
ENABLE = 'enable' # 启用
DISABLE = 'disable' # 禁用
CONNECT = 'connect' # 连接
ENABLE: Final[str] = 'enable' # 启用
DISABLE: Final[str] = 'disable' # 禁用
CONNECT: Final[str] = 'connect' # 连接
@dataclass
@dataclass(slots=True)
class MetaEvent(OneBotEvent):
"""
元事件基类
@@ -40,7 +40,7 @@ class MetaEvent(OneBotEvent):
return EventType.META
@dataclass
@dataclass(slots=True)
class HeartbeatEvent(MetaEvent):
"""
心跳事件,用于确认连接状态
@@ -55,7 +55,7 @@ class HeartbeatEvent(MetaEvent):
"""心跳间隔时间(ms)"""
@dataclass
@dataclass(slots=True)
class LifeCycleEvent(MetaEvent):
"""
生命周期事件,用于通知框架生命周期变化

View File

@@ -21,7 +21,7 @@ class NoticeEvent(OneBotEvent):
return EventType.NOTICE
@dataclass
@dataclass(slots=True)
class FriendAddNoticeEvent(NoticeEvent):
"""
好友添加通知
@@ -30,7 +30,7 @@ class FriendAddNoticeEvent(NoticeEvent):
"""新好友 QQ 号"""
@dataclass
@dataclass(slots=True)
class FriendRecallNoticeEvent(NoticeEvent):
"""
好友消息撤回通知
@@ -42,7 +42,7 @@ class FriendRecallNoticeEvent(NoticeEvent):
"""被撤回的消息 ID"""
@dataclass
@dataclass(slots=True)
class GroupNoticeEvent(NoticeEvent):
"""
群组通知事件基类
@@ -54,7 +54,7 @@ class GroupNoticeEvent(NoticeEvent):
"""用户 QQ 号"""
@dataclass
@dataclass(slots=True)
class GroupRecallNoticeEvent(GroupNoticeEvent):
"""
群消息撤回通知
@@ -66,7 +66,7 @@ class GroupRecallNoticeEvent(GroupNoticeEvent):
"""被撤回的消息 ID"""
@dataclass
@dataclass(slots=True)
class GroupIncreaseNoticeEvent(GroupNoticeEvent):
"""
群成员增加通知
@@ -82,7 +82,7 @@ class GroupIncreaseNoticeEvent(GroupNoticeEvent):
"""
@dataclass
@dataclass(slots=True)
class GroupDecreaseNoticeEvent(GroupNoticeEvent):
"""
群成员减少通知
@@ -100,7 +100,7 @@ class GroupDecreaseNoticeEvent(GroupNoticeEvent):
"""
@dataclass
@dataclass(slots=True)
class GroupAdminNoticeEvent(GroupNoticeEvent):
"""
群管理员变动通知
@@ -113,7 +113,7 @@ class GroupAdminNoticeEvent(GroupNoticeEvent):
"""
@dataclass
@dataclass(slots=True)
class GroupBanNoticeEvent(GroupNoticeEvent):
"""
群禁言通知
@@ -132,7 +132,7 @@ class GroupBanNoticeEvent(GroupNoticeEvent):
"""
@dataclass
@dataclass(slots=True)
class GroupUploadFile:
"""
群文件信息
@@ -150,7 +150,7 @@ class GroupUploadFile:
"""文件总线 ID"""
@dataclass
@dataclass(slots=True)
class GroupUploadNoticeEvent(GroupNoticeEvent):
"""
群文件上传通知
@@ -159,7 +159,7 @@ class GroupUploadNoticeEvent(GroupNoticeEvent):
"""文件信息"""
@dataclass
@dataclass(slots=True)
class NotifyNoticeEvent(NoticeEvent):
"""
系统通知事件基类 (notify)
@@ -175,7 +175,7 @@ class NotifyNoticeEvent(NoticeEvent):
"""发送者 QQ 号"""
@dataclass
@dataclass(slots=True)
class PokeNotifyEvent(NotifyNoticeEvent):
"""
戳一戳通知
@@ -187,7 +187,7 @@ class PokeNotifyEvent(NotifyNoticeEvent):
"""群号 (如果是群内戳一戳)"""
@dataclass
@dataclass(slots=True)
class LuckyKingNotifyEvent(NotifyNoticeEvent):
"""
群红包运气王通知
@@ -199,7 +199,7 @@ class LuckyKingNotifyEvent(NotifyNoticeEvent):
"""运气王 QQ 号"""
@dataclass
@dataclass(slots=True)
class HonorNotifyEvent(NotifyNoticeEvent):
"""
群荣誉变更通知
@@ -216,7 +216,7 @@ class HonorNotifyEvent(NotifyNoticeEvent):
"""
@dataclass
@dataclass(slots=True)
class GroupCardNoticeEvent(GroupNoticeEvent):
"""
群成员名片更新通知
@@ -228,7 +228,7 @@ class GroupCardNoticeEvent(GroupNoticeEvent):
"""旧名片"""
@dataclass
@dataclass(slots=True)
class OfflineFile:
"""
离线文件信息
@@ -243,7 +243,7 @@ class OfflineFile:
"""下载链接"""
@dataclass
@dataclass(slots=True)
class OfflineFileNoticeEvent(NoticeEvent):
"""
接收离线文件通知
@@ -255,7 +255,7 @@ class OfflineFileNoticeEvent(NoticeEvent):
"""文件数据"""
@dataclass
@dataclass(slots=True)
class ClientStatus:
"""
客户端状态
@@ -267,7 +267,7 @@ class ClientStatus:
"""状态描述"""
@dataclass
@dataclass(slots=True)
class ClientStatusNoticeEvent(NoticeEvent):
"""
其他客户端在线状态变更通知
@@ -276,7 +276,7 @@ class ClientStatusNoticeEvent(NoticeEvent):
"""客户端信息"""
@dataclass
@dataclass(slots=True)
class EssenceNoticeEvent(GroupNoticeEvent):
"""
精华消息变动通知

View File

@@ -21,7 +21,7 @@ class RequestEvent(OneBotEvent):
return EventType.REQUEST
@dataclass
@dataclass(slots=True)
class FriendRequestEvent(RequestEvent):
"""
加好友请求事件
@@ -36,7 +36,7 @@ class FriendRequestEvent(RequestEvent):
"""请求 flag在调用处理请求的 API 时需要传入此 flag"""
@dataclass
@dataclass(slots=True)
class GroupRequestEvent(RequestEvent):
"""
加群请求/邀请事件