feat: reimplement system messages

This commit is contained in:
Paul Makles
2022-04-21 16:36:59 +01:00
parent 5ce0c133e8
commit da08a7d722
5 changed files with 50 additions and 6 deletions

View File

@@ -1,6 +1,7 @@
use revolt_quark::{ use revolt_quark::{
models::{ models::{
channel::{Channel, FieldsChannel, PartialChannel}, channel::{Channel, FieldsChannel, PartialChannel},
message::SystemMessage,
File, User, File, User,
}, },
perms, Database, Error, Permission, Ref, Result, perms, Database, Error, Permission, Ref, Result,
@@ -129,6 +130,38 @@ pub async fn req(
partial.nsfw = Some(new_nsfw); 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 channel
.update(db, partial, data.remove.unwrap_or_default()) .update(db, partial, data.remove.unwrap_or_default())
.await?; .await?;

View File

@@ -9,7 +9,7 @@ use revolt_quark::{
#[openapi(tag = "Groups")] #[openapi(tag = "Groups")]
#[put("/<target>/recipients/<member>")] #[put("/<target>/recipients/<member>")]
pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result<EmptyResponse> { pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result<EmptyResponse> {
let channel = target.as_channel(db).await?; let mut channel = target.as_channel(db).await?;
perms(&user) perms(&user)
.channel(&channel) .channel(&channel)
.throw_permission_and_view_channel(db, Permission::InviteOthers) .throw_permission_and_view_channel(db, Permission::InviteOthers)

View File

@@ -55,5 +55,5 @@ pub async fn req(
return Err(Error::NotElevated); return Err(Error::NotElevated);
} }
member.ban(db, data.reason).await.map(Json) server.ban_member(db, member, data.reason).await.map(Json)
} }

View File

@@ -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 /// # Kick Member
/// ///
@@ -30,5 +33,8 @@ pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result<EmptyR
return Err(Error::NotElevated); return Err(Error::NotElevated);
} }
member.delete(db).await.map(|_| EmptyResponse) server
.remove_member(db, member, RemovalIntention::Kick)
.await
.map(|_| EmptyResponse)
} }

View File

@@ -1,4 +1,7 @@
use revolt_quark::{models::User, Db, EmptyResponse, Ref, Result}; use revolt_quark::{
models::{server_member::RemovalIntention, User},
Db, EmptyResponse, Ref, Result,
};
/// # Delete / Leave Server /// # Delete / Leave Server
/// ///
@@ -12,7 +15,9 @@ pub async fn req(db: &Db, user: User, target: Ref) -> Result<EmptyResponse> {
if server.owner == user.id { if server.owner == user.id {
server.delete(db).await server.delete(db).await
} else { } else {
member.delete(db).await server
.remove_member(db, member, RemovalIntention::Leave)
.await
} }
.map(|_| EmptyResponse) .map(|_| EmptyResponse)
} }