From 470f366000b3d3f8080e02b185f0f7fef592a736 Mon Sep 17 00:00:00 2001 From: Lakelezz <12222135+Lakelezz@users.noreply.github.com> Date: Wed, 10 Jan 2018 17:12:20 +0100 Subject: Add missing `correct roles`-checks in help-commands (#249) --- src/framework/standard/help_commands.rs | 60 +++++++++++++++++++++++++++++++-- src/framework/standard/mod.rs | 6 +++- 2 files changed, 62 insertions(+), 4 deletions(-) (limited to 'src/framework') 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( 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( 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, message: &Message) #[cfg(feature = "cache")] pub fn has_correct_roles(cmd: &Arc, 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 -- cgit v1.2.3