消息存储

Lingchu Bot 包含一个可选的消息存储服务,用于记录事件数据、处理结果、Bot 生命周期事件和平台 API 调用摘要。本页说明存储了什么、如何配置,以及如何访问存储的数据。
消息存储分为三层:
| 分层 | 文件 | 职责 |
|---|---|---|
| 平台适配 | hooks/adapters.py |
将 Bot/Event 解析为稳定的平台上下文,并把事件归一化为与适配器无关的元数据。 |
| 钩子注册 | hooks/handlers/message_store.py |
注册 NoneBot 的 event_preprocessor、event_postprocessor、run_preprocessor 和 run_postprocessor 钩子。 |
| 业务逻辑 | services/message_store.py |
通过仓库层写入事件接收、处理结果、生命周期和 API 调用摘要记录。 |
服务记录结构化摘要而非原始消息内容。事件会经过仓储层模型选择,高频的平台 / 适配器 / 框架组合可以使用专用 ORM 表。
| 记录类型 | 描述 |
|---|---|
| 事件接收 | Bot 接收到任意适配器事件时 |
| 处理结果 | 事件处理的结局 |
| Bot 生命周期 | 启动、关闭和连接事件 |
| API 调用摘要 | 事件处理期间发起的平台 API 调用 |
每条记录包含平台、适配器、框架、事件类别和适配器事件类型字段。QQ + OneBot V11 + NoneBot 事件会写入专用分区表;不支持的组合回退到旧的全局表。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
message_store_enabled |
boolean | true |
是否启用消息存储运行时钩子 |
message_store_retention_days |
number | 30 |
消息记录保留天数;0 禁用基于天数的过期 |
message_store_summary_limit |
number | 500 |
文本、数据和结果摘要的最大长度 |
message_store_record_api_calls |
boolean | true |
是否记录平台 API 调用摘要 |
message_store_cleanup_enabled |
boolean | true |
是否在关闭时清理过期的消息记录 |
记录根据 message_store_retention_days 保留:
- 设置为正数时,超过指定天数的记录会被清理。
- 设置为
0时,禁用基于天数的过期;记录将无限期保留。 - 当
message_store_cleanup_enabled为true时,清理在 Bot 关闭期间运行。
存储记录中的 platform 字段从适配器注册表派生:
| 场景 | 平台值 |
|---|---|
| OneBot V11 适配器已启用 | qq |
| 未知适配器 | unknown |
只有 LINGCHUAdapter 选中的适配器决定平台值。其他已注册的适配器被忽略。
消息存储使用 nonebot-plugin-orm 进行数据库访问。database/orm_crud.py 中的 ORM 辅助提供异步 CRUD 操作,在 worker thread 中运行以避免阻塞 NoneBot 事件循环。
禁用消息存储
Section titled “禁用消息存储”要完全禁用消息存储:
message_store_enabled = false禁用后,不会注册任何事件钩子,也不会写入任何记录。现有记录不会被自动删除。