Add some more routes

This commit is contained in:
bitfl0wer 2023-08-25 01:35:57 +02:00
parent 87fcf2edf1
commit ae0ca42b7a
No known key found for this signature in database
GPG Key ID: 0ACD574FCF5226CF
2 changed files with 99 additions and 4 deletions

View File

@ -8,8 +8,8 @@ use crate::errors::ChorusResult;
use crate::instance::ChorusUser; use crate::instance::ChorusUser;
use crate::ratelimiter::ChorusRequest; use crate::ratelimiter::ChorusRequest;
use crate::types::{ use crate::types::{
Channel, ChannelCreateSchema, Guild, GuildBanCreateSchema, GuildCreateSchema, Channel, ChannelCreateSchema, Guild, GuildBanCreateSchema, GuildCreateSchema, GuildMember,
GuildModifySchema, GuildPreview, MFALevel, GuildMemberSearchSchema, GuildModifySchema, GuildPreview,
}; };
use crate::types::{GuildBan, Snowflake}; use crate::types::{GuildBan, Snowflake};
@ -213,6 +213,88 @@ impl Guild {
.await?; .await?;
Ok(response) Ok(response)
} }
/// Returns a list of guild member objects that are members of the guild.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#get-guild-members>
pub async fn get_members(
guild_id: Snowflake,
user: &mut ChorusUser,
) -> ChorusResult<Vec<GuildMember>> {
let request = ChorusRequest::new(
http::Method::GET,
format!(
"{}/guilds/{}/members",
user.belongs_to.borrow().urls.api,
guild_id,
)
.as_str(),
None,
None,
None,
Some(user),
LimitType::Guild(guild_id),
);
request.deserialize_response::<Vec<GuildMember>>(user).await
}
/// Returns a list of guild member objects whose username or nickname starts with a provided string.
///
/// # Reference:
/// See <https://discord-userdoccers.vercel.app/resources/guild#search-guild-members>
pub async fn search_members(
guild_id: Snowflake,
query: GuildMemberSearchSchema,
user: &mut ChorusUser,
) -> ChorusResult<Vec<GuildMember>> {
let mut request = ChorusRequest::new(
http::Method::GET,
format!(
"{}/guilds/{}/members/search",
user.belongs_to.borrow().urls.api,
guild_id,
)
.as_str(),
None,
None,
None,
Some(user),
LimitType::Guild(guild_id),
);
request.request = request
.request
.query(&[("query", to_string(&query).unwrap())]);
request.deserialize_response::<Vec<GuildMember>>(user).await
}
/// Removes a member from a guild. Requires the KICK_MEMBERS permission. Returns a 204 empty response on success.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#remove-guild-member>
pub async fn remove_member(
guild_id: Snowflake,
member_id: Snowflake,
audit_log_reason: Option<String>,
user: &mut ChorusUser,
) -> ChorusResult<()> {
let request = ChorusRequest::new(
http::Method::DELETE,
format!(
"{}/guilds/{}/members/{}",
user.belongs_to.borrow().urls.api,
guild_id,
member_id,
)
.as_str(),
None,
audit_log_reason.as_deref(),
None,
Some(user),
LimitType::Guild(guild_id),
);
request.handle_request_as_result(user).await
}
} }
impl Channel { impl Channel {

View File

@ -1,5 +1,3 @@
use std::default;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::types::entities::Channel; use crate::types::entities::Channel;
@ -93,3 +91,18 @@ pub struct GuildPreview {
pub approximate_member_count: u32, pub approximate_member_count: u32,
pub approximate_presence_count: u32, pub approximate_presence_count: u32,
} }
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, PartialOrd, Eq, Ord)]
pub struct GuildMemberSearchSchema {
pub query: String,
pub limit: Option<u16>,
}
impl Default for GuildMemberSearchSchema {
fn default() -> Self {
Self {
query: Default::default(),
limit: Some(1),
}
}
}