Skip to content

v1.0.0

Choose a tag to compare

@Mrslippe Mrslippe released this 14 Sep 05:03
· 581 commits to main since this release

DDtoolkit v1.0.0

个人向 VTuber 帖子 / 账号证据归档工具 —— 定时抓取 B 站与微博动态、账号统计并归档到本地 SQLite,桌面端浏览与管理。

从 v0.9.9 到 1.0.0 共 22 个批次(devlog 060–081),主题是"档案可信":
把"抓没抓到、抓到的是不是真的、删没删"三件事各自补上机器判据,并把一处会让动态流
每轮空转
的线上故障修掉。数据库迁移新增 f004。
1.0 的含义不是功能变多,而是数据链路与验证基建都收敛了:307→315 条后端用例、
119→131 条前端用例、4 条位级/结构探针(含新增的场景切换与账号信息历史)。

🐛 修掉三个真问题(建议所有用户升级)

  • 动态流静默停摆(v0.9.9 引入的回归) —— R6 给动态流加的"平台级起跑闸门"把
    asyncio.Lock 存在模块级对象上,而综合档是每轮一个新事件循环:锁在首次 await 时绑死旧循环,
    第二轮起 bound to a different event loop 直接抛错,每一轮动态流什么都没抓
    (日志里每 60s 一条 ERROR,而顶栏一切正常)。改为"占时隙"(线程锁 + 锁外 sleep),
    不再持有任何 loop-bound 原语;ARCHITECTURE 增补不变量:模块级对象不得持有 asyncio 原语。
  • 弹幕"这场没有数据"是误报 —— 上游会间歇性变慢(实测 1.1s ↔ 15.6s),旧代码 12s 就放弃,
    于是"有 13857 条弹幕的场次"被报成没有弹幕。超时放宽到 30s + 3 次重试,并把上游取数拆出独立请求
    (详情弹窗秒开、弹幕/动态两格各自 loading、可就地重试);一次取数只打一轮上游(同场次单飞)。
  • 删掉"字段锁定"这个错误设计 —— 它让手改的昵称/签名不被抓取覆盖,却没有任何历史可查;
    现在平台签名只读、允许被抓取更新,旧值进 vtuber_field_history 记账并在
    「账号信息历史」里查看(手改不入账)。

✨ 新增能力

  • 签名来源与覆盖(A3) —— 卡片签名 = 自定义覆盖 → 指定平台账号 → 主账号 → 空。
    平台下拉里点某个平台只是换来源,不改任何平台的签名(此前点一下会把主账号签名改掉);
    输入框打字 = 覆盖,清空 = 撤销覆盖。
  • 账号信息历史 —— 档案设置里每个账号多一个历史入口:曾用名 / 曾用签名(平台侧旧值)
    • 抓取快照(粉丝数 / 直播状态 / 开播标题 / 来源标注,最近 60 条)。
  • 动态抓取按平台名单 —— 库里所有 V 的所有平台账号按平台分组,名单之间并行、
    名单内部串行;名单内间隔按长度自适应摊平,一轮 ≈50s,周期下限 60s(按轮开始计时)。
    实测(7 个 V / 10 个账号):一轮 40~44s、{bilibili: 8, weibo: 2} 请求、0 风控。
  • 日志按天轮转 —— logs/app.log + logs/app.log.YYYY-MM-DD(保留 7 份)。
    此前单文件长到 5.2MB / 33963 行、跨数月,排查前得先手工切分。
  • 档案设置全面实时化 —— 无保存钮,失焦/点击即写库;签名候选下拉(内嵌 chevron、
    浮层不裁剪、长签名 hover 自动横滚 + 渐隐)。

🔍 验证基建(本版的另一半)

  • UI 探针扩到四条:布局/三档宽度(原有)+ 档案设置几何与可点性(29 项,
    含 elementFromPoint 命中测试与"点一行不会关弹窗")+ 场景切换机(切 V 的
    预取→退场→提交是否走完)+ 位级签名(hero 药丸 / 日历格)。
  • 踩坑教训写进文档:① 几何断言看不见 pointer-events(面板"点不动"却全绿);
    ② 只在单个事件循环里跑的测试对"跨循环"无感;③ 探针读了点击前的旧 DOM 节点,
    把正常的场景机误判成"永久卡死"。三条都是同一句话:测试量错了轴,全绿或全红都没意义。
  • 后端 315 条 / 前端 131 条用例;scripts/dev_check.py 一把梭。

📦 资产

  • DDtoolkit_1.0.0_x64-setup.exe — Windows NSIS 安装包(用户级安装)
  • DDtoolkit-portable-win64.zip — 便携版(解压即用,含后端 onedir)

数据目录:安装版 %APPDATA%\com.ddtoolkit.app;便携版可设 DDTOOLKIT_DATA_DIR 自定义。
从 v0.9.3 起可直接覆盖安装(后端目录层级自 v0.9.2 起已修正)。

⚠️ 升级说明

  • 数据库自动迁移到 f004(新增 vtubers.sign_override / sign_source_account_id、
    建 vtuber_field_history、删除 accounts.locked_fields)。首次启动比平时稍慢,属正常。
  • "字段锁定"入口消失是预期:改昵称/签名不再被"锁"保护,而是被抓取覆盖时留下曾用值。
  • 若你曾用旧版手改过账号昵称/签名,那些改动仍在新版库里(只是不再被特殊保护)。
  • 微博取数需要登录态:未登录/失效时动态流的微博名单会整条跳过并在日志说明;
    重新扫码后下一轮自动恢复,不用重启。

🔧 技术栈

  • 后端:Python 3.14 + FastAPI + SQLAlchemy 2.0 + SQLite(WAL) + APScheduler + Alembic(迁移链 f004)
  • 前端:Vite + React 18 + TypeScript + Tailwind v4 + ECharts 6 + Radix
  • 桌面壳:Tauri v2(拉起后端 + 注入空闲端口 + Job Object 进程看门狗)

⚖️ 许可

MIT License(见 LICENSE)。字体:阿里妈妈方圆体(官方许可免费商用 + 允许嵌入)。