diff --git a/src/api/v1/members/uuid/mod.rs b/src/api/v1/members/uuid/mod.rs index 7c39bff..42a4418 100644 --- a/src/api/v1/members/uuid/mod.rs +++ b/src/api/v1/members/uuid/mod.rs @@ -53,7 +53,7 @@ pub async fn delete( let deleter = Member::check_membership(&mut conn, uuid, member.guild_uuid).await?; deleter - .check_permission(&app_state, Permissions::ManageMember) + .check_permission(&app_state, Permissions::KickMember) .await?; member.delete(&mut conn).await?; diff --git a/src/objects/member.rs b/src/objects/member.rs index 621097d..dc35e08 100644 --- a/src/objects/member.rs +++ b/src/objects/member.rs @@ -195,6 +195,9 @@ impl Member { } pub async fn delete(self, conn: &mut Conn) -> Result<(), Error> { + if self.is_owner { + return Err(Error::Forbidden("Can not kick owner".to_string())) + } delete(guild_members::table) .filter(guild_members::uuid.eq(self.uuid)) .execute(conn) diff --git a/src/objects/role.rs b/src/objects/role.rs index 7b078e5..4a4009b 100644 --- a/src/objects/role.rs +++ b/src/objects/role.rs @@ -176,8 +176,10 @@ pub enum Permissions { ManageGuild = 32, /// Lets users change member settings (nickname, etc) ManageMember = 64, - /// Lets user ban members + /// Lets users ban members BanMember = 128, + /// Lets users kick members + KickMember = 256, } impl Permissions { @@ -191,6 +193,7 @@ impl Permissions { Self::ManageGuild, Self::ManageMember, Self::BanMember, + Self::KickMember, ]; all_perms