diff --git a/crates/core/database/src/amqp/amqp.rs b/crates/core/database/src/amqp/amqp.rs index a4f02e06..c29c4975 100644 --- a/crates/core/database/src/amqp/amqp.rs +++ b/crates/core/database/src/amqp/amqp.rs @@ -413,4 +413,36 @@ impl AMQP { Ok(()) } + + pub async fn publish_event_broadcast( + &self, + channels: Vec, + event: &EventV1, + ) -> Result<(), AMQPError> { + let mut headers = FieldTable::default(); + headers.insert( + "c".into(), + AMQPValue::FieldArray( + channels + .into_iter() + .map(|c| AMQPValue::LongString(c.into())) + .collect::>() + .into(), + ), + ); + + let config = config().await; + + self.publish_event + .basic_publish( + config.rabbit.default_exchange.clone().into(), + config.rabbit.queues.events.into(), + BasicPublishOptions::default(), + &serde_json::to_vec(event).unwrap(), + BasicProperties::default().with_headers(headers), + ) + .await?; + + Ok(()) + } } diff --git a/crates/core/database/src/events/client.rs b/crates/core/database/src/events/client.rs index 40a8dd22..89473bda 100644 --- a/crates/core/database/src/events/client.rs +++ b/crates/core/database/src/events/client.rs @@ -387,7 +387,6 @@ pub enum EventV1 { impl EventV1 { /// Publish helper wrapper pub async fn p(self, channel: String) { - //redis_kiss::p(channel.clone(), &self).await; #[cfg(debug_assertions)] info!("Publishing event to {channel}: {self:?}"); @@ -400,19 +399,17 @@ impl EventV1 { }; } - /// Publish user event - pub async fn p_user(self, id: String, db: &Database) { - self.clone().p(id.clone()).await; - } + pub async fn p_broadcast(self, channels: Vec) { + #[cfg(debug_assertions)] + info!("Broadcasting event to channels: {channels:?}: {self:?}"); - /// Publish private event - pub async fn private(self, id: String) { - self.p(format!("{id}")).await; - } - - /// Publish server member event - pub async fn server(self, id: String) { - self.p(format!("{id}")).await; + if let Err(e) = get_amqp().publish_event_broadcast(channels, &self).await { + if cfg!(debug_assertions) { + panic!("{e:?}"); + } else { + log::error!("{e:?}"); + }; + }; } /// Publish internal global event diff --git a/crates/core/database/src/models/accounts/model.rs b/crates/core/database/src/models/accounts/model.rs index 5608ecfc..450a4a4e 100644 --- a/crates/core/database/src/models/accounts/model.rs +++ b/crates/core/database/src/models/accounts/model.rs @@ -619,7 +619,7 @@ impl Account { user_id: self.id.clone(), exclude_session_id, } - .private(self.id.clone()) + .p(self.id.clone()) .await; Ok(()) diff --git a/crates/core/database/src/models/bots/model.rs b/crates/core/database/src/models/bots/model.rs index 8d7a8d3d..a9429efd 100644 --- a/crates/core/database/src/models/bots/model.rs +++ b/crates/core/database/src/models/bots/model.rs @@ -146,7 +146,7 @@ impl Bot { db.update_bot(&self.id, &partial, remove).await?; if partial.token.is_some() { - EventV1::Logout.private(self.id.clone()).await; + EventV1::Logout.p(self.id.clone()).await; } self.apply_options(partial); diff --git a/crates/core/database/src/models/channels/model.rs b/crates/core/database/src/models/channels/model.rs index e09169fe..0f2fc166 100644 --- a/crates/core/database/src/models/channels/model.rs +++ b/crates/core/database/src/models/channels/model.rs @@ -295,10 +295,9 @@ impl Channel { db.insert_channel(&channel).await?; - let event = EventV1::ChannelCreate(channel.clone().into()); - for recipient in recipients { - event.clone().private(recipient).await; - } + EventV1::ChannelCreate(channel.clone().into()) + .p_broadcast(recipients) + .await; Ok(channel) } @@ -328,9 +327,9 @@ impl Channel { db.insert_channel(&channel).await?; if let Channel::DirectMessage { .. } = &channel { - let event = EventV1::ChannelCreate(channel.clone().into()); - event.clone().private(user_a.id.clone()).await; - event.private(user_b.id.clone()).await; + EventV1::ChannelCreate(channel.clone().into()) + .p_broadcast(vec![user_a.id.clone(), user_b.id.clone()]) + .await; }; Ok(channel) @@ -392,7 +391,7 @@ impl Channel { .ok(); EventV1::ChannelCreate(self.clone().into()) - .private(user.id.to_string()) + .p(user.id.to_string()) .await; Ok(()) @@ -556,7 +555,7 @@ impl Channel { slowmode.take(); } _ => {} - } + }, } } @@ -774,7 +773,7 @@ impl Channel { user: user.to_string(), message_id: message.to_string(), } - .private(user.to_string()) + .p(user.to_string()) .await; crate::util::acker::ack_channel(user, self.id(), message, amqp).await diff --git a/crates/core/database/src/models/server_members/model.rs b/crates/core/database/src/models/server_members/model.rs index 158874e6..480b0f83 100644 --- a/crates/core/database/src/models/server_members/model.rs +++ b/crates/core/database/src/models/server_members/model.rs @@ -185,7 +185,7 @@ impl Member { emojis: emojis.into_iter().map(|emoji| emoji.into()).collect(), voice_states, } - .private(user.id.clone()) + .p(user.id.clone()) .await; if let Some(id) = server diff --git a/crates/core/database/src/models/sessions/model.rs b/crates/core/database/src/models/sessions/model.rs index 0be0246b..b3bf882d 100644 --- a/crates/core/database/src/models/sessions/model.rs +++ b/crates/core/database/src/models/sessions/model.rs @@ -60,7 +60,7 @@ impl Session { user_id: self.user_id.clone(), session_id: self.id, } - .private(self.user_id) + .p(self.user_id) .await; Ok(()) diff --git a/crates/core/database/src/models/user_settings/model.rs b/crates/core/database/src/models/user_settings/model.rs index 2db4b4c8..fbe11802 100644 --- a/crates/core/database/src/models/user_settings/model.rs +++ b/crates/core/database/src/models/user_settings/model.rs @@ -20,7 +20,7 @@ impl UserSettingsImpl for UserSettings { id: user.to_string(), update: self, } - .private(user.to_string()) + .p(user.to_string()) .await; Ok(()) diff --git a/crates/core/database/src/models/users/model.rs b/crates/core/database/src/models/users/model.rs index a279e094..4ca7b77b 100644 --- a/crates/core/database/src/models/users/model.rs +++ b/crates/core/database/src/models/users/model.rs @@ -514,14 +514,14 @@ impl User { id: target.id.clone(), user: self.clone().into(db, Some(&*target)).await, } - .private(target.id.clone()) + .p(target.id.clone()) .await; EventV1::UserRelationship { id: self.id.clone(), user: target.clone().into(db, Some(&*self)).await, } - .private(self.id.clone()) + .p(self.id.clone()) .await; Ok(()) @@ -680,7 +680,7 @@ impl User { clear: remove.into_iter().map(|v| v.into()).collect(), event_id: Some(Ulid::new().to_string()), } - .p_user(self.id.clone(), db) + .p(self.id.clone()) .await; Ok(()) diff --git a/crates/core/database/src/util/acker.rs b/crates/core/database/src/util/acker.rs index 8cc104c5..0c89a867 100644 --- a/crates/core/database/src/util/acker.rs +++ b/crates/core/database/src/util/acker.rs @@ -66,7 +66,7 @@ pub async fn ack_server(user: &User, server: &Server, db: &Database, amqp: &AMQP user: user.id.clone(), message_id: channel_last_msg, } - .private(user.id.clone()) + .p(user.id.clone()) .await; } } diff --git a/crates/daemons/voice-ingress/src/api.rs b/crates/daemons/voice-ingress/src/api.rs index 7010c58e..ecc5ca28 100644 --- a/crates/daemons/voice-ingress/src/api.rs +++ b/crates/daemons/voice-ingress/src/api.rs @@ -159,16 +159,14 @@ pub async fn ingress( .collect() }; - for recipient in call_recipients { - EventV1::VoiceCallUpdate { - initiator_id: user.id.clone(), - channel_id: channel_id.clone(), - started_at: Some(joined_at), - ended: false, - } - .private(recipient) - .await + EventV1::VoiceCallUpdate { + initiator_id: user.id.clone(), + channel_id: channel_id.clone(), + started_at: Some(joined_at), + ended: false, } + .p_broadcast(call_recipients) + .await } if let Err(e) = amqp diff --git a/crates/delta/src/routes/channels/message_send.rs b/crates/delta/src/routes/channels/message_send.rs index a809df0c..b1172eb8 100644 --- a/crates/delta/src/routes/channels/message_send.rs +++ b/crates/delta/src/routes/channels/message_send.rs @@ -111,7 +111,7 @@ pub async fn message_send( retry_after: ttl as u64, }], } - .private(user.id.clone()) + .p(user.id.clone()) .await; return Err(create_error!(InSlowmode { retry_after: ttl as u64 @@ -125,7 +125,7 @@ pub async fn message_send( retry_after: *channel_slowmode, }], } - .private(user.id.clone()) + .p(user.id.clone()) .await; } } diff --git a/crates/delta/src/routes/servers/member_edit.rs b/crates/delta/src/routes/servers/member_edit.rs index 35a2f971..70400369 100644 --- a/crates/delta/src/routes/servers/member_edit.rs +++ b/crates/delta/src/routes/servers/member_edit.rs @@ -286,7 +286,7 @@ pub async fn edit( to: new_voice_channel.id().to_string(), token, } - .private(target_user.id.clone()) + .p(target_user.id.clone()) .await; }; } else if can_publish.is_some()