use async_trait::async_trait; use crate::{ framework::commands::{CommandError, context::CommandContext, permissions::Permission}, state::State, }; #[derive(Debug)] pub struct GuildOnlyPermission; #[async_trait] impl Permission for GuildOnlyPermission { async fn check(&self, ctx: &CommandContext) -> Result { Ok(ctx.event.guild_id.is_none()) } } #[derive(Debug)] 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)?; Ok(true) } }