feat(safety): save surrounding context around messages (closes #226)

This commit is contained in:
Paul Makles
2023-02-23 18:12:45 +01:00
parent 73af105feb
commit 3038fb230f
6 changed files with 51 additions and 8 deletions

6
Cargo.lock generated
View File

@@ -2792,7 +2792,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-bonfire" name = "revolt-bonfire"
version = "0.5.8" version = "0.5.9"
dependencies = [ dependencies = [
"async-std", "async-std",
"async-tungstenite", "async-tungstenite",
@@ -2808,7 +2808,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-delta" name = "revolt-delta"
version = "0.5.8" version = "0.5.9"
dependencies = [ dependencies = [
"async-channel", "async-channel",
"async-std", "async-std",
@@ -2848,7 +2848,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-quark" name = "revolt-quark"
version = "0.5.8" version = "0.5.9"
dependencies = [ dependencies = [
"async-lock", "async-lock",
"async-recursion", "async-recursion",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "revolt-bonfire" name = "revolt-bonfire"
version = "0.5.8" version = "0.5.9"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
edition = "2021" edition = "2021"

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "revolt-delta" name = "revolt-delta"
version = "0.5.8" version = "0.5.9"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
authors = ["Paul Makles <paulmakles@gmail.com>"] authors = ["Paul Makles <paulmakles@gmail.com>"]
edition = "2018" edition = "2018"

View File

@@ -53,7 +53,38 @@ pub async fn report_content(db: &Db, user: User, data: Json<DataReportContent>)
.map(|attachments| attachments.iter().map(|x| x.id.to_string()).collect()) .map(|attachments| attachments.iter().map(|x| x.id.to_string()).collect())
.unwrap_or_default(); .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, .. } => { ReportedContent::Server { id, .. } => {
let server = db.fetch_server(id).await?; let server = db.fetch_server(id).await?;

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "revolt-quark" name = "revolt-quark"
version = "0.5.8" version = "0.5.9"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
edition = "2021" edition = "2021"

View File

@@ -7,7 +7,19 @@ use crate::models::{Message, Server, User};
#[derive(Serialize, Deserialize, JsonSchema, Debug)] #[derive(Serialize, Deserialize, JsonSchema, Debug)]
#[serde(tag = "_type")] #[serde(tag = "_type")]
pub enum SnapshotContent { pub enum SnapshotContent {
Message(Message), Message {
/// Context before the message
#[serde(rename = "_prior_context")]
prior_context: Vec<Message>,
/// Context after the message
#[serde(rename = "_leading_context")]
leading_context: Vec<Message>,
/// Message
#[serde(flatten)]
message: Message,
},
Server(Server), Server(Server),
User(User), User(User),
} }