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)一次完整执行的流程:
- 启动模拟器(MuMu 等)获取 ADB 端口 → 初始化 BAAS;
- 活动检测:拉取 GameKee 活动,与本地 SQLite 状态对比,发现未处理的新活动;
- 新活动按配置触发推图(剧情 / 任务 / 挑战);
- 依次执行勾选的日常任务;
- 全部任务完成后读取剩余体力,计算扫荡次数:有活动且开启活动优先时先扫活动关卡(
-1= 按 AP 自动),否则扫普通/困难图(auto 模式下按剩余体力重算每关次数); - 写入执行记录 + 邮件通知。
运行依赖仅四个:fastapi、uvicorn、httpx、pydantic v2。BAAS 是可选依赖,本仓库代码不在模块顶层 import core,只有 baas_bridge.py 在函数内部惰性导入;BAAS 缺失时抛出带指引的 RuntimeError。因此项目可以在任意平台独立安装、测试、运行 WebUI。
几个值得注意的设计决策:
- 不修改 BAAS 源码:保持与上游的松耦合,便于跟随 BAAS 更新。BAAS-Plus 只作为外部依赖调用它。
- 测试不依赖真实环境:全部用
FakeBridge、FakeBaasThread等假对象替换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 自动化,可以试试把它作为调度层接入,省去每天手动决定“今天干什么”的步骤。欢迎反馈测试中遇到的问题。
⚠️ 测试提示:本项目仍在测试阶段,功能可能不稳定,请谨慎使用并留意执行日志。