diff options
| author | Lakelezz <[email protected]> | 2017-09-10 05:19:05 +0200 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-09-09 20:19:05 -0700 |
| commit | 2fb12e2b3782fff211a41cb27cd316afc4320a7b (patch) | |
| tree | 292cd3ea28b9b83388acdfa38e614836b25699cb /src/framework | |
| parent | Handle channel category deletion (diff) | |
| download | serenity-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.rs | 2 | ||||
| -rw-r--r-- | src/framework/standard/mod.rs | 20 |
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); + } + } } } } |