NoneBot Plugin - Markdown 聊天记录归档 (Archive MD)
这是一个用于 NoneBot2 的高级聊天记录归档插件。它允许管理员将 QQ 群内的“合并转发”消息永久保存为 Markdown 格式,并自动下载图片至本地,防止链接失效。支持多租户(多群)隔离、主群通知、Web/文件查看以及自定义元数据。
✨ 主要功能
- Markdown 格式存储:将聊天记录转换为通用的 Markdown 文件,支持图文混排。
- 资源本地化:自动下载聊天记录中的图片到本地服务器,彻底告别“图片已裂开/过期”。
- 元数据管理:支持为每次归档添加“标题”和“备注”,方便后续检索。
- 多群隔离与指定:数据按群号物理隔离,但支持将 A 群的消息归档至 B 群名下(
-g参数)。 - 打包下载:通过指令将 Markdown 和图片资源打包成
.zip并上传至群文件,方便在任何设备查看。 - 主群审计:任何群发生归档操作,机器人会自动向指定的“主群”发送通知。
- 权限系统集成:深度集成自定义的
plugins.perms权限管理系统。
📦 依赖
- Python 3.8+
- NoneBot2 + OneBot V11 Adapter
- 第三方库:
aiofiles,pyyaml,aiohttp - [必须] 本地自定义插件:
plugins.perms(权限管理系统)
🛠️ 安装与配置
- 确保你的
bot.py或pyproject.toml已加载本插件目录。 安装 python 依赖:
pip install aiofiles pyyaml aiohttp配置主群 ID:
打开__init__.py,修改以下变量为你自己的主群号(用于接收归档通知):# __init__.py MASTER_GROUP_ID = 123456789
🔑 权限节点
本插件已接入 plugins.perms 权限系统。以下是注册的权限节点:
| 权限节点 | 默认等级 | 描述 |
|---|---|---|
archive_md.archive.create | ADMIN (管理员) | 允许执行归档操作 |
archive_md.archive.list | ADMIN (管理员) | 允许查看归档列表 |
archive_md.archive.download | ADMIN (管理员) | 允许打包下载档案 |
archive_md.archive.reindex | SUPERUSER | 允许手动刷新文件索引 |
提示:超级用户 (SUPERUSER) 默认拥有所有权限。
📖 使用手册
1. 新建归档 (Archive)
将聊天记录保存到服务器。
- 前置动作:在手机/电脑 QQ 上选中多条消息 -> 转发 -> 合并转发 -> 发送给机器人所在的群。
指令:引用(回复) 那条合并转发消息,并发送:
/归档 <标题> [备注] [-g 目标群号]参数说明:
标题:必填,事件的简短概括。备注:选填,事件的详细起因或处理结果。-g/群=:选填,指定归档到哪个群的文件夹下。不填默认存到当前群。
示例:
/归档 1124吵架事件 因抢红包引发(存到当前群)/归档 隔壁群瓜 只有截图 -g 111222333(存到 111222333 群)
2. 查看列表 (List)
查看某个群已归档的所有事件。
指令:
/档案列表 [群号]- 说明:如果不填群号,默认查看当前群的列表。
3. 下载档案 (Download)
获取 Markdown 文件和图片的压缩包。
指令:
/下载档案 <档案ID>- 说明:
档案ID可以通过列表指令获取。机器人会发送一个 ZIP 文件,解压后直接打开content.md即可完美阅读。
4. 刷新索引 (Reindex)
当你手动在服务器修改了 Markdown 文件后,需要使用此指令更新缓存。
指令:
/刷新索引
📂 数据结构与手动编辑
所有数据存储在 Bot 根目录的 data/archives/ 下。
data/archives/
├── index.json # 全局索引文件 (自动生成)
├── 123456/ # 群号目录
│ ├── 20231124_1700888888/ # 事件目录 (日期_时间戳ID)
│ │ ├── content.md # 核心内容文件
│ │ └── assets/ # 图片资源
│ │ ├── 0_170088.jpg
│ │ └── ...
└── ...如何手动修改档案?
如果你需要补充“处理结果”或修改“备注”:
- 在服务器直接打开对应的
content.md文件。 - 修改顶部的 YAML Frontmatter (位于
---之间) 的note字段。 - 或者在 Markdown 正文下方直接添加文字。
- 保存文件。
- 对机器人发送
/刷新索引。
📝 常见问题
Q: 为什么下载的压缩包里图片看不了?
A: 请解压整个压缩包,确保 content.md 和 assets 文件夹在同一级目录。Markdown 使用的是相对路径引用。
Q: 归档时提示“请引用合并转发消息”?
A: 必须使用 QQ 的“合并转发”功能(显示为聊天记录卡片),逐条转发或截图无法被解析。
Q: 我没有权限?
A: 请检查 plugins.perms 配置,确保你拥有 archive_md.archive.create 权限,或者你是群管理员/群主。