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.createADMIN允许执行归档/录制操作
archive_md.archive.listADMIN允许查看档案列表
archive_md.archive.downloadADMIN允许打包下载档案
archive_md.archive.reindexSUPERUSER允许手动刷新文件索引

📖 使用手册

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
│   │       └── ...
└── ...

如何手动编辑?

  1. 在服务器找到对应的 content.md
  2. 你可以随意修改 title (在顶部的 YAML 区域) 或 note
  3. 你也可以在正文里补充文字结论。
  4. 保存后,对机器人发送 /刷新索引 即可生效。