BAAS-Plus:基于 BAAS 的《蔚蓝档案》自动化调度器

项目地址:https://github.com/This-is-XiaoDeng/BAAS-Plus
许可证:GNU Affero General Public License v3.0
开发语言:Python 3.9+

概述

BAAS-Plus 是一个《蔚蓝档案》自动化调度器,执行一条完整流水线:自动启动模拟器 → 检测新活动并推图(仅已开始的活动)→ 执行日常任务 → 按剩余体力扫荡 → 邮件通知 → 自动关模拟器。它在 BAAS(Blue Archive Auto Script)的基础上构建,不修改其源码,仅通过调用 BAAS 提供的接口来驱动具体游戏内操作。

背景

BAAS 提供了扎实的游戏内操作能力;BAAS-Plus 在此之上补充了完整的调度与决策层:新活动是否已开始、日常任务完成后剩余体力如何分配、执行结果如何通知用户。它自己负责决策与调度,把具体操作交给 BAAS 执行,让日常自动化真正“无人值守”。

功能特性

  • 🤖 自动启动模拟器:支持 MuMu、雷电等,自动获取 ADB 连接。
  • 🎉 新活动自动推图:以 GameKee 为数据源检测新活动,剧情/任务/挑战可分别开关;活动模块自动对应,优先级为手动配置 > BAAS 记录 > 标题关键词匹配。
  • 🎯 扫荡前确认进入目标活动:主页轮播图多活动混合轮播时,用模板匹配确认当前页是目标活动再进入,避免进错活动;扫荡前自动推图(push_before_sweep,全推至 SSS)以解锁任务。
  • ⚡ 按体力扫荡:任务完成后读取实时 AP 计算扫荡次数;活动扫荡自动选择进行中的活动(手动配置 > BAAS 记录 > 标题关键词匹配),不会扫已结束或仅兑换可用的旧活动。
  • 🛡 实机检测敌人属性:推图进关前自动点击「敌人/克制」并 OCR 识别第一个敌人的防御类型,按游戏内克制表自动修正关卡属性数据(重→贯穿、特殊→神秘等),有效规避社区 JSON 数据的属性错误。对于复合装甲(新属性「分解」)等特殊属性,自动选队暂不支持,需手动处理;常规克制关系已自动修正。
  • 📧 邮件通知:执行结果通过 SMTP 推送,支持 QQ、163、网易免费企业邮的客户端授权码。
  • 📅 日程奖励最后领取collect_reward 在所有任务(含竞技场、扫荡)完成后执行,此时奖励档位已全部解锁。
  • 🖥 独立 WebUI:在浏览器中配置任务/扫荡/通知,查看活动状态与执行记录。

项目架构

代码分为七个模块,职责分离清晰:

baas_plus/
├── cli.py           # 命令行入口(run / webui / scan / test-email / test-ocr / reset-push)
├── config.py        # pydantic v2 配置模型 + JSON 读写(默认 data/config.json)
├── log_setup.py     # baas_plus.* 独立日志(文件 + 控制台,幂等)
├── engine.py        # 核心编排:模拟器 → 活动检测 → 推图 → 日常任务 → 按体力扫荡 → 通知
├── activity.py      # GameKee 活动数据源(httpx,参考 BlueArchive.ics)
├── baas_bridge.py   # BAAS 集成层(唯一允许接触 core 的模块,全部惰性导入)
├── store.py         # SQLite 状态存储(活动去重 + 执行记录,线程安全)
├── notifier.py      # 邮件通知(smtplib 标准库)
└── webui/           # FastAPI 应用 + 单页前端(默认 127.0.0.1:18080)

核心引擎(engine.py)一次完整执行的流程:

  1. 启动模拟器(MuMu 等)获取 ADB 端口 → 初始化 BAAS;
  2. 活动检测:拉取 GameKee 活动,与本地 SQLite 状态对比,发现未处理的新活动;
  3. 新活动按配置触发推图(剧情 / 任务 / 挑战);
  4. 依次执行勾选的日常任务;
  5. 全部任务完成后读取剩余体力,计算扫荡次数:有活动且开启活动优先时先扫活动关卡(-1 = 按 AP 自动),否则扫普通/困难图(auto 模式下按剩余体力重算每关次数);
  6. 写入执行记录 + 邮件通知。

运行依赖仅四个:fastapi、uvicorn、httpx、pydantic v2。BAAS 是可选依赖,本仓库代码不在模块顶层 import core,只有 baas_bridge.py 在函数内部惰性导入;BAAS 缺失时抛出带指引的 RuntimeError。因此项目可以在任意平台独立安装、测试、运行 WebUI。

几个值得注意的设计决策:

  • 不修改 BAAS 源码:保持与上游的松耦合,便于跟随 BAAS 更新。BAAS-Plus 只作为外部依赖调用它。
  • 测试不依赖真实环境:全部用 FakeBridgeFakeBaasThread 等假对象替换 BaasBridge,网络请求用 mock;测试无需 BAAS、模拟器、网络或 Windows。
  • 配置向后兼容data/config.json 是用户的既有文件,新增字段一律带默认值;扫荡列表解析沿用正则提取,兼容历史配置格式。
  • 日志隔离:只使用 baas_plus.* 命名空间,不干扰宿主环境的日志配置,确保日志稳定输出。

安装与使用(Windows)

前置条件:Windows + 模拟器 + 可运行的 BAAS 环境(BAAS 源码已装好依赖,config/ 目录需存在)。

# 1) 拉取 BAAS-Plus(仅项目自身,不内置 BAAS)
git clone https://github.com/This-is-XiaoDeng/BAAS-Plus.git

# 2) 把 BAAS-Plus 装进 BAAS 的运行环境(editable)
cd D:\BAAS                  # BAAS 根目录(Python 3.9 + 依赖已就绪)
.venv\Scripts\python.exe -m pip install -e D:\BAAS-Plus

# 3) 从 BAAS 根目录启动 WebUI
.venv\Scripts\python.exe -m baas_plus.cli webui
注意将安装命令中的 D:\BAAS 替换为实际的 BAAS 安装位置。 .venv\Scripts\python.exe 是 BAAS 的 Release 版的虚拟 Python 环境的位置。

打开 http://127.0.0.1:18080 完成配置后:

.venv\Scripts\python.exe -m baas_plus.cli run         # 立即执行一次完整流程
.venv\Scripts\python.exe -m baas_plus.cli test-email  # 测试邮件通知

详见 WebUI 中的指引。

已知限制

  • 活动模块对应:活动推图需要 BAAS 社区活动模块支持。BAAS-Plus 已实现自动对应(手动配置 > 历史记录 > 标题关键词匹配)。若遇到新的纯中文标题活动无法自动识别,只需在配置中手动指定一次即可。
  • 运行环境:实际运行需要 Windows + 模拟器 + BAAS 环境;调度器本身可在任意平台开发测试(不 import core 的部分)。
  • 模板依赖:实机自动化依赖模拟器分辨率与截图模板;活动 UI 改版时可能需要更新模板,执行日志会输出定位失败详情,便于快速定位。
  • 配置兼容:首次调用时会自动对齐不同版本 BAAS 的配置字段(幂等,保留用户已有配置),无需手动修改。

许可

BAAS-Plus 以 AGPL-3.0 发布。BAAS 本体为 GPL-3.0,本项目仅作为外部依赖调用、未修改其源码(AGPL §13 允许与 GPL-3 作品结合);活动数据源逻辑参考 BlueArchive.ics(AGPL-3.0)。


BAAS-Plus 由我自己开发维护。如果你在跑 BAAS 自动化,可以试试把它作为调度层接入,省去每天手动决定“今天干什么”的步骤。欢迎反馈测试中遇到的问题。

⚠️ 测试提示:本项目仍在测试阶段,功能可能不稳定,请谨慎使用并留意执行日志。

添加新评论