From 9db9d2a51238db26b3685efd1246ab1fc89b60b3 Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Wed, 23 Aug 2023 00:08:43 +0200 Subject: [PATCH] Add get user guilds endpoint --- src/api/users/guilds.rs | 27 ++++++++++++++++++++++++++- src/types/schema/guild.rs | 21 +++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/api/users/guilds.rs b/src/api/users/guilds.rs index 355f38c..e4ffbe0 100644 --- a/src/api/users/guilds.rs +++ b/src/api/users/guilds.rs @@ -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: + pub async fn get_guilds( + &mut self, + query: Option, + ) -> ChorusResult> { + 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::>(self) + .await + } } diff --git a/src/types/schema/guild.rs b/src/types/schema/guild.rs index 937c439..75452df 100644 --- a/src/types/schema/guild.rs +++ b/src/types/schema/guild.rs @@ -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, pub premium_progress_bar_enabled: Option, } + +#[derive(Debug, Deserialize, Serialize, Clone, Eq, PartialEq, Ord, PartialOrd)] +pub struct GetUserGuildSchema { + pub before: Option, + pub after: Option, + pub limit: Option, + pub with_counts: Option, +} + +impl std::default::Default for GetUserGuildSchema { + fn default() -> Self { + Self { + before: Default::default(), + after: Default::default(), + limit: Some(200), + with_counts: Some(false), + } + } +}