aboutsummaryrefslogtreecommitdiff
path: root/src/framework
diff options
context:
space:
mode:
authorLakelezz <[email protected]>2018-01-10 17:12:20 +0100
committeralex <[email protected]>2018-01-10 17:12:20 +0100
commit470f366000b3d3f8080e02b185f0f7fef592a736 (patch)
treeb1b5a9243db95a7cb563e6b79d292b44389fca97 /src/framework
parentAllow channels to be moved in and out of a category (#248) (diff)
downloadserenity-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.rs60
-rw-r--r--src/framework/standard/mod.rs6
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