diff --git a/src/api/v1/members/uuid/mod.rs b/src/api/v1/members/uuid/mod.rs index 244f5f8..734572e 100644 --- a/src/api/v1/members/uuid/mod.rs +++ b/src/api/v1/members/uuid/mod.rs @@ -51,7 +51,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 8678f4a..ae3b3ef 100644 --- a/src/objects/member.rs +++ b/src/objects/member.rs @@ -188,6 +188,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 ea70686..5a57e5c 100644 --- a/src/objects/role.rs +++ b/src/objects/role.rs @@ -176,6 +176,8 @@ pub enum Permissions { ManageGuild = 32, /// Lets users change member settings (nickname, etc) ManageMember = 64, + /// Lets users kick members + KickMember = 256, } impl Permissions { @@ -188,6 +190,7 @@ impl Permissions { Self::ManageInvite, Self::ManageGuild, Self::ManageMember, + Self::KickMember, ]; all_perms