Add modify_member route

This commit is contained in:
bitfl0wer 2023-08-25 16:47:28 +02:00
parent 516a1467fa
commit 7b55590fd0
2 changed files with 61 additions and 1 deletions

View File

@ -9,7 +9,7 @@ use crate::instance::ChorusUser;
use crate::ratelimiter::ChorusRequest;
use crate::types::{
Channel, ChannelCreateSchema, Guild, GuildBanCreateSchema, GuildCreateSchema, GuildMember,
GuildMemberSearchSchema, GuildModifySchema, GuildPreview,
GuildMemberSearchSchema, GuildModifySchema, GuildPreview, ModifyGuildMemberSchema,
};
use crate::types::{GuildBan, Snowflake};
@ -295,6 +295,36 @@ impl Guild {
);
request.handle_request_as_result(user).await
}
/// Modifies attributes of a guild member. Returns the updated guild member object on success.
/// For required Permissions and an API reference, see:
///
/// # Reference:
/// <https://discord-userdoccers.vercel.app/resources/guild#modify-guild-member>
pub async fn modify_member(
guild_id: Snowflake,
member_id: Snowflake,
schema: ModifyGuildMemberSchema,
audit_log_reason: Option<String>,
user: &mut ChorusUser,
) -> ChorusResult<()> {
let request = ChorusRequest::new(
http::Method::PATCH,
format!(
"{}/guilds/{}/members/{}",
user.belongs_to.borrow().urls.api,
guild_id,
member_id,
)
.as_str(),
Some(to_string(&schema).unwrap()),
audit_log_reason.as_deref(),
None,
Some(user),
LimitType::Guild(guild_id),
);
request.handle_request_as_result(user).await
}
}
impl Channel {

View File

@ -1,3 +1,5 @@
use bitflags::bitflags;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::types::entities::Channel;
@ -106,3 +108,31 @@ impl Default for GuildMemberSearchSchema {
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ModifyGuildMemberSchema {
pub nick: Option<String>,
pub roles: Option<Vec<Snowflake>>,
pub mute: Option<bool>,
pub deaf: Option<bool>,
pub channel_id: Option<Snowflake>,
pub communication_disabled_until: Option<DateTime<Utc>>,
pub flags: Option<GuildMemberFlags>,
}
bitflags! {
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, PartialOrd, Ord)]
/// Represents the flags of a Guild Member.
///
/// # Reference:
/// See <https://discord-userdoccers.vercel.app/resources/guild#guild-member-flags>
pub struct GuildMemberFlags: u64 {
const DID_REJOIN = 1 << 0;
const COMPLETED_ONBOARDING = 1 << 1;
const BYPASSES_VERIFICATION = 1 << 2;
const STARTED_ONBOARDING = 1 << 3;
const GUEST = 1 << 3;
const AUTOMOD_QUARANTINED_NAME = 1 << 7;
const AUTOMOD_QUARANTINED_BIO = 1 << 8;
}
}