diff options
| author | Lakelezz <[email protected]> | 2018-01-10 17:12:20 +0100 |
|---|---|---|
| committer | alex <[email protected]> | 2018-01-10 17:12:20 +0100 |
| commit | 470f366000b3d3f8080e02b185f0f7fef592a736 (patch) | |
| tree | b1b5a9243db95a7cb563e6b79d292b44389fca97 /src/framework | |
| parent | Allow channels to be moved in and out of a category (#248) (diff) | |
| download | serenity-470f366000b3d3f8080e02b185f0f7fef592a736.tar.xz serenity-470f366000b3d3f8080e02b185f0f7fef592a736.zip | |
Add missing `correct roles`-checks in help-commands (#249)
Diffstat (limited to 'src/framework')
| -rw-r--r-- | src/framework/standard/help_commands.rs | 60 | ||||
| -rw-r--r-- | src/framework/standard/mod.rs | 6 |
2 files changed, 62 insertions, 4 deletions
diff --git a/src/framework/standard/help_commands.rs b/src/framework/standard/help_commands.rs index 1dde04a..d740086 100644 --- a/src/framework/standard/help_commands.rs +++ b/src/framework/standard/help_commands.rs @@ -240,9 +240,38 @@ pub fn with_embeds<H: BuildHasher>( let cmd = cmd.options(); if !cmd.dm_only && !cmd.guild_only || cmd.dm_only && msg.is_private() || cmd.guild_only && !msg.is_private() { + if cmd.help_available && has_correct_permissions(&cmd, msg) { - let _ = write!(desc, "`{}`\n", name); - has_commands = true; + + if let Some(guild) = msg.guild() { + let guild = guild.read(); + + if let Some(member) = guild.members.get(&msg.author.id) { + + if has_correct_roles(&cmd, &guild, &member) { + let _ = write!(desc, "`{}`\n", name); + has_commands = true; + } else { + match help_options.lacking_role { + HelpBehaviour::Strike => { + let name = format!("~~`{}`~~", &name); + let _ = write!(desc, "{}\n", name); + has_commands = true; + }, + HelpBehaviour::Nothing => { + let _ = write!(desc, "`{}`\n", name); + has_commands = true; + }, + HelpBehaviour::Hide => { + continue; + }, + } + } + } + } else { + let _ = write!(desc, "`{}`\n", name); + has_commands = true; + } } else { match help_options.lacking_permissions { HelpBehaviour::Strike => { @@ -439,7 +468,32 @@ pub fn plain<H: BuildHasher>( if !cmd.dm_only && !cmd.guild_only || cmd.dm_only && msg.is_private() || cmd.guild_only && !msg.is_private() { if cmd.help_available && has_correct_permissions(&cmd, msg) { - let _ = write!(group_help, "`{}` ", name); + + if let Some(guild) = msg.guild() { + let guild = guild.read(); + + if let Some(member) = guild.members.get(&msg.author.id) { + + if has_correct_roles(&cmd, &guild, &member) { + let _ = write!(group_help, "`{}` ", name); + } else { + match help_options.lacking_role { + HelpBehaviour::Strike => { + let name = format!("~~`{}`~~", &name); + let _ = write!(group_help, "{} ", name); + }, + HelpBehaviour::Nothing => { + let _ = write!(group_help, "`{}` ", name); + }, + HelpBehaviour::Hide => { + continue; + }, + } + } + } + } else { + let _ = write!(group_help, "`{}` ", name); + } } else { match help_options.lacking_permissions { HelpBehaviour::Strike => { diff --git a/src/framework/standard/mod.rs b/src/framework/standard/mod.rs index 6fca88f..904ce97 100644 --- a/src/framework/standard/mod.rs +++ b/src/framework/standard/mod.rs @@ -1071,10 +1071,14 @@ pub fn has_correct_permissions(command: &Arc<CommandOptions>, message: &Message) #[cfg(feature = "cache")] pub fn has_correct_roles(cmd: &Arc<CommandOptions>, guild: &Guild, member: &Member) -> bool { - cmd.allowed_roles + if cmd.allowed_roles.is_empty() { + true + } else { + cmd.allowed_roles .iter() .flat_map(|r| guild.role_by_name(r)) .any(|g| member.roles.contains(&g.id)) + } } /// Describes the behaviour the help-command shall execute once it encounters |