Add modify guild member profile route

This commit is contained in:
bitfl0wer 2023-08-25 17:11:00 +02:00
parent cce5b507bc
commit cd70a5b388
3 changed files with 55 additions and 1 deletions

View File

@ -9,7 +9,8 @@ use crate::instance::ChorusUser;
use crate::ratelimiter::ChorusRequest; use crate::ratelimiter::ChorusRequest;
use crate::types::{ use crate::types::{
Channel, ChannelCreateSchema, Guild, GuildBanCreateSchema, GuildCreateSchema, GuildMember, Channel, ChannelCreateSchema, Guild, GuildBanCreateSchema, GuildCreateSchema, GuildMember,
GuildMemberSearchSchema, GuildModifySchema, GuildPreview, ModifyGuildMemberSchema, GuildMemberSearchSchema, GuildModifySchema, GuildPreview, ModifyGuildMemberProfileSchema,
ModifyGuildMemberSchema, UserProfileMetadata,
}; };
use crate::types::{GuildBan, Snowflake}; use crate::types::{GuildBan, Snowflake};
@ -352,6 +353,34 @@ impl Guild {
); );
request.deserialize_response::<GuildMember>(user).await request.deserialize_response::<GuildMember>(user).await
} }
/// Modifies the current user's profile in the guild.
///
/// # Reference:
/// See <https://discord-userdoccers.vercel.app/resources/guild#modify-guild-member-profile>
pub async fn modify_member_profile(
guild_id: Snowflake,
schema: ModifyGuildMemberProfileSchema,
user: &mut ChorusUser,
) -> ChorusResult<UserProfileMetadata> {
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::<UserProfileMetadata>(user)
.await
}
} }
impl Channel { impl Channel {

View File

@ -7,6 +7,8 @@ use std::fmt::Debug;
use crate::gateway::{GatewayHandle, Updateable}; use crate::gateway::{GatewayHandle, Updateable};
use crate::types::{utils::Snowflake, Composite}; use crate::types::{utils::Snowflake, Composite};
use super::Emoji;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))] #[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
pub struct UserData { pub struct UserData {
@ -120,3 +122,15 @@ bitflags::bitflags! {
const BOT_HTTP_INTERACTIONS = 1 << 19; const BOT_HTTP_INTERACTIONS = 1 << 19;
} }
} }
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, PartialOrd, Eq, Ord)]
pub struct UserProfileMetadata {
pub guild_id: Option<Snowflake>,
pub pronouns: String,
pub bio: Option<String>,
pub banner: Option<String>,
pub accent_color: Option<i32>,
pub theme_colors: Option<Vec<i32>>,
pub popout_animation_particle_type: Option<Snowflake>,
pub emoji: Option<Emoji>,
}

View File

@ -144,3 +144,14 @@ pub struct ModifyCurrentGuildMemberSchema {
pub bio: Option<String>, pub bio: Option<String>,
pub banner: Option<String>, pub banner: Option<String>,
} }
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, PartialOrd, Eq, Ord)]
pub struct ModifyGuildMemberProfileSchema {
pub pronouns: Option<String>,
pub bio: Option<String>,
pub banner: Option<String>,
pub accent_color: Option<String>,
pub theme_colors: Option<Vec<i32>>,
pub popout_animation_particle_type: Option<Snowflake>,
pub emoji_id: Option<Snowflake>,
}