Skip to content

Repository files navigation

SocialDatabase 数据同步插件图标

SocialDatabase 数据同步

AstrBot 插件标识:tntexploding/astrbot_plugin_socialdatabase

这是一个独立的 AstrBot 插件。它通过 OneBot v11 aiocqhttp 适配器按需读取群成员,把每个群转换为一个版本化 JSON 批次,并通过 HTTP 上传给 SocialDatabase

插件与服务端没有 Python 代码依赖:插件只负责采集、持久排队和 HTTP 发送; SocialDatabase 只负责认证、校验、幂等导入、非破坏合并和查询。两者的唯一接口 是 POST /api/v1/imports/json

要求

  • AstrBot >=4.17,<5
  • OneBot v11 aiocqhttp 平台适配器
  • 可访问的 SocialDatabase HTTP 服务;公网部署必须使用 HTTPS

安装

插件被官方市场收录后,可在 AstrBot WebUI 插件市场中搜索 “SocialDatabase 数据同步”安装。

在 AstrBot WebUI 中使用仓库地址安装:

https://github.com/tntexploding/astrbot_plugin_socialdatabase

也可以在 AstrBot 根目录手动安装:

cd data/plugins
git clone https://github.com/tntexploding/astrbot_plugin_socialdatabase.git

然后在 WebUI 重载插件。AstrBot 会依据仓库根目录的 requirements.txt 安装 aiohttp。不要只复制 main.py;辅助模块、配置 Schema 和依赖文件都必须保留。

配置

插件通过 AstrBot WebUI 管理 _conf_schema.json 中的配置:

  • server_url:SocialDatabase 根地址,不要附加 API 路径。
  • api_token:服务端 Bearer 令牌;留空时仍允许采集入队,但不会上传。
  • allowed_group_ids:允许采集的群号;空列表拒绝所有群。
  • collect_all_enabled:是否允许批量采集,默认关闭;开启后仍只处理白名单群。
  • producer:稳定的数据生产方名称,默认 astrbot-socialdatabase
  • request_timeout_seconds:OneBot 调用和 HTTP 请求总超时。
  • retry_interval_seconds:首次重试及空闲轮询间隔。
  • max_attempts_per_cycle:每轮最多处理的待发送批次数。
  • no_cache:禁用 OneBot 群信息缓存,并为 HTTP 请求发送 no-store

令牌保存在 AstrBot 的插件配置中,不应写入本仓库、日志或问题报告。

管理员命令

  • /socialdb_collect:仅在当前群属于采集白名单时生成一个 JSON v1 批次。
  • /socialdb_collect_all:需显式启用,只采集机器人已加入且位于白名单中的群。
  • /socialdb_flush:忽略退避时间,立即尝试当前队列的一轮批次。
  • /socialdb_status:显示 pending、rejected、令牌配置状态和最近上传结果;不显示令牌值。

插件不会自动定时采集。后台任务只重试已经持久化的批次。 全部管理员命令会显式截断当前消息事件,不继续进入 AstrBot 的 LLM 流程。

数据与权限边界

只有 AstrBot 管理员主动执行采集命令且目标群位于显式白名单时,插件才会通过当前 aiocqhttp 适配器读取群列表、群资料和群成员资料。采集结果仅发送到管理员 配置的 server_url;插件不连接第三方统计服务,也不会把 api_token 写入 批次、日志或命令响应。部署者应确认自己有权处理对应群成员数据。

队列与故障恢复

采集命令返回成功前,会先把批次原子写入 AstrBot 官方约定的数据目录:

data/plugin_data/astrbot_plugin_socialdatabase/
├── pending/
└── rejected/

该目录不位于插件源码中,更新或重装插件不会覆盖待发送批次;部署时应把它纳入 AstrBot 备份。网络超时、401、403、429 和服务端故障会保留原始 producer + batch_id 并指数退避。HTTP 200/201 确认后删除 pending 文件; 400、409、413、415、422 会移入 rejected 并保存错误原因。

服务端导入历史是成功批次的权威记录。不要直接修改已经被服务端接受过的稳定 批次 ID 对应内容。

数据与兼容性

插件只提交本次 OneBot 返回的成员。批次没有出现某个历史成员,不表示该成员 退群;SocialDatabase 不会因此删除关系或清空最后已知资料。

本仓库的 contracts/import-batch-v1.schema.json 是开发和测试使用的 JSON v1 契约快照,权威说明由 SocialDatabase 的 数据格式文档 维护。插件运行时不导入或安装 SocialDatabase Python 包。

插件版本 AstrBot SocialDatabase 接口
0.8.x >=4.17,<5 JSON v1,服务端 >=0.8.0

首次连接真实 AstrBot、OneBot 与服务端时,按 SocialDatabase v0.8.0联合调试清单 验证热重载、离线队列、幂等导入和历史关系保留。

令牌轮换

  1. 服务端同时接受新、旧令牌。
  2. 在插件配置中换成新令牌并重载插件。
  3. 执行 /socialdb_flush,确认 pending 归零。
  4. 服务端撤销旧令牌。

如果顺序操作失误,401 只触发持久重试,不会丢弃批次。

开发

python -m venv .venv
python -m pip install -r requirements-dev.txt
python -m ruff format --check .
python -m ruff check .
python -m pytest

纯模块测试不要求启动 AstrBot;发布前仍应按照 AstrBot 官方开发文档,在真实 AstrBot 与实际 OneBot 实现中完成插件加载、重载及命令联调。

维护者发布到官方插件市场时,请使用仓库内的 发布清单核对版本、身份和提交步骤。

License

MIT

About

AstrBot 插件:按需采集 OneBot 群成员,持久排队并上传到 SocialDatabase。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

Generated from Soulter/helloworld