Conversation
为「脚本配置」来源(`Info.Mode='脚本'`)打基础:per-user 副本以后可以落在脚本级目录
`data/{script_id}/Default/...`,与 MAA 的 `data/{script_id}/Default/ConfigFile` 同构。
- `one_dragon.py`:新增 `SCRIPT_LEVEL_OWNER = "Default"` 与 `owner_user_id(user_id, mode)`,
统一「按来源决定副本维度」的口径(脚本 = 脚本级共享;用户 / 直控 = 该用户自己的副本)
- `_validate_user_id`:单独放行 `SCRIPT_LEVEL_OWNER` 这一个字面量;仍拒绝 `..` 与路径分隔符,
目录穿越的安全边界不变(附回归测试)
- 单元测试:owner 解析、两个用户命中同一份脚本级副本而用户级各归各、非法 id 仍被拒绝
本提交只建立维度与安全边界,尚未接线到运行时与接口(见后续提交)。
「脚本」来源的用户改为共读共写脚本级那一份 per-user 副本(`data/{script_id}/Default/...`),
「用户」来源保持不变;直控不读 MAS 副本。
- `api/scripts.py`:新增 `_bettergi_owner_id(script_config, user_id)`,读该用户的
`Info.Mode` 后用 `one_dragon.owner_user_id` 解析;沿用 `_bettergi_user_id` 做
「用户是否存在」校验,两者职责分离
- 三条真正读写 per-user 副本的链路接上 owner:一条龙设置读取(GET settings)、
保存(POST settings 的原生副本部分)、自定义配置组列表(custom-groups)
- 其余 `_bettergi_user_id` 调用保持传真实 userId,不参与副本维度
尚未接线:运行时(AutoProxy / ScriptConfig 的物化与快照)与前端文案见后续提交。
来源选「脚本」的用户,其一条龙编排不再各存一份:队列、内置分组、自定义分组、队伍与
战斗策略、任务设置副本统一读写脚本级存储,改一处所有选该来源的用户一起生效。
来源为「用户」的用户行为逐字不变;直控仍走 BGI 原生配置。
- `app/models/config.py`:脚本级 `BetterGIConfig` 增加与用户配置同段、同名、同默认值的
OneDragon 段(新增字段必须两处同步,`test_script_and_user_one_dragon_sections_stay_in_sync`
会在漏改时变红)
- `app/api/scripts.py`:
- 新增 `_bettergi_uses_script_source` / `_bettergi_owner_config` /
`_bettergi_apply_script_level_source`,按来源解析编排读写对象
- 读取:通用 `get_user` 对脚本来源用户用脚本级段覆盖 OneDragon 段
(Info / Task / Switch 仍是各用户自己的)
- 写入:通用 `update_user` 把 OneDragon 整段路由到脚本级;队列变更时的 Plan 孤儿清理
按同一来源读取,避免读到别的用户的旧 Plan
- 战斗 4 项(Plan)与秘境 / 幽境危战副本的读写一并改走 owner
- `app/task/BetterGI/AutoProxy.py`:新增 `config_mode` / `owner_user_id` / `owner_config`;
13 处编排字段读取、4 处 per-user 副本调用与物化组前缀全部按来源解析
- `app/task/BetterGI/ScriptConfig.py`:残留物化组清理按 owner 前缀
- 测试:段对齐 + owner 路由(脚本 → 脚本级;用户 / 直控 → 用户配置)
- 新增 changelog 碎片(面向用户的一句话)
前端无需改动:接口返回的数据结构与改动前一致。
- `BetterGIUserEdit.vue`:任务配置卡片内新增一条 info 提示(仅 `Mode === '脚本'` 时显示), 说明一条龙编排在本来源下是脚本级共用的一份、改动会影响所有选该来源的用户, 而用户级设置(名称/账号/UID 等)仍各自独立 - i18n:zh-CN / en-US / ja-JP 三语补齐 `bettergiScriptModeShared` 与 `bettergiScriptModeSharedHint` 验证:frontend vitest 63 files / 578 tests passed;vue-tsc 退出码 0;eslint 无新增问题。
审查者指南此 PR 通过引入脚本级 OneDragon 配置段,并将所有相关 API、运行时实例化、Plan 和秘境设置操作通过共享的 Default 所有者进行路由,使 BetterGI 的「脚本配置」源正式可用,同时保留用户元数据、用户独立模式、直接控制以及现有前端数据契约不变。 共享 OneDragon 配置读写的时序图sequenceDiagram
participant User as User
participant API as BetterGIAPI
participant Config as RuntimeBetterGIConfig
participant Shared as ScriptLevelOneDragon
participant UserConfig as UserConfig
User->>API: get_user
API->>Config: read Info.Mode
alt Mode is 脚本
Config-->>API: shared OneDragon section
API-->>User: user metadata + shared OneDragon
else Mode is 用户
Config-->>API: user OneDragon section
API-->>User: user configuration
end
User->>API: update_user
alt Mode is 脚本
API->>Config: update OneDragon
Config->>Shared: write script-level OneDragon
API->>UserConfig: update Info / Task / Switch
else Mode is 用户
API->>UserConfig: update user configuration
end
文件级变更
提示和命令与 Sourcery 交互
自定义使用体验访问你的控制面板以便:
获取帮助Original review guide in EnglishReviewer's GuideThis PR makes BetterGI’s 「脚本配置」 source functional by introducing a script-level OneDragon section and routing all relevant API, runtime materialization, Plan, and dungeon-setting operations through a shared Default owner, while leaving user metadata, user-independent mode, direct control, and the existing frontend data contract intact. Sequence diagram for shared OneDragon configuration reads and writessequenceDiagram
participant User as User
participant API as BetterGIAPI
participant Config as RuntimeBetterGIConfig
participant Shared as ScriptLevelOneDragon
participant UserConfig as UserConfig
User->>API: get_user
API->>Config: read Info.Mode
alt Mode is 脚本
Config-->>API: shared OneDragon section
API-->>User: user metadata + shared OneDragon
else Mode is 用户
Config-->>API: user OneDragon section
API-->>User: user configuration
end
User->>API: update_user
alt Mode is 脚本
API->>Config: update OneDragon
Config->>Shared: write script-level OneDragon
API->>UserConfig: update Info / Task / Switch
else Mode is 用户
API->>UserConfig: update user configuration
end
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概述
补齐 BetterGI 的「脚本配置」来源:此前
Info.Mode = '脚本'可以选、可以存,但运行时从不判断脚本与用户的区别,选了等于「用户独立配置」。本 PR 让「脚本」来源真正生效——该来源的用户共用脚本级的一份一条龙编排,改一处所有选它的用户一起变。用户可见的改动
设计
一条龙编排与用户级设置分开存放,只有编排走脚本级:
OneDragon(队列 / 内置分组 / 自定义分组 / 队伍与战斗策略 / 任务设置)Info/Task/Switch(名称、账号、UID、备注…)BetterGIConfig新增与用户配置同段、同名、同默认值的 OneDragon 段;新增字段必须两处同步,test_script_and_user_one_dragon_sections_stay_in_sync会在漏改时变红get_user/update_user两个口子(读时用脚本级段覆盖、写时把 OneDragon 整段路由过去),再带上战斗 4 项(Plan)与秘境 / 幽境危战副本的读写点;前端无需改动(返回结构不变)AutoProxy按来源解析owner_user_id(脚本级 = 保留 idDefault,与 MAA 的data/{script_id}/Default/惯例同构)与owner_config;per-user 文件副本、物化配置组前缀、残留清理同口径_validate_user_id只单独放行Default这一个字面量,仍拒绝..与路径分隔符(附回归测试)与「快速配置」的关系
两者正交,本次不改动快速配置:
Info.IfQuickConfig) 决定「要不要用 MAS 配置」(关 = 跑 BGI 原生一条龙)Info.Mode) 决定「用谁的编排」(脚本 = 共用一份,用户 = 各一份)因此实际生效条件是:快速配置开启 + 来源为「脚本」。
验证
tests/task + tests/api:693 passed(含本 PR 新增 16 个用例:owner 解析、共享语义、路径穿越防护、段对齐)vitest:63 files / 578 passed;vue-tsc退出码 0scripts/changelog.py check通过;py_compile与 eslint 无新增问题pytest-asyncio、GBK 默认编码),CI 的 Linux/UTF-8 不受影响未包含
Info/Task段的某些字段,可在此基础上扩展,本 PR 只收敛到一条龙编排Sourcery 摘要
为 BetterGI OneDragon 编排启用脚本级共享,同时保留用户特定设置以及现有的独立控制或直接控制行为。
新功能:
错误修复:
增强功能:
测试:
Original summary in English
Sourcery 摘要
启用 BetterGI OneDragon 编排的脚本级共享,同时保留用户特定设置和现有配置模式。
新功能:
错误修复:
增强功能:
测试:
Original summary in English
Summary by Sourcery
Enable script-level sharing for BetterGI OneDragon orchestration while preserving user-specific settings and existing configuration modes.
New Features:
Bug Fixes:
Enhancements:
Tests: