diff --git a/src/routes/channels/channel_ack.rs b/src/routes/channels/channel_ack.rs index 81dafd6c..81fc99f2 100644 --- a/src/routes/channels/channel_ack.rs +++ b/src/routes/channels/channel_ack.rs @@ -1,9 +1,14 @@ -use revolt_quark::{EmptyResponse, Result}; +use revolt_quark::{EmptyResponse, Error, Result, Ref, models::User, Db, perms}; #[put("//ack/")] pub async fn req( - /*user: UserRef, target: Ref, message: Ref*/ target: String, - message: String, + db: &Db, + user: User, target: Ref, message: Ref ) -> Result { - todo!() + let channel = target.as_channel(db).await?; + if !perms(&user).channel(&channel).calc_channel(db).await.get_view() { + return Err(Error::NotFound) + } + + db.acknowledge_message(channel.id(), &user.id, &message.id).await.map(|_| EmptyResponse) } diff --git a/src/routes/channels/message_delete.rs b/src/routes/channels/message_delete.rs index 7bfbfd65..32c1827a 100644 --- a/src/routes/channels/message_delete.rs +++ b/src/routes/channels/message_delete.rs @@ -1,11 +1,27 @@ -use revolt_quark::{EmptyResponse, Result}; +use revolt_quark::{models::User, perms, ChannelPermission, Db, EmptyResponse, Error, Ref, Result}; use mongodb::bson::doc; #[delete("//messages/")] -pub async fn req( - /*user: UserRef, target: Ref, msg: Ref*/ target: String, - msg: String, -) -> Result { - todo!() +pub async fn req(db: &Db, user: User, target: Ref, msg: Ref) -> Result { + let message = msg.as_message(db).await?; + if message.channel != target.id { + return Err(Error::NotFound); + } + + if message.author != user.id + || !{ + perms(&user) + .channel(&target.as_channel(db).await?) + .calc_channel(db) + .await + .get_manage_messages() + } + { + return Err(Error::MissingPermission { + permission: ChannelPermission::ManageMessages as i32, + }); + } + + db.delete_message(&message.id).await.map(|_| EmptyResponse) }