diff --git a/src/commands/moderation/ban.rs b/src/commands/moderation/ban.rs index 408fd04..1c53f8b 100644 --- a/src/commands/moderation/ban.rs +++ b/src/commands/moderation/ban.rs @@ -82,10 +82,19 @@ impl SlashCommand for Ban { command.create_response(&ctx.http, response).await?; return Ok(()); } - let target_role: &Role = guild.member_highest_role(&target_member).unwrap(); - let executor_role: &Role = guild.member_highest_role(&executor_member).unwrap(); - let bot_role: &Role = guild.member_highest_role(&bot_member).unwrap(); - if target_role > executor_role || target_role > bot_role || target_id == guild.owner_id { + let target_role_pos: u16 = guild + .member_highest_role(&target_member) + .map(|r| r.position) + .unwrap_or(0); + let executor_role_pos: u16 = guild + .member_highest_role(&executor_member) + .map(|r| r.position) + .unwrap_or(0); + let bot_role_pos: u16 = guild + .member_highest_role(&bot_member) + .map(|r| r.position) + .unwrap_or(0); + if target_role_pos > executor_role_pos || target_role_pos > bot_role_pos || target_id == guild.owner_id { let message: CreateInteractionResponseMessage = CreateInteractionResponseMessage::new() .content(format!("{} | You cannot ban this user because they are hierarchically above you", _emoji.answer.error)) .ephemeral(true); diff --git a/src/commands/moderation/kick.rs b/src/commands/moderation/kick.rs index efc8942..b4390d9 100644 --- a/src/commands/moderation/kick.rs +++ b/src/commands/moderation/kick.rs @@ -82,10 +82,19 @@ impl SlashCommand for Kick { command.create_response(&ctx.http, response).await?; return Ok(()); } - let target_role: &Role = guild.member_highest_role(&target_member).unwrap(); - let executor_role: &Role = guild.member_highest_role(&executor_member).unwrap(); - let bot_role: &Role = guild.member_highest_role(&bot_member).unwrap(); - if target_role > executor_role || target_role > bot_role || target_id == guild.owner_id { + let target_role_pos: u16 = guild + .member_highest_role(&target_member) + .map(|r| r.position) + .unwrap_or(0); + let executor_role_pos: u16 = guild + .member_highest_role(&executor_member) + .map(|r| r.position) + .unwrap_or(0); + let bot_role_pos: u16 = guild + .member_highest_role(&bot_member) + .map(|r| r.position) + .unwrap_or(0); + if target_role_pos > executor_role_pos || target_role_pos > bot_role_pos || target_id == guild.owner_id { let message: CreateInteractionResponseMessage = CreateInteractionResponseMessage::new() .content(format!("{} | You cannot kick this user because they are hierarchically above you", _emoji.answer.error)) .ephemeral(true);