From 3038fb230f71682fa100a955f6bd15ff92892655 Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Thu, 23 Feb 2023 18:12:45 +0100 Subject: [PATCH] feat(safety): save surrounding context around messages (closes #226) --- Cargo.lock | 6 ++-- crates/bonfire/Cargo.toml | 2 +- crates/delta/Cargo.toml | 2 +- .../delta/src/routes/safety/report_content.rs | 33 ++++++++++++++++++- crates/quark/Cargo.toml | 2 +- crates/quark/src/models/safety/snapshot.rs | 14 +++++++- 6 files changed, 51 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a1d5ff69..7f795004 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2792,7 +2792,7 @@ dependencies = [ [[package]] name = "revolt-bonfire" -version = "0.5.8" +version = "0.5.9" dependencies = [ "async-std", "async-tungstenite", @@ -2808,7 +2808,7 @@ dependencies = [ [[package]] name = "revolt-delta" -version = "0.5.8" +version = "0.5.9" dependencies = [ "async-channel", "async-std", @@ -2848,7 +2848,7 @@ dependencies = [ [[package]] name = "revolt-quark" -version = "0.5.8" +version = "0.5.9" dependencies = [ "async-lock", "async-recursion", diff --git a/crates/bonfire/Cargo.toml b/crates/bonfire/Cargo.toml index 9978eaa7..2e36f6fc 100644 --- a/crates/bonfire/Cargo.toml +++ b/crates/bonfire/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-bonfire" -version = "0.5.8" +version = "0.5.9" license = "AGPL-3.0-or-later" edition = "2021" diff --git a/crates/delta/Cargo.toml b/crates/delta/Cargo.toml index 93ba97d8..abd3923d 100644 --- a/crates/delta/Cargo.toml +++ b/crates/delta/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-delta" -version = "0.5.8" +version = "0.5.9" license = "AGPL-3.0-or-later" authors = ["Paul Makles "] edition = "2018" diff --git a/crates/delta/src/routes/safety/report_content.rs b/crates/delta/src/routes/safety/report_content.rs index 0483b2b4..295b4e2b 100644 --- a/crates/delta/src/routes/safety/report_content.rs +++ b/crates/delta/src/routes/safety/report_content.rs @@ -53,7 +53,38 @@ pub async fn report_content(db: &Db, user: User, data: Json) .map(|attachments| attachments.iter().map(|x| x.id.to_string()).collect()) .unwrap_or_default(); - (SnapshotContent::Message(message), files) + // Collect prior context + let prior_context = db + .fetch_messages( + &message.channel, + Some(15), + Some(message.id.to_string()), + None, + None, + None, + ) + .await?; + + // Collect leading context + let leading_context = db + .fetch_messages( + &message.channel, + Some(15), + None, + Some(message.id.to_string()), + None, + None, + ) + .await?; + + ( + SnapshotContent::Message { + message, + prior_context, + leading_context, + }, + files, + ) } ReportedContent::Server { id, .. } => { let server = db.fetch_server(id).await?; diff --git a/crates/quark/Cargo.toml b/crates/quark/Cargo.toml index 02f98e36..11b2ff1e 100644 --- a/crates/quark/Cargo.toml +++ b/crates/quark/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-quark" -version = "0.5.8" +version = "0.5.9" license = "AGPL-3.0-or-later" edition = "2021" diff --git a/crates/quark/src/models/safety/snapshot.rs b/crates/quark/src/models/safety/snapshot.rs index 376434f4..f9674de8 100644 --- a/crates/quark/src/models/safety/snapshot.rs +++ b/crates/quark/src/models/safety/snapshot.rs @@ -7,7 +7,19 @@ use crate::models::{Message, Server, User}; #[derive(Serialize, Deserialize, JsonSchema, Debug)] #[serde(tag = "_type")] pub enum SnapshotContent { - Message(Message), + Message { + /// Context before the message + #[serde(rename = "_prior_context")] + prior_context: Vec, + + /// Context after the message + #[serde(rename = "_leading_context")] + leading_context: Vec, + + /// Message + #[serde(flatten)] + message: Message, + }, Server(Server), User(User), }