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 (权限管理系统)

🛠️ 安装与配置

  1. 确保你的 bot.pypyproject.toml 已加载本插件目录。
  2. 安装 python 依赖:

    pip install aiofiles pyyaml aiohttp
  3. 配置主群 ID
    打开 __init__.py,修改以下变量为你自己的主群号(用于接收归档通知):

    # __init__.py
    MASTER_GROUP_ID = 123456789 

🔑 权限节点

本插件已接入 plugins.perms 权限系统。以下是注册的权限节点:

权限节点默认等级描述
archive_md.archive.createADMIN (管理员)允许执行归档操作
archive_md.archive.listADMIN (管理员)允许查看归档列表
archive_md.archive.downloadADMIN (管理员)允许打包下载档案
archive_md.archive.reindexSUPERUSER允许手动刷新文件索引
提示:超级用户 (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
│   │       └── ...
└── ...

如何手动修改档案?

如果你需要补充“处理结果”或修改“备注”:

  1. 在服务器直接打开对应的 content.md 文件。
  2. 修改顶部的 YAML Frontmatter (位于 --- 之间) 的 note 字段。
  3. 或者在 Markdown 正文下方直接添加文字。
  4. 保存文件。
  5. 对机器人发送 /刷新索引

📝 常见问题

Q: 为什么下载的压缩包里图片看不了?
A: 请解压整个压缩包,确保 content.mdassets 文件夹在同一级目录。Markdown 使用的是相对路径引用。

Q: 归档时提示“请引用合并转发消息”?
A: 必须使用 QQ 的“合并转发”功能(显示为聊天记录卡片),逐条转发或截图无法被解析。

Q: 我没有权限?
A: 请检查 plugins.perms 配置,确保你拥有 archive_md.archive.create 权限,或者你是群管理员/群主。