From e7b0bcbfed05e87419f37a19f81b3d798f9a7a77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=AF=E5=87=9B?= Date: Fri, 9 Jan 2026 01:33:18 +0800 Subject: [PATCH] feat: prepare for 1.53 preview/login --- sdgb-api/src/title/model/get_user_preview_api/mod.rs | 6 +++++- sdgb-api/src/title/model/user_login_api/mod.rs | 10 ++++++++-- sdgb-cli/src/commands.rs | 4 ++++ sdgb-cli/src/main.rs | 7 ++++--- sdgb-cli/src/utils/mod.rs | 3 ++- 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/sdgb-api/src/title/model/get_user_preview_api/mod.rs b/sdgb-api/src/title/model/get_user_preview_api/mod.rs index c8d0051..7782f5f 100644 --- a/sdgb-api/src/title/model/get_user_preview_api/mod.rs +++ b/sdgb-api/src/title/model/get_user_preview_api/mod.rs @@ -6,11 +6,15 @@ use serde::{Deserialize, Serialize}; #[serde(rename_all = "camelCase")] pub struct GetUserPreviewApi { pub user_id: u32, + pub token: Option, } impl From for GetUserPreviewApi { fn from(user_id: u32) -> Self { - Self { user_id } + Self { + user_id, + token: None, + } } } diff --git a/sdgb-api/src/title/model/user_login_api/mod.rs b/sdgb-api/src/title/model/user_login_api/mod.rs index c6bad94..cc3f359 100644 --- a/sdgb-api/src/title/model/user_login_api/mod.rs +++ b/sdgb-api/src/title/model/user_login_api/mod.rs @@ -12,6 +12,10 @@ pub struct UserLoginApi { pub acsess_code: String, pub place_id: String, pub client_id: String, + + /// QR Login 结果的 Token + pub token: Option, + /// false 的情况,二维码扫描后半小时可登录。 /// /// true 的情况,可延长至二维码扫描后的两小时可登录。 @@ -36,7 +40,7 @@ pub struct UserLoginApiResp { } impl UserLoginApi { - pub fn new(user_id: u32, is_continue: bool) -> Self { + pub fn new(user_id: u32, is_continue: bool, token: Option) -> Self { let date_time = SystemTime::now() .duration_since(UNIX_EPOCH) .map(|t| t.as_secs()) @@ -51,8 +55,10 @@ impl UserLoginApi { region_id: 13, acsess_code: "".to_owned(), place_id: 3223.to_string(), - is_continue, generic_flag: 0, + + token, + is_continue, client_id: "A63E01E6170".into(), } } diff --git a/sdgb-cli/src/commands.rs b/sdgb-cli/src/commands.rs index cc5e6f4..88f3455 100644 --- a/sdgb-cli/src/commands.rs +++ b/sdgb-cli/src/commands.rs @@ -43,6 +43,8 @@ pub enum Commands { Preview { #[arg(short, long)] user_id: u32, + #[arg(short, long)] + token: Option, }, /// Get B35 + B15 play records Rating { @@ -79,6 +81,8 @@ pub enum Commands { user_id: u32, #[arg(long)] skip_login: bool, + #[arg(short, long)] + token: Option, }, /// Scrape all user, read possible id from stdin diff --git a/sdgb-cli/src/main.rs b/sdgb-cli/src/main.rs index 25c5e39..31d71ab 100644 --- a/sdgb-cli/src/main.rs +++ b/sdgb-cli/src/main.rs @@ -165,12 +165,12 @@ async fn main() -> Result<(), Box> { json_display(logout)?; } } - Commands::Preview { user_id } => { + Commands::Preview { user_id, token } => { let preview: GetUserPreviewApiResp = Sdgb1_50::request( &client, APIMethod::GetUserPreviewApi, user_id, - GetUserPreviewApi { user_id }, + GetUserPreviewApi { user_id, token }, ) .await?; @@ -430,6 +430,7 @@ async fn main() -> Result<(), Box> { Commands::Userdata { user_id, skip_login, + token, } => { let action = async |_| match Sdgb1_50::request::<_, GetUserDataApiResp>( &client, @@ -450,7 +451,7 @@ async fn main() -> Result<(), Box> { if skip_login { action(UserLoginApiResp::default()).await; } else { - login_action(&client, user_id, action).await?; + login_action(&client, user_id, token, action).await?; } } } diff --git a/sdgb-cli/src/utils/mod.rs b/sdgb-cli/src/utils/mod.rs index 67d5fd2..1df4061 100644 --- a/sdgb-cli/src/utils/mod.rs +++ b/sdgb-cli/src/utils/mod.rs @@ -15,9 +15,10 @@ use spdlog::info; pub async fn login_action( client: &AsyncClient, user_id: u32, + token: Option, action: impl AsyncFnOnce(UserLoginApiResp) -> R, ) -> Result { - let login = UserLoginApi::new(user_id, true); + let login = UserLoginApi::new(user_id, true, token); let date_time = login.date_time; let login_resp: UserLoginApiResp =