diff --git a/src/database/entities/message.rs b/src/database/entities/message.rs index 3097230f..74a2585a 100644 --- a/src/database/entities/message.rs +++ b/src/database/entities/message.rs @@ -10,6 +10,7 @@ use rocket::serde::json::Value; use serde::{Deserialize, Serialize}; use ulid::Ulid; use validator::Validate; +use std::collections::HashSet; use std::time::SystemTime; #[derive(Serialize, Deserialize, Debug, Clone)] @@ -340,4 +341,23 @@ impl Message { Ok(()) } + + pub fn add_associated_user_ids(&self, ids: &mut HashSet) { + ids.insert(self.author.clone()); + + if let Content::SystemMessage(sys) = &self.content { + match sys { + SystemMessage::Text { .. } => {}, + SystemMessage::UserAdded { id, by } => { ids.insert(id.clone()); ids.insert(by.clone()); }, + SystemMessage::UserRemove { id, by } => { ids.insert(id.clone()); ids.insert(by.clone()); }, + SystemMessage::UserJoined { id } => { ids.insert(id.clone()); }, + SystemMessage::UserLeft { id } => { ids.insert(id.clone()); }, + SystemMessage::UserKicked { id } => { ids.insert(id.clone()); }, + SystemMessage::UserBanned { id } => { ids.insert(id.clone()); }, + SystemMessage::ChannelRenamed { by, .. } => { ids.insert(by.clone()); }, + SystemMessage::ChannelDescriptionChanged { by } => { ids.insert(by.clone()); }, + SystemMessage::ChannelIconChanged { by } => { ids.insert(by.clone()); } + } + } + } } diff --git a/src/routes/channels/message_query.rs b/src/routes/channels/message_query.rs index 59b30977..485c2cf8 100644 --- a/src/routes/channels/message_query.rs +++ b/src/routes/channels/message_query.rs @@ -161,7 +161,7 @@ pub async fn req(user: User, target: Ref, options: Options) -> Result { if options.include_users.unwrap_or_else(|| false) { let mut ids = HashSet::new(); for message in &messages { - ids.insert(message.author.clone()); + message.add_associated_user_ids(&mut ids); } ids.remove(&user.id); diff --git a/src/routes/channels/message_search.rs b/src/routes/channels/message_search.rs index 350ab57d..231e523e 100644 --- a/src/routes/channels/message_search.rs +++ b/src/routes/channels/message_search.rs @@ -137,7 +137,7 @@ pub async fn req(user: User, target: Ref, options: Json) -> Result