From 1222a444a4f7ddc2bf6eaa6350277a7328bed07a Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sun, 21 Dec 2025 22:04:46 +0100 Subject: [PATCH] Edit and Remove message --- src/requests/message.rs | 28 ++++++++++++++++++++++++---- src/types.rs | 8 ++++---- src/utils/database.rs | 8 ++++---- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/requests/message.rs b/src/requests/message.rs index 929b547..29c32dd 100644 --- a/src/requests/message.rs +++ b/src/requests/message.rs @@ -1,5 +1,7 @@ use std::sync::Arc; +use anyhow::anyhow; + use crate::{plugin::types::LoaderMessage, server::Server, types, utils::client::Client}; crate::logger!(LOGGER "Message Manager"); @@ -52,16 +54,34 @@ pub fn send( } pub fn edit( - _server: &Arc, - _client: &Client, - message_id: usize, + server: &Arc, + client: &Client, + message_id: i64, new_contents: &str, ) -> crate::Result<()> { LOGGER.info(format!("EditMessage {message_id}: {new_contents}")); + let Some(msg) = server.db.get_message_by_id(message_id)? else { + return Err(anyhow!("Message does not exist")); + }; + + if msg.from != client.get_uuid()? { + return Err(anyhow!("You are not the author of this message")); + } + + server.db.edit_message(message_id, new_contents)?; Ok(()) } -pub fn delete(_server: &Arc, _client: &Client, message_id: usize) -> crate::Result<()> { +pub fn delete(server: &Arc, client: &Client, message_id: i64) -> crate::Result<()> { LOGGER.info(format!("DeleteMessage {message_id}")); + let Some(msg) = server.db.get_message_by_id(message_id)? else { + return Err(anyhow!("Message does not exist")); + }; + + if msg.from != client.get_uuid()? { + return Err(anyhow!("You are not the author of this message")); + } + + server.db.delete_message(message_id)?; Ok(()) } diff --git a/src/types.rs b/src/types.rs index 644cee4..8122dff 100644 --- a/src/types.rs +++ b/src/types.rs @@ -49,7 +49,7 @@ pub mod handshake { pub struct ClientDetails { pub version: String, pub auth_token: String, - pub last_message: Option, + pub last_message: Option, } } @@ -70,12 +70,12 @@ pub mod message { /// Edit a message (if allowed) EditMessage { - message_id: usize, + message_id: i64, new_contents: String, }, /// Delete a message (if allowed) - DeleteMessage { message_id: usize }, + DeleteMessage { message_id: i64 }, } /// Messages sent *from the server* to the client @@ -101,7 +101,7 @@ pub mod message { /// A message was deleted MessageDelete { channel_id: String, - message_id: usize, + message_id: i64, }, /// Presence updates diff --git a/src/utils/database.rs b/src/utils/database.rs index 641fb26..406e8a5 100644 --- a/src/utils/database.rs +++ b/src/utils/database.rs @@ -52,7 +52,7 @@ impl Database { } /// Delete a message from the DB - pub fn delete_message(&self, message_id: usize) -> Result<()> { + pub fn delete_message(&self, message_id: i64) -> Result<()> { self.0 .execute("DELETE FROM chat WHERE id = ?1;", params![message_id])?; @@ -60,7 +60,7 @@ impl Database { } /// Delete a message from the DB - pub fn edit_message(&self, message_id: usize, contents: &str) -> Result<()> { + pub fn edit_message(&self, message_id: i64, contents: &str) -> Result<()> { self.0.execute( "UPDATE table_name SET contents = ?2 @@ -73,7 +73,7 @@ impl Database { } /// Get a message by its ID - pub fn get_message_by_id(&self, message_id: &str) -> Result> { + pub fn get_message_by_id(&self, message_id: i64) -> Result> { let mut stmt = self.0.prepare( "SELECT id, channel_id, user_id, contents, timestamp FROM chat @@ -104,7 +104,7 @@ impl Database { } /// Get all messages with an ID greater than the given one - pub fn get_messages_after_id(&self, message_id: usize) -> Result> { + pub fn get_messages_after_id(&self, message_id: i64) -> Result> { let mut stmt = self.0.prepare( "SELECT id, channel_id, user_id, contents, timestamp FROM chat