From da08a7d722fdd7a3f01a0b2f266e23421d15e1c4 Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Thu, 21 Apr 2022 16:36:59 +0100 Subject: [PATCH] feat: reimplement system messages --- src/routes/channels/channel_edit.rs | 33 +++++++++++++++++++++++++ src/routes/channels/group_add_member.rs | 2 +- src/routes/servers/ban_create.rs | 2 +- src/routes/servers/member_remove.rs | 10 ++++++-- src/routes/servers/server_delete.rs | 9 +++++-- 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/routes/channels/channel_edit.rs b/src/routes/channels/channel_edit.rs index d966ffff..45febe1c 100644 --- a/src/routes/channels/channel_edit.rs +++ b/src/routes/channels/channel_edit.rs @@ -1,6 +1,7 @@ use revolt_quark::{ models::{ channel::{Channel, FieldsChannel, PartialChannel}, + message::SystemMessage, File, User, }, perms, Database, Error, Permission, Ref, Result, @@ -129,6 +130,38 @@ pub async fn req( partial.nsfw = Some(new_nsfw); } + // Send out mutation system messages. + if let Channel::Group { .. } = &channel { + if let Some(name) = &partial.name { + SystemMessage::ChannelRenamed { + name: name.to_string(), + by: user.id.clone(), + } + .into_message(channel.id().to_string()) + .create(db, &channel, None) + .await + .ok(); + } + + if partial.description.is_some() { + SystemMessage::ChannelDescriptionChanged { + by: user.id.clone(), + } + .into_message(channel.id().to_string()) + .create(db, &channel, None) + .await + .ok(); + } + + if partial.icon.is_some() { + SystemMessage::ChannelIconChanged { by: user.id } + .into_message(channel.id().to_string()) + .create(db, &channel, None) + .await + .ok(); + } + } + channel .update(db, partial, data.remove.unwrap_or_default()) .await?; diff --git a/src/routes/channels/group_add_member.rs b/src/routes/channels/group_add_member.rs index 155cbeec..f516e34a 100644 --- a/src/routes/channels/group_add_member.rs +++ b/src/routes/channels/group_add_member.rs @@ -9,7 +9,7 @@ use revolt_quark::{ #[openapi(tag = "Groups")] #[put("//recipients/")] pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result { - let channel = target.as_channel(db).await?; + let mut channel = target.as_channel(db).await?; perms(&user) .channel(&channel) .throw_permission_and_view_channel(db, Permission::InviteOthers) diff --git a/src/routes/servers/ban_create.rs b/src/routes/servers/ban_create.rs index bee3617b..9664dfc6 100644 --- a/src/routes/servers/ban_create.rs +++ b/src/routes/servers/ban_create.rs @@ -55,5 +55,5 @@ pub async fn req( return Err(Error::NotElevated); } - member.ban(db, data.reason).await.map(Json) + server.ban_member(db, member, data.reason).await.map(Json) } diff --git a/src/routes/servers/member_remove.rs b/src/routes/servers/member_remove.rs index 07dffa27..96015c07 100644 --- a/src/routes/servers/member_remove.rs +++ b/src/routes/servers/member_remove.rs @@ -1,4 +1,7 @@ -use revolt_quark::{models::User, perms, Db, EmptyResponse, Error, Permission, Ref, Result}; +use revolt_quark::{ + models::{server_member::RemovalIntention, User}, + perms, Db, EmptyResponse, Error, Permission, Ref, Result, +}; /// # Kick Member /// @@ -30,5 +33,8 @@ pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result Result { if server.owner == user.id { server.delete(db).await } else { - member.delete(db).await + server + .remove_member(db, member, RemovalIntention::Leave) + .await } .map(|_| EmptyResponse) }