diff options
| author | Lakelezz <[email protected]> | 2017-09-05 15:16:05 +0200 |
|---|---|---|
| committer | alex <[email protected]> | 2017-09-05 15:16:05 +0200 |
| commit | d925f926c0f9f5b8010a998570441258417fc89a (patch) | |
| tree | 3496f5f6f8ef0310a91ed90a8366e0ecb555181e /src/framework/standard/mod.rs | |
| parent | match to map/? (diff) | |
| download | serenity-d925f926c0f9f5b8010a998570441258417fc89a.tar.xz serenity-d925f926c0f9f5b8010a998570441258417fc89a.zip | |
Allow commands to be limited to certain roles (#157)
Diffstat (limited to 'src/framework/standard/mod.rs')
| -rw-r--r-- | src/framework/standard/mod.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/framework/standard/mod.rs b/src/framework/standard/mod.rs index a8570e6..4fc728d 100644 --- a/src/framework/standard/mod.rs +++ b/src/framework/standard/mod.rs @@ -126,6 +126,8 @@ pub enum DispatchError { OnlyForGuilds, /// When the requested command can only be used by bot owners. OnlyForOwners, + /// When the requested command requires one role. + LackingRole, /// When there are too few arguments. NotEnoughArguments { min: i32, given: usize }, /// When there are too many arguments. @@ -521,6 +523,22 @@ impl StandardFramework { } else if self.configuration.disabled_commands.contains(built) { Some(DispatchError::CommandDisabled(built.to_owned())) } else { + if command.allowed_roles.len() > 0 { + 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); + } + } + } + } + let all_passed = command.checks.iter().all(|check| { check(&mut context, message, args, command) }); |