From cd70a5b388ad069b6a69cf2dff57168a6a18bf2e Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Fri, 25 Aug 2023 17:11:00 +0200 Subject: [PATCH] Add modify guild member profile route --- src/api/guilds/guilds.rs | 31 ++++++++++++++++++++++++++++++- src/types/entities/user.rs | 14 ++++++++++++++ src/types/schema/guild.rs | 11 +++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/api/guilds/guilds.rs b/src/api/guilds/guilds.rs index 547f3cf..59936b4 100644 --- a/src/api/guilds/guilds.rs +++ b/src/api/guilds/guilds.rs @@ -9,7 +9,8 @@ use crate::instance::ChorusUser; use crate::ratelimiter::ChorusRequest; use crate::types::{ Channel, ChannelCreateSchema, Guild, GuildBanCreateSchema, GuildCreateSchema, GuildMember, - GuildMemberSearchSchema, GuildModifySchema, GuildPreview, ModifyGuildMemberSchema, + GuildMemberSearchSchema, GuildModifySchema, GuildPreview, ModifyGuildMemberProfileSchema, + ModifyGuildMemberSchema, UserProfileMetadata, }; use crate::types::{GuildBan, Snowflake}; @@ -352,6 +353,34 @@ impl Guild { ); request.deserialize_response::(user).await } + + /// Modifies the current user's profile in the guild. + /// + /// # Reference: + /// See + pub async fn modify_member_profile( + guild_id: Snowflake, + schema: ModifyGuildMemberProfileSchema, + user: &mut ChorusUser, + ) -> ChorusResult { + let request = ChorusRequest::new( + http::Method::PATCH, + format!( + "{}/guilds/{}/profile/@me", + user.belongs_to.borrow().urls.api, + guild_id, + ) + .as_str(), + Some(to_string(&schema).unwrap()), + None, + None, + Some(user), + LimitType::Guild(guild_id), + ); + request + .deserialize_response::(user) + .await + } } impl Channel { diff --git a/src/types/entities/user.rs b/src/types/entities/user.rs index aadfd35..ed18d2d 100644 --- a/src/types/entities/user.rs +++ b/src/types/entities/user.rs @@ -7,6 +7,8 @@ use std::fmt::Debug; use crate::gateway::{GatewayHandle, Updateable}; use crate::types::{utils::Snowflake, Composite}; +use super::Emoji; + #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] #[cfg_attr(feature = "sqlx", derive(sqlx::Type))] pub struct UserData { @@ -120,3 +122,15 @@ bitflags::bitflags! { const BOT_HTTP_INTERACTIONS = 1 << 19; } } + +#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, PartialOrd, Eq, Ord)] +pub struct UserProfileMetadata { + pub guild_id: Option, + pub pronouns: String, + pub bio: Option, + pub banner: Option, + pub accent_color: Option, + pub theme_colors: Option>, + pub popout_animation_particle_type: Option, + pub emoji: Option, +} diff --git a/src/types/schema/guild.rs b/src/types/schema/guild.rs index 3f5dcea..51fe423 100644 --- a/src/types/schema/guild.rs +++ b/src/types/schema/guild.rs @@ -144,3 +144,14 @@ pub struct ModifyCurrentGuildMemberSchema { pub bio: Option, pub banner: Option, } + +#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, PartialOrd, Eq, Ord)] +pub struct ModifyGuildMemberProfileSchema { + pub pronouns: Option, + pub bio: Option, + pub banner: Option, + pub accent_color: Option, + pub theme_colors: Option>, + pub popout_animation_particle_type: Option, + pub emoji_id: Option, +}