roblox_api/api/user_blocking/
v1.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{Error, client::Client};
4
5pub const URL: &str = "https://apis.roblox.com/user-blocking-api/v1";
6
7#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
8#[serde(rename_all = "camelCase")]
9pub struct UserBlockStatus {
10    #[serde(rename = "userId")]
11    pub id: u64,
12    pub is_blocked: bool,
13    pub is_blocking_viewer: bool,
14}
15
16pub async fn is_blocked(client: &mut Client, id: u64) -> Result<bool, Error> {
17    let result = client
18        .requestor
19        .client
20        .get(format!("{URL}/users/{id}/is-blocked"))
21        .headers(client.requestor.default_headers.clone())
22        .send()
23        .await;
24
25    let response = client.requestor.validate_response(result).await?;
26    client.requestor.parse_json::<bool>(response).await
27}
28
29pub async fn batch_check_reciprocal_block(
30    client: &mut Client,
31    requester_id: u64,
32    ids: &[u64],
33) -> Result<Vec<UserBlockStatus>, Error> {
34    #[derive(Debug, Serialize)]
35    struct Request<'a> {
36        #[serde(rename = "requesterUserId")]
37        requester_id: u64,
38        #[serde(rename = "userIds")]
39        ids: &'a [u64],
40    }
41
42    let result = client
43        .requestor
44        .client
45        .post(format!("{URL}/users/batch-check-reciprocal-block"))
46        .json(&Request { requester_id, ids })
47        .headers(client.requestor.default_headers.clone())
48        .send()
49        .await;
50
51    #[derive(Debug, Deserialize)]
52    struct Response {
53        users: Vec<UserBlockStatus>,
54    }
55
56    let response = client.requestor.validate_response(result).await?;
57    Ok(client
58        .requestor
59        .parse_json::<Response>(response)
60        .await?
61        .users)
62}