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]]
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",

View File

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

View File

@@ -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 <paulmakles@gmail.com>"]
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())
.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?;

View File

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

View File

@@ -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<Message>,
/// Context after the message
#[serde(rename = "_leading_context")]
leading_context: Vec<Message>,
/// Message
#[serde(flatten)]
message: Message,
},
Server(Server),
User(User),
}