diff --git a/src/framework/commands/permissions.rs b/src/framework/commands/permissions.rs index 452cf73..4d2226b 100644 --- a/src/framework/commands/permissions.rs +++ b/src/framework/commands/permissions.rs @@ -7,4 +7,8 @@ use crate::framework::commands::{CommandError, context::CommandContext}; #[async_trait] pub trait Permission: Debug { async fn check(&self, ctx: &CommandContext) -> Result; + + async fn on_handle_denied(&self, _ctx: &CommandContext) -> Result<(), CommandError> { + Ok(()) + } } diff --git a/src/framework/commands/runner.rs b/src/framework/commands/runner.rs index dd6ae2f..f210491 100644 --- a/src/framework/commands/runner.rs +++ b/src/framework/commands/runner.rs @@ -39,6 +39,7 @@ impl OnMessageHandler for CommandRunner { .await .inspect_err(|e| log::error!("Permission check failed: {e}"))? { + permission.on_handle_denied(&ctx).await?; return Ok(()); } } diff --git a/src/groups/calls/permissions.rs b/src/groups/calls/permissions.rs index c459988..cf51da4 100644 --- a/src/groups/calls/permissions.rs +++ b/src/groups/calls/permissions.rs @@ -19,19 +19,23 @@ impl Permission for NotBannedPermission { .map_err(|_| CommandError::DatabaseQueryFailed)?; if incidents.iter().any(|i| i.is_active()) { - ctx.send() - .content("❌ You've been banned from Payphone.") - .component(CodeOfConductButton, 1) - .component(NeedHelpButton, 1) - .await - .inspect_err(|e| { - log::error!("Failed to send message: {e}"); - }) - .map_err(|_| CommandError::MessageSendingFailed)?; - Ok(false) } else { Ok(true) } } + + async fn on_handle_denied(&self, ctx: &CommandContext) -> Result<(), CommandError> { + ctx.send() + .content("❌ You've been banned from Payphone.") + .component(CodeOfConductButton, 1) + .component(NeedHelpButton, 1) + .await + .inspect_err(|e| { + log::error!("Failed to send message: {e}"); + }) + .map_err(|_| CommandError::MessageSendingFailed)?; + + Ok(()) + } } diff --git a/src/groups/mod.rs b/src/groups/mod.rs index d51cf4e..128bfcc 100644 --- a/src/groups/mod.rs +++ b/src/groups/mod.rs @@ -18,3 +18,4 @@ pub mod about; pub mod calls; pub mod gateway; pub mod servers; +pub mod moderation; diff --git a/src/groups/moderation/mod.rs b/src/groups/moderation/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/groups/servers/permissions.rs b/src/groups/servers/permissions.rs index f4aa83f..8f09a4d 100644 --- a/src/groups/servers/permissions.rs +++ b/src/groups/servers/permissions.rs @@ -20,17 +20,7 @@ pub struct ServerModeratorPermission; #[async_trait] impl Permission for ServerModeratorPermission { - async fn check(&self, ctx: &CommandContext) -> Result { - let member = ctx - .rt - .http - .guild_member(ctx.event.guild_id.unwrap(), ctx.event.author.id) - .await - .map_err(CommandError::DiscordAPIFailed)? - .model() - .await - .map_err(CommandError::DiscordDeserializationFailed)?; - + async fn check(&self, _ctx: &CommandContext) -> Result { Ok(true) } }