diff --git a/src/routes/channels/message_query.rs b/src/routes/channels/message_query.rs index 903d811e36cf8e065d5fc109154d64fa1f053b81..3206f23ff9c8e4aa4a00d96667144069dac306e8 100644 --- a/src/routes/channels/message_query.rs +++ b/src/routes/channels/message_query.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use crate::database::*; use crate::util::result::{Error, Result}; @@ -26,6 +28,7 @@ pub struct Options { #[validate(length(min = 26, max = 26))] after: Option<String>, sort: Option<Sort>, + include_users: Option<bool> } #[get("/<target>/messages?<options..>")] @@ -87,5 +90,19 @@ pub async fn req(user: User, target: Ref, options: Form<Options>) -> Result<Json } } - Ok(json!(messages)) + if options.include_users.unwrap_or_else(|| false) { + let mut ids = HashSet::new(); + for message in &messages { + ids.insert(message.author.clone()); + } + + let user_ids = ids.into_iter().collect(); + + Ok(json!({ + "messages": messages, + "users": user.fetch_multiple_users(user_ids).await? + })) + } else { + Ok(json!(messages)) + } }