diff --git a/src/api/guilds/roles.rs b/src/api/guilds/roles.rs index eb837c9..02994f9 100644 --- a/src/api/guilds/roles.rs +++ b/src/api/guilds/roles.rs @@ -160,4 +160,33 @@ impl types::RoleObject { .deserialize_response::(user) .await } + + /// Deletes a guild role. Requires the `MANAGE_ROLES` permission. Returns a 204 empty response on success. + /// + /// # Reference: + /// See + pub async fn delete_role( + user: &mut ChorusUser, + guild_id: Snowflake, + role_id: Snowflake, + audit_log_reason: Option, + ) -> ChorusResult<()> { + let url = format!( + "{}/guilds/{}/roles/{}", + user.belongs_to.borrow_mut().urls.api, + guild_id, + role_id + ); + + let request = ChorusRequest::new( + http::Method::DELETE, + &url, + None, + audit_log_reason.as_deref(), + None, + Some(user), + LimitType::Guild(guild_id), + ); + request.handle_request_as_result(user).await + } } diff --git a/tests/roles.rs b/tests/roles.rs index 7876e5d..8691138 100644 --- a/tests/roles.rs +++ b/tests/roles.rs @@ -1,4 +1,4 @@ -use chorus::types::{self, RoleCreateModifySchema}; +use chorus::types::{self, RoleCreateModifySchema, RoleObject}; mod common; @@ -32,7 +32,7 @@ async fn create_and_get_roles() { } #[tokio::test] -async fn get_singular_role() { +async fn get_and_delete_role() { let mut bundle = common::setup().await; let guild_id = bundle.guild.read().unwrap().id; let role_id = bundle.role.read().unwrap().id; @@ -41,5 +41,22 @@ async fn get_singular_role() { .await .unwrap(); assert_eq!(role, same_role); + assert_eq!( + chorus::types::RoleObject::get_all(&mut bundle.user, guild_id) + .await + .unwrap() + .len(), + 2 + ); + RoleObject::delete_role(&mut bundle.user, guild_id, role_id, None) + .await + .unwrap(); + assert_eq!( + chorus::types::RoleObject::get_all(&mut bundle.user, guild_id) + .await + .unwrap() + .len(), + 1 + ); common::teardown(bundle).await }