Add get user guilds endpoint

This commit is contained in:
bitfl0wer 2023-08-23 00:08:43 +02:00
parent 7d0db49e5c
commit 9db9d2a512
2 changed files with 47 additions and 1 deletions

View File

@ -1,10 +1,11 @@
use reqwest::Client;
use serde_json::to_string;
use crate::api::LimitType;
use crate::errors::ChorusResult;
use crate::instance::UserMeta;
use crate::ratelimiter::ChorusRequest;
use crate::types::Snowflake;
use crate::types::{GetUserGuildSchema, Guild, Snowflake};
impl UserMeta {
/// Leaves a given guild.
@ -30,4 +31,28 @@ impl UserMeta {
.handle_request_as_result(self)
.await
}
/// Returns a list of user guild objects representing the guilds the current user is a member of.
/// This endpoint returns 200 guilds by default
///
/// # Reference:
/// See: <https://discord-userdoccers.vercel.app/resources/guild#get-user-guilds>
pub async fn get_guilds(
&mut self,
query: Option<GetUserGuildSchema>,
) -> ChorusResult<Vec<Guild>> {
let url = format!("{}/users/@me/guilds", self.belongs_to.borrow().urls.api,);
let chorus_request = ChorusRequest {
request: Client::new()
.get(url)
.header("Authorization", self.token())
.header("Content-Type", "application/json")
.body(to_string(&query).unwrap()),
limit_type: LimitType::Global,
};
chorus_request
.deserialize_response::<Vec<Guild>>(self)
.await
}
}

View File

@ -1,3 +1,5 @@
use std::default;
use serde::{Deserialize, Serialize};
use crate::types::entities::Channel;
@ -56,3 +58,22 @@ pub struct GuildModifySchema {
pub preferred_locale: Option<String>,
pub premium_progress_bar_enabled: Option<bool>,
}
#[derive(Debug, Deserialize, Serialize, Clone, Eq, PartialEq, Ord, PartialOrd)]
pub struct GetUserGuildSchema {
pub before: Option<Snowflake>,
pub after: Option<Snowflake>,
pub limit: Option<u8>,
pub with_counts: Option<bool>,
}
impl std::default::Default for GetUserGuildSchema {
fn default() -> Self {
Self {
before: Default::default(),
after: Default::default(),
limit: Some(200),
with_counts: Some(false),
}
}
}