this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: Allow banning users by ID instead of just crashing (#21)

* fix: Allows banning users by ID instead of just crashing

* feat: Add success message for ban

authored by

BatteredBunny and committed by
GitHub
873f292d 72145197

+29 -35
+29 -35
src/commands/moderation/ban.rs
··· 1 1 use crate::Result; 2 2 use poise::serenity_prelude::all::User; 3 + use poise::serenity_prelude::RoleId; 3 4 4 5 use crate::types::Context; 5 6 ··· 16 17 .get_guild(ctx.guild_id().unwrap()) 17 18 .await?; 18 19 19 - let user_member = guild.member(ctx, user.id).await.unwrap(); 20 20 let bot_member = guild.member(ctx, ctx.framework().bot_id).await.unwrap(); 21 21 let author_member = guild.member(ctx, ctx.author()).await.unwrap(); 22 22 23 - let user_highest_role = user_member 24 - .roles 25 - .iter() 26 - .filter_map(|role| guild.roles.get(role)) 27 - .max_by_key(|role| role.position); 23 + // Only check perms if user is in guild 24 + if let Ok(user_member) = guild.member(ctx, &user).await { 25 + let get_role_pos = |roles: &[RoleId]| { 26 + roles.iter() 27 + .filter_map(|role| guild.roles.get(role)) 28 + .max_by_key(|role| role.position) 29 + }; 28 30 29 - let author_highest_role = author_member 30 - .roles 31 - .iter() 32 - .filter_map(|role| guild.roles.get(role)) 33 - .max_by_key(|role| role.position); 31 + let user_highest_role = get_role_pos(&user_member.roles); 32 + let author_highest_role = get_role_pos(&author_member.roles); 33 + let bot_highest_role = get_role_pos(&bot_member.roles); 34 34 35 - let bot_highest_role = bot_member 36 - .roles 37 - .iter() 38 - .filter_map(|role| guild.roles.get(role)) 39 - .max_by_key(|role| role.position); 35 + if author_highest_role < user_highest_role { 36 + ctx.say("User has higher role than you.").await?; 37 + return Ok(()); 38 + } 39 + 40 + if bot_highest_role < user_highest_role { 41 + ctx.say("User has higher role than bot!").await?; 42 + return Ok(()); 43 + } 44 + } 40 45 41 46 if !guild 42 47 .user_permissions_in( 43 48 &ctx.guild_channel().await.unwrap(), 44 - &guild.member(ctx, ctx.framework().bot_id).await.unwrap(), 49 + &bot_member, 45 50 ) 46 51 .ban_members() 47 52 { ··· 49 54 return Ok(()); 50 55 } 51 56 52 - if author_highest_role < user_highest_role { 53 - ctx.say("User has higher role then you.").await?; 54 - return Ok(()); 55 - } 56 - 57 - if bot_highest_role < user_highest_role { 58 - ctx.say("User has higher role then bot!").await?; 59 - return Ok(()); 60 - } 57 + guild.ban_with_reason( 58 + ctx, 59 + &user, 60 + delete_messages_day_count.unwrap_or(0), 61 + &reason.unwrap_or("No reason provided.".to_string()) 62 + ).await?; 61 63 62 - guild 63 - .member(ctx, user.id) 64 - .await? 65 - .ban_with_reason( 66 - ctx, 67 - delete_messages_day_count.unwrap_or(0), 68 - &reason.unwrap_or("No reason provided.".to_string()), 69 - ) 70 - .await?; 64 + ctx.say(format!("Banned user {user}.")).await?; 71 65 72 66 Ok(()) 73 67 }