賬號唯一ID與多賬戶覆蓋預設邏輯
本文說明當前版本下,從第一次啟動軟體開始,賬號身份與賬號覆蓋配置的預設行為。
1. 首次啟動時會發生什麼
- 軟體會載入賬號覆蓋儲存檔案
configs/account_scoped_overrides.json。 - 如果該檔案不存在或無法解析,會使用內建空結構:
account_list_text: 空字串account_registry: 空物件accounts: 空物件map_contents: 空物件
- 此時系統裡還沒有任何賬號ID、賬號覆蓋或地圖同步 content。
2. 賬號身份規則(預設且固定)
當前規則已經固定為:
- 賬號名(手機號)是預設穩定身份來源。
- 密碼不參與身份判定,任務頁舊格式
账号,密码中的密碼會被忽略。 - 儲存賬號列表時,賬號名與登錄檔當前
username精確匹配才複用原account_id;歷史aliases不參與這一步。 - 賬號名變化:直接建立新的
account_id。
也就是說,賬號名變化不會自動繼承舊賬號的覆蓋配置。
3. 在賬號配置頁點選“儲存賬號列表”時
當你在“賬號配置”頁儲存賬號列表後,會執行以下流程:
- 解析每行賬號名(手機號)。
- 相容舊格式
账号,密码,但密碼會被忽略。 - 對每個賬號名查詢是否已有
account_id:- 找到則複用。
- 找不到則新建。
- 寫回
account_registry(賬號ID到賬號名對映)和account_list_text。 - 狀態列會顯示本次“複用ID數量”和“新建ID數量”。
flowchart TD
A[保存账号列表] --> B[逐行解析账号名]
B --> C{账号名是否已有 ID}
C -->|有| D[复用 account_id]
C -->|无| E[创建 account_id]
D --> F[写回 account_registry]
E --> F
F --> G[写回 account_list_text]
G --> H[刷新账号下拉]
4. 任務覆蓋是怎麼存的
賬號任務覆蓋按下面結構儲存:
accounts[account_id][task_class_name][config_key] = override_value- 賬號覆蓋的主鍵是
account_id,不是密碼。 - 讀取時支援舊資料相容(歷史上用賬號名當鍵的結構仍可回退讀取)。
地圖同步 content 獨立儲存在 map_contents[account_id],供 物品導航 讀取官方地圖 WebSocket 憑證。賬號頁寫入 content 時,如果賬號尚未註冊,會建立登錄檔 ID。
5. 任務執行時怎麼讀取覆蓋
執行任務時,配置讀取順序是:
- 先讀任務原始配置值(base value)。
- 檢查是否允許賬號覆蓋:
- 如果任務配置裡有“多賬戶獨立配置”,則必須該開關為
True。 - 如果任務配置裡沒有該開關,則預設允許覆蓋(相容邏輯)。
- 如果任務配置裡有“多賬戶獨立配置”,則必須該開關為
- 使用
current_account_id(或相容回退賬號名)讀取當前任務覆蓋。多賬戶迴圈只做非建立式解析;賬號頁尚未註冊該賬號時,執行上下文會臨時以賬號名作為鍵,不會自動落盤生成 ID。 - 如果該鍵存在覆蓋值,則用覆蓋值替換原值。
6. 首次啟動下的預設開關狀態
對於繼承 AccountMixin 的任務,預設配置是:
- 多賬戶模式:
False - 多賬戶獨立配置:
False - 賬號列表:示例文本(賬號1、賬號2、賬號3)
因此第一次啟動後,如果你不改任務開關:
- 多賬戶迴圈不會啟用。
- 賬號覆蓋也不會生效(因為“多賬戶獨立配置”預設是關)。
7. 賬號頁賬號列表 與 任務賬號列表 的關係
兩者當前是獨立的:
- 賬號配置頁儲存的是覆蓋系統自己的
account_list_text,用於賬號ID管理和覆蓋編輯。 - 任務執行時
get_account_list()讀取的是任務自身配置裡的“賬號列表”。 - 所以賬號頁改了賬號列表,不會自動同步到各任務“賬號列表”欄位。
- 當前任務執行只讀取賬號名;舊格式
账号,密码中密碼欄位會被忽略。 - 任務頁賬號列表中的空行和賬號名為空的行會被跳過。
8. 哪些任務會顯示在賬號配置頁
賬號配置頁只展示顯式宣告 support_multi_account = True 的任務。
當前典型任務包括:
DailyTaskDeliveryTask
ItemNavigatorTask 使用賬號頁儲存的地圖同步 content,但不宣告 support_multi_account,因此不作為多賬號任務覆蓋項展示。
9. 實操建議
為了讓“賬號覆蓋”按預期生效,建議按順序操作:
- 在賬號配置頁儲存賬號列表(僅賬號名)。
- 在對應任務頁開啟“多賬戶獨立配置”。
- (如需多賬號迴圈)再開啟“多賬戶模式”並維護任務頁賬號列表。
- 回到賬號配置頁按賬號與任務編輯覆蓋項。