aboutsummaryrefslogtreecommitdiff
path: root/src/framework
diff options
context:
space:
mode:
authorLakelezz <[email protected]>2017-09-10 05:19:05 +0200
committerZeyla Hellyer <[email protected]>2017-09-09 20:19:05 -0700
commit2fb12e2b3782fff211a41cb27cd316afc4320a7b (patch)
tree292cd3ea28b9b83388acdfa38e614836b25699cb /src/framework
parentHandle channel category deletion (diff)
downloadserenity-2fb12e2b3782fff211a41cb27cd316afc4320a7b.tar.xz
serenity-2fb12e2b3782fff211a41cb27cd316afc4320a7b.zip
Fixed admin bypass perm to framework allowed_roles
This makes those with the "Administrator" permission able to bypass the `allowed_roles` check. Additionally change a usage of `len() > 0` to `is_empty()`.
Diffstat (limited to 'src/framework')
-rw-r--r--src/framework/standard/help_commands.rs2
-rw-r--r--src/framework/standard/mod.rs20
2 files changed, 13 insertions, 9 deletions
diff --git a/src/framework/standard/help_commands.rs b/src/framework/standard/help_commands.rs
index c7004d5..72e0468 100644
--- a/src/framework/standard/help_commands.rs
+++ b/src/framework/standard/help_commands.rs
@@ -51,7 +51,7 @@ fn remove_aliases(cmds: &HashMap<String, CommandOrAlias>) -> HashMap<&String, &I
}
fn right_roles(cmd: &Command, guild: &Guild, member: &Member) -> bool {
- if cmd.allowed_roles.len() > 0 {
+ if !cmd.allowed_roles.is_empty() {
cmd.allowed_roles
.iter()
.flat_map(|r| guild.role_by_name(&r))
diff --git a/src/framework/standard/mod.rs b/src/framework/standard/mod.rs
index 4fc728d..bd1300d 100644
--- a/src/framework/standard/mod.rs
+++ b/src/framework/standard/mod.rs
@@ -523,17 +523,21 @@ impl StandardFramework {
} else if self.configuration.disabled_commands.contains(built) {
Some(DispatchError::CommandDisabled(built.to_owned()))
} else {
- if command.allowed_roles.len() > 0 {
+ if !command.allowed_roles.is_empty() {
if let Some(guild) = message.guild() {
let guild = guild.read().unwrap();
if let Some(member) = guild.members.get(&message.author.id) {
- 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 {
- return Some(DispatchError::LackingRole);
+ 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 {
+ return Some(DispatchError::LackingRole);
+ }
+ }
}
}
}