forked from jmug/stoatchat
feat: add pronouns to user and server members field (#811)
Signed-off-by: İspik <ispik@ispik.dev>
This commit is contained in:
@@ -28,6 +28,9 @@ auto_derived_partial!(
|
|||||||
/// Member's nickname
|
/// Member's nickname
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub nickname: Option<String>,
|
pub nickname: Option<String>,
|
||||||
|
/// Member's pronouns
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub pronouns: Option<String>,
|
||||||
/// Avatar attachment
|
/// Avatar attachment
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub avatar: Option<File>,
|
pub avatar: Option<File>,
|
||||||
@@ -65,6 +68,7 @@ auto_derived!(
|
|||||||
/// Optional fields on server member object
|
/// Optional fields on server member object
|
||||||
pub enum FieldsMember {
|
pub enum FieldsMember {
|
||||||
Nickname,
|
Nickname,
|
||||||
|
Pronouns,
|
||||||
Avatar,
|
Avatar,
|
||||||
Roles,
|
Roles,
|
||||||
Timeout,
|
Timeout,
|
||||||
@@ -88,6 +92,7 @@ impl Default for Member {
|
|||||||
id: Default::default(),
|
id: Default::default(),
|
||||||
joined_at: Timestamp::now_utc(),
|
joined_at: Timestamp::now_utc(),
|
||||||
nickname: None,
|
nickname: None,
|
||||||
|
pronouns: None,
|
||||||
avatar: None,
|
avatar: None,
|
||||||
roles: vec![],
|
roles: vec![],
|
||||||
timeout: None,
|
timeout: None,
|
||||||
@@ -231,6 +236,7 @@ impl Member {
|
|||||||
FieldsMember::JoinedAt => {}
|
FieldsMember::JoinedAt => {}
|
||||||
FieldsMember::Avatar => self.avatar = None,
|
FieldsMember::Avatar => self.avatar = None,
|
||||||
FieldsMember::Nickname => self.nickname = None,
|
FieldsMember::Nickname => self.nickname = None,
|
||||||
|
FieldsMember::Pronouns => self.pronouns = None,
|
||||||
FieldsMember::Roles => self.roles.clear(),
|
FieldsMember::Roles => self.roles.clear(),
|
||||||
FieldsMember::Timeout => self.timeout = None,
|
FieldsMember::Timeout => self.timeout = None,
|
||||||
FieldsMember::CanReceive => self.can_receive = true,
|
FieldsMember::CanReceive => self.can_receive = true,
|
||||||
|
|||||||
@@ -345,6 +345,7 @@ impl IntoDocumentPath for FieldsMember {
|
|||||||
FieldsMember::JoinedAt => Some("joined_at"),
|
FieldsMember::JoinedAt => Some("joined_at"),
|
||||||
FieldsMember::Avatar => Some("avatar"),
|
FieldsMember::Avatar => Some("avatar"),
|
||||||
FieldsMember::Nickname => Some("nickname"),
|
FieldsMember::Nickname => Some("nickname"),
|
||||||
|
FieldsMember::Pronouns => Some("pronouns"),
|
||||||
FieldsMember::Roles => Some("roles"),
|
FieldsMember::Roles => Some("roles"),
|
||||||
FieldsMember::Timeout => Some("timeout"),
|
FieldsMember::Timeout => Some("timeout"),
|
||||||
FieldsMember::CanPublish => Some("can_publish"),
|
FieldsMember::CanPublish => Some("can_publish"),
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ auto_derived_partial!(
|
|||||||
/// Display name
|
/// Display name
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub display_name: Option<String>,
|
pub display_name: Option<String>,
|
||||||
|
/// User's pronouns
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none", default)]
|
||||||
|
pub pronouns: Option<String>,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
/// Avatar attachment
|
/// Avatar attachment
|
||||||
pub avatar: Option<File>,
|
pub avatar: Option<File>,
|
||||||
@@ -76,6 +79,7 @@ auto_derived!(
|
|||||||
ProfileContent,
|
ProfileContent,
|
||||||
ProfileBackground,
|
ProfileBackground,
|
||||||
DisplayName,
|
DisplayName,
|
||||||
|
Pronouns,
|
||||||
|
|
||||||
// internal fields
|
// internal fields
|
||||||
Suspension,
|
Suspension,
|
||||||
@@ -182,6 +186,7 @@ impl Default for User {
|
|||||||
username: Default::default(),
|
username: Default::default(),
|
||||||
discriminator: Default::default(),
|
discriminator: Default::default(),
|
||||||
display_name: Default::default(),
|
display_name: Default::default(),
|
||||||
|
pronouns: Default::default(),
|
||||||
avatar: Default::default(),
|
avatar: Default::default(),
|
||||||
relations: Default::default(),
|
relations: Default::default(),
|
||||||
badges: Default::default(),
|
badges: Default::default(),
|
||||||
@@ -706,6 +711,7 @@ impl User {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
FieldsUser::DisplayName => self.display_name = None,
|
FieldsUser::DisplayName => self.display_name = None,
|
||||||
|
FieldsUser::Pronouns => self.pronouns = None,
|
||||||
FieldsUser::Suspension => self.suspended_until = None,
|
FieldsUser::Suspension => self.suspended_until = None,
|
||||||
FieldsUser::None => {}
|
FieldsUser::None => {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -336,6 +336,7 @@ impl IntoDocumentPath for FieldsUser {
|
|||||||
FieldsUser::StatusPresence => "status.presence",
|
FieldsUser::StatusPresence => "status.presence",
|
||||||
FieldsUser::StatusText => "status.text",
|
FieldsUser::StatusText => "status.text",
|
||||||
FieldsUser::DisplayName => "display_name",
|
FieldsUser::DisplayName => "display_name",
|
||||||
|
FieldsUser::Pronouns => "pronouns",
|
||||||
FieldsUser::Suspension => "suspended_until",
|
FieldsUser::Suspension => "suspended_until",
|
||||||
FieldsUser::None => "none",
|
FieldsUser::None => "none",
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -631,6 +631,7 @@ impl From<crate::Member> for Member {
|
|||||||
id: value.id.into(),
|
id: value.id.into(),
|
||||||
joined_at: value.joined_at,
|
joined_at: value.joined_at,
|
||||||
nickname: value.nickname,
|
nickname: value.nickname,
|
||||||
|
pronouns: value.pronouns,
|
||||||
avatar: value.avatar.map(|f| f.into()),
|
avatar: value.avatar.map(|f| f.into()),
|
||||||
roles: value.roles,
|
roles: value.roles,
|
||||||
timeout: value.timeout,
|
timeout: value.timeout,
|
||||||
@@ -646,6 +647,7 @@ impl From<Member> for crate::Member {
|
|||||||
id: value.id.into(),
|
id: value.id.into(),
|
||||||
joined_at: value.joined_at,
|
joined_at: value.joined_at,
|
||||||
nickname: value.nickname,
|
nickname: value.nickname,
|
||||||
|
pronouns: value.pronouns,
|
||||||
avatar: value.avatar.map(|f| f.into()),
|
avatar: value.avatar.map(|f| f.into()),
|
||||||
roles: value.roles,
|
roles: value.roles,
|
||||||
timeout: value.timeout,
|
timeout: value.timeout,
|
||||||
@@ -661,6 +663,7 @@ impl From<crate::PartialMember> for PartialMember {
|
|||||||
id: value.id.map(|id| id.into()),
|
id: value.id.map(|id| id.into()),
|
||||||
joined_at: value.joined_at,
|
joined_at: value.joined_at,
|
||||||
nickname: value.nickname,
|
nickname: value.nickname,
|
||||||
|
pronouns: value.pronouns,
|
||||||
avatar: value.avatar.map(|f| f.into()),
|
avatar: value.avatar.map(|f| f.into()),
|
||||||
roles: value.roles,
|
roles: value.roles,
|
||||||
timeout: value.timeout,
|
timeout: value.timeout,
|
||||||
@@ -676,6 +679,7 @@ impl From<PartialMember> for crate::PartialMember {
|
|||||||
id: value.id.map(|id| id.into()),
|
id: value.id.map(|id| id.into()),
|
||||||
joined_at: value.joined_at,
|
joined_at: value.joined_at,
|
||||||
nickname: value.nickname,
|
nickname: value.nickname,
|
||||||
|
pronouns: value.pronouns,
|
||||||
avatar: value.avatar.map(|f| f.into()),
|
avatar: value.avatar.map(|f| f.into()),
|
||||||
roles: value.roles,
|
roles: value.roles,
|
||||||
timeout: value.timeout,
|
timeout: value.timeout,
|
||||||
@@ -708,6 +712,7 @@ impl From<crate::FieldsMember> for FieldsMember {
|
|||||||
match value {
|
match value {
|
||||||
crate::FieldsMember::Avatar => FieldsMember::Avatar,
|
crate::FieldsMember::Avatar => FieldsMember::Avatar,
|
||||||
crate::FieldsMember::Nickname => FieldsMember::Nickname,
|
crate::FieldsMember::Nickname => FieldsMember::Nickname,
|
||||||
|
crate::FieldsMember::Pronouns => FieldsMember::Pronouns,
|
||||||
crate::FieldsMember::Roles => FieldsMember::Roles,
|
crate::FieldsMember::Roles => FieldsMember::Roles,
|
||||||
crate::FieldsMember::Timeout => FieldsMember::Timeout,
|
crate::FieldsMember::Timeout => FieldsMember::Timeout,
|
||||||
crate::FieldsMember::CanReceive => FieldsMember::CanReceive,
|
crate::FieldsMember::CanReceive => FieldsMember::CanReceive,
|
||||||
@@ -723,6 +728,7 @@ impl From<FieldsMember> for crate::FieldsMember {
|
|||||||
match value {
|
match value {
|
||||||
FieldsMember::Avatar => crate::FieldsMember::Avatar,
|
FieldsMember::Avatar => crate::FieldsMember::Avatar,
|
||||||
FieldsMember::Nickname => crate::FieldsMember::Nickname,
|
FieldsMember::Nickname => crate::FieldsMember::Nickname,
|
||||||
|
FieldsMember::Pronouns => crate::FieldsMember::Pronouns,
|
||||||
FieldsMember::Roles => crate::FieldsMember::Roles,
|
FieldsMember::Roles => crate::FieldsMember::Roles,
|
||||||
FieldsMember::Timeout => crate::FieldsMember::Timeout,
|
FieldsMember::Timeout => crate::FieldsMember::Timeout,
|
||||||
FieldsMember::CanReceive => crate::FieldsMember::CanReceive,
|
FieldsMember::CanReceive => crate::FieldsMember::CanReceive,
|
||||||
@@ -1032,6 +1038,7 @@ impl crate::User {
|
|||||||
username: self.username,
|
username: self.username,
|
||||||
discriminator: self.discriminator,
|
discriminator: self.discriminator,
|
||||||
display_name: self.display_name,
|
display_name: self.display_name,
|
||||||
|
pronouns: self.pronouns,
|
||||||
avatar: self.avatar.map(|file| file.into()),
|
avatar: self.avatar.map(|file| file.into()),
|
||||||
relations: if let Some(crate::User { id, .. }) = perspective {
|
relations: if let Some(crate::User { id, .. }) = perspective {
|
||||||
if id == &self.id {
|
if id == &self.id {
|
||||||
@@ -1108,6 +1115,7 @@ impl crate::User {
|
|||||||
username: self.username,
|
username: self.username,
|
||||||
discriminator: self.discriminator,
|
discriminator: self.discriminator,
|
||||||
display_name: self.display_name,
|
display_name: self.display_name,
|
||||||
|
pronouns: self.pronouns,
|
||||||
avatar: self.avatar.map(|file| file.into()),
|
avatar: self.avatar.map(|file| file.into()),
|
||||||
relations: vec![],
|
relations: vec![],
|
||||||
badges,
|
badges,
|
||||||
@@ -1141,6 +1149,7 @@ impl crate::User {
|
|||||||
username: self.username,
|
username: self.username,
|
||||||
discriminator: self.discriminator,
|
discriminator: self.discriminator,
|
||||||
display_name: self.display_name,
|
display_name: self.display_name,
|
||||||
|
pronouns: self.pronouns,
|
||||||
avatar: self.avatar.map(|file| file.into()),
|
avatar: self.avatar.map(|file| file.into()),
|
||||||
relations: vec![],
|
relations: vec![],
|
||||||
badges,
|
badges,
|
||||||
@@ -1168,6 +1177,7 @@ impl crate::User {
|
|||||||
username: self.username,
|
username: self.username,
|
||||||
discriminator: self.discriminator,
|
discriminator: self.discriminator,
|
||||||
display_name: self.display_name,
|
display_name: self.display_name,
|
||||||
|
pronouns: self.pronouns,
|
||||||
avatar: self.avatar.map(|file| file.into()),
|
avatar: self.avatar.map(|file| file.into()),
|
||||||
relations: self
|
relations: self
|
||||||
.relations
|
.relations
|
||||||
@@ -1211,6 +1221,7 @@ impl From<User> for crate::User {
|
|||||||
username: value.username,
|
username: value.username,
|
||||||
discriminator: value.discriminator,
|
discriminator: value.discriminator,
|
||||||
display_name: value.display_name,
|
display_name: value.display_name,
|
||||||
|
pronouns: value.pronouns,
|
||||||
avatar: value.avatar.map(Into::into),
|
avatar: value.avatar.map(Into::into),
|
||||||
relations: None,
|
relations: None,
|
||||||
badges: Some(value.badges as i32),
|
badges: Some(value.badges as i32),
|
||||||
@@ -1231,6 +1242,7 @@ impl From<crate::PartialUser> for PartialUser {
|
|||||||
username: value.username,
|
username: value.username,
|
||||||
discriminator: value.discriminator,
|
discriminator: value.discriminator,
|
||||||
display_name: value.display_name,
|
display_name: value.display_name,
|
||||||
|
pronouns: value.pronouns,
|
||||||
avatar: value.avatar.map(|file| file.into()),
|
avatar: value.avatar.map(|file| file.into()),
|
||||||
relations: value.relations.map(|relationships| {
|
relations: value.relations.map(|relationships| {
|
||||||
relationships
|
relationships
|
||||||
@@ -1259,6 +1271,7 @@ impl From<FieldsUser> for crate::FieldsUser {
|
|||||||
FieldsUser::StatusPresence => crate::FieldsUser::StatusPresence,
|
FieldsUser::StatusPresence => crate::FieldsUser::StatusPresence,
|
||||||
FieldsUser::StatusText => crate::FieldsUser::StatusText,
|
FieldsUser::StatusText => crate::FieldsUser::StatusText,
|
||||||
FieldsUser::DisplayName => crate::FieldsUser::DisplayName,
|
FieldsUser::DisplayName => crate::FieldsUser::DisplayName,
|
||||||
|
FieldsUser::Pronouns => crate::FieldsUser::Pronouns,
|
||||||
|
|
||||||
FieldsUser::Internal => crate::FieldsUser::None,
|
FieldsUser::Internal => crate::FieldsUser::None,
|
||||||
}
|
}
|
||||||
@@ -1274,6 +1287,7 @@ impl From<crate::FieldsUser> for FieldsUser {
|
|||||||
crate::FieldsUser::StatusPresence => FieldsUser::StatusPresence,
|
crate::FieldsUser::StatusPresence => FieldsUser::StatusPresence,
|
||||||
crate::FieldsUser::StatusText => FieldsUser::StatusText,
|
crate::FieldsUser::StatusText => FieldsUser::StatusText,
|
||||||
crate::FieldsUser::DisplayName => FieldsUser::DisplayName,
|
crate::FieldsUser::DisplayName => FieldsUser::DisplayName,
|
||||||
|
crate::FieldsUser::Pronouns => FieldsUser::Pronouns,
|
||||||
|
|
||||||
crate::FieldsUser::Suspension => FieldsUser::Internal,
|
crate::FieldsUser::Suspension => FieldsUser::Internal,
|
||||||
crate::FieldsUser::None => FieldsUser::Internal,
|
crate::FieldsUser::None => FieldsUser::Internal,
|
||||||
|
|||||||
@@ -52,6 +52,9 @@ auto_derived_partial!(
|
|||||||
/// Member's nickname
|
/// Member's nickname
|
||||||
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
|
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
|
||||||
pub nickname: Option<String>,
|
pub nickname: Option<String>,
|
||||||
|
/// Member's pronouns
|
||||||
|
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
|
||||||
|
pub pronouns: Option<String>,
|
||||||
/// Avatar attachment
|
/// Avatar attachment
|
||||||
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
|
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
|
||||||
pub avatar: Option<File>,
|
pub avatar: Option<File>,
|
||||||
@@ -89,6 +92,7 @@ auto_derived!(
|
|||||||
/// Optional fields on server member object
|
/// Optional fields on server member object
|
||||||
pub enum FieldsMember {
|
pub enum FieldsMember {
|
||||||
Nickname,
|
Nickname,
|
||||||
|
Pronouns,
|
||||||
Avatar,
|
Avatar,
|
||||||
Roles,
|
Roles,
|
||||||
Timeout,
|
Timeout,
|
||||||
@@ -136,6 +140,9 @@ auto_derived!(
|
|||||||
/// Member nickname
|
/// Member nickname
|
||||||
#[cfg_attr(feature = "validator", validate(length(min = 1, max = 32)))]
|
#[cfg_attr(feature = "validator", validate(length(min = 1, max = 32)))]
|
||||||
pub nickname: Option<String>,
|
pub nickname: Option<String>,
|
||||||
|
/// Member pronouns
|
||||||
|
#[cfg_attr(feature = "validator", validate(length(min = 1, max = 24)))]
|
||||||
|
pub pronouns: Option<String>,
|
||||||
/// Attachment Id to set for avatar
|
/// Attachment Id to set for avatar
|
||||||
pub avatar: Option<String>,
|
pub avatar: Option<String>,
|
||||||
/// Array of role ids
|
/// Array of role ids
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ auto_derived_partial!(
|
|||||||
/// Display name
|
/// Display name
|
||||||
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
|
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
|
||||||
pub display_name: Option<String>,
|
pub display_name: Option<String>,
|
||||||
|
/// User's pronouns
|
||||||
|
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
|
||||||
|
pub pronouns: Option<String>,
|
||||||
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
|
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
|
||||||
/// Avatar attachment
|
/// Avatar attachment
|
||||||
pub avatar: Option<File>,
|
pub avatar: Option<File>,
|
||||||
@@ -89,6 +92,7 @@ auto_derived!(
|
|||||||
ProfileContent,
|
ProfileContent,
|
||||||
ProfileBackground,
|
ProfileBackground,
|
||||||
DisplayName,
|
DisplayName,
|
||||||
|
Pronouns,
|
||||||
|
|
||||||
/// Internal field, ignore this.
|
/// Internal field, ignore this.
|
||||||
Internal,
|
Internal,
|
||||||
@@ -225,6 +229,9 @@ auto_derived!(
|
|||||||
validate(length(min = 2, max = 32), regex = "RE_DISPLAY_NAME")
|
validate(length(min = 2, max = 32), regex = "RE_DISPLAY_NAME")
|
||||||
)]
|
)]
|
||||||
pub display_name: Option<String>,
|
pub display_name: Option<String>,
|
||||||
|
/// New pronouns
|
||||||
|
#[cfg_attr(feature = "validator", validate(length(min = 1, max = 24)))]
|
||||||
|
pub pronouns: Option<String>,
|
||||||
/// Attachment Id for avatar
|
/// Attachment Id for avatar
|
||||||
#[cfg_attr(feature = "validator", validate(length(min = 1, max = 128)))]
|
#[cfg_attr(feature = "validator", validate(length(min = 1, max = 128)))]
|
||||||
pub avatar: Option<String>,
|
pub avatar: Option<String>,
|
||||||
|
|||||||
@@ -359,6 +359,7 @@ mod test {
|
|||||||
id: None,
|
id: None,
|
||||||
joined_at: None,
|
joined_at: None,
|
||||||
nickname: None,
|
nickname: None,
|
||||||
|
pronouns: None,
|
||||||
avatar: None,
|
avatar: None,
|
||||||
timeout: None,
|
timeout: None,
|
||||||
roles: Some(second_member_roles),
|
roles: Some(second_member_roles),
|
||||||
@@ -688,6 +689,7 @@ mod test {
|
|||||||
id: None,
|
id: None,
|
||||||
joined_at: None,
|
joined_at: None,
|
||||||
nickname: None,
|
nickname: None,
|
||||||
|
pronouns: None,
|
||||||
roles: Some(vec![role.id.clone()]),
|
roles: Some(vec![role.id.clone()]),
|
||||||
timeout: None,
|
timeout: None,
|
||||||
can_publish: None,
|
can_publish: None,
|
||||||
|
|||||||
@@ -64,6 +64,12 @@ pub async fn edit(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if data.pronouns.is_some() || data.remove.contains(&v0::FieldsMember::Pronouns) {
|
||||||
|
if user.id != member.id.user {
|
||||||
|
return Err(create_error!(InvalidOperation))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if data.avatar.is_some() || data.remove.contains(&v0::FieldsMember::Avatar) {
|
if data.avatar.is_some() || data.remove.contains(&v0::FieldsMember::Avatar) {
|
||||||
if user.id == member.id.user {
|
if user.id == member.id.user {
|
||||||
permissions.throw_if_lacking_channel_permission(ChannelPermission::ChangeAvatar)?;
|
permissions.throw_if_lacking_channel_permission(ChannelPermission::ChangeAvatar)?;
|
||||||
@@ -172,6 +178,7 @@ pub async fn edit(
|
|||||||
// Apply edits to the member object
|
// Apply edits to the member object
|
||||||
let v0::DataMemberEdit {
|
let v0::DataMemberEdit {
|
||||||
nickname,
|
nickname,
|
||||||
|
pronouns,
|
||||||
avatar,
|
avatar,
|
||||||
roles,
|
roles,
|
||||||
timeout,
|
timeout,
|
||||||
@@ -183,6 +190,7 @@ pub async fn edit(
|
|||||||
|
|
||||||
let mut partial = PartialMember {
|
let mut partial = PartialMember {
|
||||||
nickname,
|
nickname,
|
||||||
|
pronouns,
|
||||||
roles,
|
roles,
|
||||||
timeout,
|
timeout,
|
||||||
can_publish,
|
can_publish,
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ pub async fn edit(
|
|||||||
|
|
||||||
// Exit out early if nothing is changed
|
// Exit out early if nothing is changed
|
||||||
if data.display_name.is_none()
|
if data.display_name.is_none()
|
||||||
|
&& data.pronouns.is_none()
|
||||||
&& data.status.is_none()
|
&& data.status.is_none()
|
||||||
&& data.profile.is_none()
|
&& data.profile.is_none()
|
||||||
&& data.avatar.is_none()
|
&& data.avatar.is_none()
|
||||||
@@ -80,6 +81,7 @@ pub async fn edit(
|
|||||||
|
|
||||||
let mut partial: PartialUser = PartialUser {
|
let mut partial: PartialUser = PartialUser {
|
||||||
display_name: data.display_name,
|
display_name: data.display_name,
|
||||||
|
pronouns: data.pronouns,
|
||||||
badges: data.badges,
|
badges: data.badges,
|
||||||
flags: data.flags,
|
flags: data.flags,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
|||||||
Reference in New Issue
Block a user