aboutsummaryrefslogtreecommitdiff
path: root/src/framework/standard/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/framework/standard/mod.rs')
-rw-r--r--src/framework/standard/mod.rs21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/framework/standard/mod.rs b/src/framework/standard/mod.rs
index 601c118..7156186 100644
--- a/src/framework/standard/mod.rs
+++ b/src/framework/standard/mod.rs
@@ -22,7 +22,7 @@ use std::default::Default;
use std::sync::Arc;
use client::Context;
use super::Framework;
-use model::{ChannelId, GuildId, Message, UserId};
+use model::{ChannelId, GuildId, Guild, Member, Message, UserId};
use model::permissions::Permissions;
use internal::RwLockExt;
@@ -514,12 +514,7 @@ impl StandardFramework {
if let Some(member) = guild.members.get(&message.author.id) {
if let Ok(permissions) = member.permissions() {
if !permissions.administrator() {
- let right_role = command
- .allowed_roles
- .iter()
- .flat_map(|r| guild.role_by_name(r))
- .any(|g| member.roles.contains(&g.id));
- if !right_role {
+ if !has_correct_roles(&command, &guild, &member) {
return Some(DispatchError::LackingRole);
}
}
@@ -947,7 +942,7 @@ impl Framework for StandardFramework {
}
#[cfg(feature = "cache")]
-pub(crate) fn has_correct_permissions(command: &Arc<Command>, message: &Message) -> bool {
+pub(crate) fn has_correct_permissions(command: &Command, message: &Message) -> bool {
if !command.required_permissions.is_empty() {
if let Some(guild) = message.guild() {
let perms = guild
@@ -958,4 +953,12 @@ pub(crate) fn has_correct_permissions(command: &Arc<Command>, message: &Message)
}
true
-} \ No newline at end of file
+}
+
+#[cfg(feature = "cache")]
+pub(crate) fn has_correct_roles(cmd: &Command, guild: &Guild, member: &Member) -> bool {
+ cmd.allowed_roles
+ .iter()
+ .flat_map(|r| guild.role_by_name(r))
+ .any(|g| member.roles.contains(&g.id))
+}