feat: 添加带有消息处理和路由功能的NEW_napcat_adapter插件

- 为NEW_napcat_adapter插件实现了核心模块,包括消息处理、事件处理和路由。
- 创建了MessageHandler、MetaEventHandler和NoticeHandler来处理收到的消息和事件。
- 开发了SendHandler,用于向Napcat发送回消息。
引入了StreamRouter来管理多个聊天流,确保消息的顺序和高效处理。
- 增加了对各种消息类型和格式的支持,包括文本、图像和通知。
- 建立了一个用于监控和调试的日志系统。
This commit is contained in:
Windpicker-owo
2025-11-24 13:24:55 +08:00
parent b08c70dfa6
commit 36fce6ca98
28 changed files with 3041 additions and 824 deletions

View File

@@ -32,11 +32,11 @@ MoFox Bus 是 MoFox Bot 自研的统一消息中台,替换第三方 `maim_mess
## 3. 消息模型
### 3.1 Envelope TypedDict`types.py`
### 3.1 Envelope TypedDict<EFBFBD><EFBFBD>`types.py`<EFBFBD><EFBFBD>
- `MessageEnvelope`:核心字段包括 `id``direction``platform``timestamp_ms``channel``sender``content` 等,一律使用毫秒时间戳,保留 `raw_platform_message``metadata` 便于调试 / 扩展。
- `Content` 联合类型支持文本、图片、音频、文件、视频、事件、命令、系统消息,后续可扩展更多 literal。
- `SenderInfo` / `ChannelInfo` / `MessageDirection` / `Role` 等均以 `Literal` 控制取值,方便 IDE 静态检查。
- `MessageEnvelope` <20><>ȫ<EFBFBD><C8AB>Ƶ<EFBFBD> maim_message <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `message_info` + `message_segment` (SegPayload)<29><>`direction`<EFBFBD><EFBFBD>`schema_version` <20><> raw <20><><EFBFBD><EFBFBD><EFBFBD>ֶβ<D6B6><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD> `channel`<EFBFBD><EFBFBD>`sender`<EFBFBD><EFBFBD>`content` <EFBFBD><EFBFBD> v0 <20>ֶΪ<D6B6><CEAA>ѡ<EFBFBD><D1A1>
- `SegPayload` / `MessageInfoPayload` / `UserInfoPayload` / `GroupInfoPayload` / `FormatInfoPayload` / `TemplateInfoPayload` <20><> maim_message dataclass <20>Դ<EFBFBD>TypedDict <20><>Ӧ<EFBFBD><D3A6><EFBFBD>ʺ<EFBFBD>ֱ<EFBFBD><D6B1> JSON <20><><EFBFBD><EFBFBD>
- `Content` / `SenderInfo` / `ChannelInfo` <EFBFBD>Ȳ<EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܻ<EFBFBD><EFBFBD><EFBFBD> IDE ע<>⣬Ҳ<E2A3AC>Ƕ<EFBFBD> v0 content ģ<>͵Ļ<CDB5>֧
### 3.2 dataclass 消息段(`message_models.py`
@@ -62,15 +62,14 @@ TypedDict 更适合网络传输和依赖注入dataclass 版 MessageBase 则
## 5. 运行时调度(`runtime.py`
- `MessageRuntime`
- `add_route(predicate, handler)` `@runtime.route(...)` 装饰器注册消息处理器
- `register_before_hook` / `register_after_hook` / `register_error_hook`入监控、埋点、Trace
- `set_batch_handler` 支持一次处理批消息(例如批量落库)。
- `MessageProcessingError` 在 handler 抛出异常时封装上下文,便于日志追踪。
- `add_route(predicate, handler)` `@runtime.route(...)` 装饰器注册消息处理器
- `register_before_hook` / `register_after_hook` / `register_error_hook`册前置、后置、Trace 处理
- `set_batch_handler` 支持一次处理批消息(可用于 batch IO 优化)
- `MessageProcessingError` 在 handler 抛出异常时包装原因,方便日志追踪。
运行时内部使用 `RLock` 保护路由表,适合多协程并发读写,`_maybe_await` 自动兼容同步/异步 handler。
---
## 6. 传输层封装(`transport/`
### 6.1 HTTP
@@ -126,9 +125,9 @@ from mofox_bus.transport import HttpMessageServer
runtime = MessageRuntime()
@runtime.route(lambda env: env["content"]["type"] == "text")
@runtime.route(lambda env: (env.get("message_segment") or {}).get("type") == "text")
async def handle_text(env: types.MessageEnvelope):
print("收到文本", env["content"]["text"])
print("收到文本", env["message_segment"]["data"])
async def http_handler(messages: list[types.MessageEnvelope]):
await runtime.handle_batch(messages)