From d5e38d954f22511debb0b5b41d0ea5a15b89ef8e Mon Sep 17 00:00:00 2001 From: Flori Weber Date: Sat, 10 Jun 2023 15:16:45 +0200 Subject: [PATCH] Implement GuildMember::get() --- src/api/guilds/member.rs | 54 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/api/guilds/member.rs b/src/api/guilds/member.rs index b301b99..a6ec7d7 100644 --- a/src/api/guilds/member.rs +++ b/src/api/guilds/member.rs @@ -1,8 +1,60 @@ use reqwest::Client; +use serde_json::from_str; -use crate::{instance::UserMeta, limit::LimitedRequester, types}; +use crate::{errors::ChorusLibError, instance::UserMeta, limit::LimitedRequester, types}; impl types::GuildMember { + /// Retrieves a guild member by their ID. + /// + /// # Arguments + /// + /// * `user` - A mutable reference to a [`UserMeta`] instance. + /// * `guild_id` - The ID of the guild. + /// * `member_id` - The ID of the member. + /// + /// # Returns + /// + /// A [`Result`] containing a [`GuildMember`] if the request succeeds, or a [`ChorusLibError`] if the request fails. + pub async fn get( + user: &mut UserMeta, + guild_id: &str, + member_id: &str, + ) -> Result { + let mut belongs_to = user.belongs_to.borrow_mut(); + let url = format!( + "{}/guilds/{}/members/{}/", + belongs_to.urls.get_api(), + guild_id, + member_id + ); + let request = Client::new().get(url).bearer_auth(user.token()); + let response = LimitedRequester::new() + .await + .send_request( + request, + crate::api::limits::LimitType::Guild, + &mut belongs_to.limits, + &mut user.limits, + ) + .await + .unwrap(); + let response_text = match response.text().await { + Ok(string) => string, + Err(e) => { + return Err(ChorusLibError::InvalidResponseError { + error: e.to_string(), + }) + } + }; + let member = from_str::(&response_text); + if member.is_err() { + return Err(ChorusLibError::InvalidResponseError { + error: member.err().unwrap().to_string(), + }); + } + Ok(member.unwrap()) + } + /// Adds a role to a guild member. /// /// # Arguments