diff --git a/crates/delta/src/routes/channels/message_send.rs b/crates/delta/src/routes/channels/message_send.rs index 399e56b3..e7dceb4b 100644 --- a/crates/delta/src/routes/channels/message_send.rs +++ b/crates/delta/src/routes/channels/message_send.rs @@ -116,7 +116,7 @@ pub async fn message_send( } // 3. Ensure interactions information is correct - message.interactions.validate(db).await?; + message.interactions.validate(db, &mut permissions).await?; // 4. Verify replies are valid. let mut replies = HashSet::new(); diff --git a/crates/quark/src/impl/generic/channels/message.rs b/crates/quark/src/impl/generic/channels/message.rs index 46528eab..20318da6 100644 --- a/crates/quark/src/impl/generic/channels/message.rs +++ b/crates/quark/src/impl/generic/channels/message.rs @@ -13,13 +13,14 @@ use crate::{ }, Channel, Emoji, Message, User, }, + permissions::PermissionCalculator, presence::presence_filter_online, tasks::ack::AckEvent, types::{ january::{Embed, Text}, push::PushNotification, }, - Database, Error, Result, + Database, Error, Permission, Result, }; impl Message { @@ -406,8 +407,14 @@ impl BulkMessageResponse { impl Interactions { /// Validate interactions info is correct - pub async fn validate(&self, db: &Database) -> Result<()> { + pub async fn validate( + &self, + db: &Database, + permissions: &mut PermissionCalculator<'_>, + ) -> Result<()> { if let Some(reactions) = &self.reactions { + permissions.throw_permission(db, Permission::React).await?; + if reactions.len() > 20 { return Err(Error::InvalidOperation); }