/ src / api / endpoints / auth / login.rs
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  }