diff --git a/src/framework.rs b/src/framework.rs index e9b79ff..f6c6e3a 100644 --- a/src/framework.rs +++ b/src/framework.rs @@ -21,6 +21,7 @@ use regex::{Match, Regex}; use std::{collections::HashMap, env, fmt}; use crate::{consts::PREFIX, models::ChannelData, SQLPool}; +use serenity::futures::TryFutureExt; type CommandFn = for<'fut> fn(&'fut Context, &'fut Message, String) -> BoxFuture<'fut, CommandResult>; @@ -45,6 +46,21 @@ impl Command { if self.required_perms == PermissionLevel::Unrestricted { true } else { + if member + .permissions(&ctx) + .map_ok_or_else( + |_| false, + |perms| { + perms.manage_guild() + || (self.required_perms == PermissionLevel::Managed + && perms.manage_messages()) + }, + ) + .await + { + return true; + } + for role_id in &member.roles { let role = role_id.to_role_cached(&ctx).await;