login.rs
1 use anyhow::Result; 2 use reqwest::{Client, header::REFERER}; 3 use serde::{Deserialize, Serialize}; 4 5 #[derive(Serialize)] 6 struct Payload { 7 login: String, 8 password: String, 9 undelete: bool, 10 login_source: Option<String>, 11 gift_code_sku_id: Option<String>, 12 } 13 14 #[derive(Debug, Deserialize)] 15 pub struct LoginResponse { 16 pub user_id: String, 17 pub token: Option<String>, 18 // TODO: user_settings 19 pub required_actions: Option<Vec<String>>, 20 pub ticket: Option<String>, 21 pub mfa: Option<bool>, 22 pub sms: Option<bool>, 23 pub backup: Option<bool>, 24 pub totp: Option<bool>, 25 pub webauthn: Option<String>, 26 } 27 28 pub async fn api_v9_post_auth_login( 29 client: Client, 30 login: String, 31 password: String, 32 ) -> Result<LoginResponse> { 33 let payload = Payload { 34 login, 35 password, 36 undelete: false, 37 login_source: None, 38 gift_code_sku_id: None, 39 }; 40 41 let req = client 42 .post("https://discord.com/api/v9/auth/login") 43 .header(REFERER, "https://discord.com/login") 44 .json(&payload) 45 .build()?; 46 47 let resp = client.execute(req).await?; 48 let json = resp.json().await?; 49 println!("api::v9/post/auth/login[resp]: {json:#?}"); 50 Ok(json) 51 }