NoneBot Plugin - Markdown 聊天记录归档 (Archive MD)
这是一个用于 NoneBot2 的高级聊天记录归档插件。它旨在帮助群主和管理员将 QQ 群内的“吵架现场”、“重要通知”或“趣事”永久保存为 Markdown 格式。
支持 合并转发解析(支持无限套娃)和 实时手动录制 两种模式,所有图片资源本地化存储,并支持一键打包下载。
✨ 主要功能
📂 双模式归档:
- 事后归档:引用一条“合并转发”消息,自动解析内容(支持多层嵌套转发)。
- 实时录制:通过指令开启录制,机器人将实时记录群内消息直到停止。
- 🖼️ 资源本地化:自动下载聊天记录中的图片到服务器,防止链接过期失效。
- 📝 Markdown 存储:生成通用的 Markdown 文件,结构清晰,支持图文混排,方便二次编辑或导入笔记软件(如 Obsidian)。
- 🏢 多群隔离与指定:数据按群号物理隔离。支持跨群归档(例如在管理群操作,将档案归入目标群名下)。
- 📦 打包下载:通过指令将 Markdown 和图片资源打包成
.zip上传至群文件。 - 🔔 主群通知:任何归档操作都会自动通知指定的“主群”管理员。
📦 依赖
- Python 3.8+
- NoneBot2 + OneBot V11 Adapter
Python 库:
pip install aiofiles pyyaml aiohttp- [必须] 本地自定义插件:
plugins.perms(你的权限管理系统)
⚙️ 配置
打开 __init__.py,修改以下变量:
# 主群 ID (用于接收所有归档通知)
MASTER_GROUP_ID = 123456789
# 归档数据存储路径
BASE_DIR = Path("data/archives")🔑 权限节点
本插件已接入 plugins.perms 权限系统。
| 权限节点 | 默认等级 | 描述 |
|---|---|---|
archive_md.archive.create | ADMIN | 允许执行归档/录制操作 |
archive_md.archive.list | ADMIN | 允许查看档案列表 |
archive_md.archive.download | ADMIN | 允许打包下载档案 |
archive_md.archive.reindex | SUPERUSER | 允许手动刷新文件索引 |
📖 使用手册
1. 模式一:合并转发归档 (事后)
适用于事件已经发生,有人整理好了合并转发消息。
- 操作:引用(回复) 那条合并转发消息。
指令:
/归档 <标题> [备注] [-g 目标群号]参数:
-g(可选):指定归档存入哪个群的文件夹。不填默认存入当前群。
示例:
/归档 1124吵架事件 因抢红包引发(存当前群)/归档 隔壁群瓜 只有截图 -g 111222333(存入 111222333 群)
2. 模式二:手动实时录制 (实时)
适用于事件正在进行中,需要机器人当“速记员”。
开始录制:
/开始存档 [-g 目标群号]- 机器人将开始缓存该群后续的所有消息(过滤指令)。
结束并保存:
/结束存档 <标题> [备注]示例:
/开始存档-> (大家开始聊天) ->/结束存档 深夜闲聊
3. 查看与下载
查看列表:
/档案列表 [群号]- 如果不填群号,默认看当前群。
下载档案:
/下载档案 <档案ID>- 机器人会发送一个
.zip文件(或上传到群文件)。 - 解压后,直接打开
content.md即可查看,图片会自动显示。
- 机器人会发送一个
4. 维护指令
刷新索引:
/刷新索引- 当你手动在服务器修改了 Markdown 文件内容后,使用此指令更新机器人的缓存列表。
📂 数据结构
数据存储在 Bot 根目录的 data/archives/ 下,结构如下:
data/archives/
├── index.json # 全局索引文件 (自动生成)
├── 123456/ # 群号目录
│ ├── 20231124_1700888888/ # 事件目录 (日期_时间戳ID)
│ │ ├── content.md # 核心 Markdown 内容
│ │ └── assets/ # 本地图片资源
│ │ ├── 0_170088.jpg
│ │ └── ...
└── ...如何手动编辑?
- 在服务器找到对应的
content.md。 - 你可以随意修改
title(在顶部的 YAML 区域) 或note。 - 你也可以在正文里补充文字结论。
- 保存后,对机器人发送
/刷新索引即可生效。