feat: 添加带有消息处理和路由功能的NEW_napcat_adapter插件
- 为NEW_napcat_adapter插件实现了核心模块,包括消息处理、事件处理和路由。 - 创建了MessageHandler、MetaEventHandler和NoticeHandler来处理收到的消息和事件。 - 开发了SendHandler,用于向Napcat发送回消息。 引入了StreamRouter来管理多个聊天流,确保消息的顺序和高效处理。 - 增加了对各种消息类型和格式的支持,包括文本、图像和通知。 - 建立了一个用于监控和调试的日志系统。
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user