aboutsummaryrefslogtreecommitdiff
path: root/src/framework/standard/mod.rs
diff options
context:
space:
mode:
authorLakelezz <[email protected]>2017-09-05 15:16:05 +0200
committeralex <[email protected]>2017-09-05 15:16:05 +0200
commitd925f926c0f9f5b8010a998570441258417fc89a (patch)
tree3496f5f6f8ef0310a91ed90a8366e0ecb555181e /src/framework/standard/mod.rs
parentmatch to map/? (diff)
downloadserenity-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.rs18
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)
});