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