feat: parse message push notification content and replace internal formatting (#693)

* parse message push notification content and replace internal formatting

Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>

* fix: don't unwrap the error I was using for db debugging

Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>

* fix: emojis & remove compiler warning

Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>

* fix: emojis in pushd

Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>

* feat: report errors in the render function to sentry

Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>

---------

Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>
This commit is contained in:
Tom
2026-03-27 17:15:05 -07:00
committed by GitHub
parent 6107f242fd
commit d1e72cee42
12 changed files with 451 additions and 52 deletions

View File

@@ -3,7 +3,7 @@ use std::{
hash::RandomState,
};
use crate::consumers::inbound::internal::*;
use crate::{consumers::inbound::internal::*, utils};
use amqprs::{
channel::{BasicPublishArguments, Channel},
connection::Connection,
@@ -17,6 +17,7 @@ use revolt_database::{
MessageFlagsValue,
};
use revolt_models::v0::{MessageFlags, PushNotification};
use revolt_result::ToRevoltError;
pub struct MassMessageConsumer {
#[allow(dead_code)]
@@ -129,7 +130,17 @@ impl MassMessageConsumer {
) -> Result<()> {
let config = revolt_config::config().await;
let content = String::from_utf8(content)?;
let payload: MassMessageSentPayload = serde_json::from_str(content.as_str())?;
let mut payload: MassMessageSentPayload = serde_json::from_str(content.as_str())?;
for push in payload.notifications.iter_mut() {
if let Ok(body) = utils::render_notification_content(push, &self.db)
.await
.to_internal_error()
{
push.raw_body = Some(push.body.clone());
push.body = body;
}
}
debug!("Received mass message event");

View File

@@ -1,6 +1,6 @@
use std::collections::HashMap;
use crate::consumers::inbound::internal::*;
use crate::{consumers::inbound::internal::*, utils};
use amqprs::{
channel::{BasicPublishArguments, Channel},
connection::Connection,
@@ -11,6 +11,7 @@ use anyhow::Result;
use async_trait::async_trait;
use log::debug;
use revolt_database::{events::rabbit::*, Database};
use revolt_result::ToRevoltError;
pub struct MessageConsumer {
#[allow(dead_code)]
@@ -64,7 +65,15 @@ impl MessageConsumer {
content: Vec<u8>,
) -> Result<()> {
let content = String::from_utf8(content)?;
let payload: MessageSentPayload = serde_json::from_str(content.as_str())?;
let mut payload: MessageSentPayload = serde_json::from_str(content.as_str())?;
if let Ok(body) = utils::render_notification_content(&payload.notification, &self.db)
.await
.to_internal_error()
{
payload.notification.raw_body = Some(payload.notification.body);
payload.notification.body = body;
}
debug!("Received message event on origin");