From a23363e0a38b8a8f85d7d98fd1b4dd1a4091e7cc Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Tue, 22 Aug 2023 22:32:48 +0200 Subject: [PATCH] add delete and bulk_delete endpoints --- src/api/channels/messages.rs | 56 ++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/api/channels/messages.rs b/src/api/channels/messages.rs index 05680b9..c0f6d7e 100644 --- a/src/api/channels/messages.rs +++ b/src/api/channels/messages.rs @@ -364,6 +364,62 @@ impl Message { }; chorus_request.deserialize_response::(user).await } + + /// Deletes a message. If operating on a guild channel and trying to delete a message that was not sent by the current user, + /// this endpoint requires the `MANAGE_MESSAGES` permission. Returns a 204 empty response on success. + pub async fn delete( + channel_id: Snowflake, + message_id: Snowflake, + user: &mut UserMeta, + ) -> ChorusResult<()> { + let chorus_request = ChorusRequest { + request: Client::new() + .delete(format!( + "{}/channels/{}/messages/{}", + user.belongs_to.borrow().urls.api, + channel_id, + message_id + )) + .header("Authorization", user.token()) + .header("Content-Type", "application/json"), + limit_type: LimitType::Channel(channel_id), + }; + chorus_request.handle_request_as_result(user).await + } + + /// Deletes multiple messages in a single request. This endpoint can only be used on guild channels and requires the MANAGE_MESSAGES permission. + /// Returns a 204 empty response on success. + /// + /// **This endpoint will not delete messages older than 2 weeks, and will fail if any message provided is older than that or if any duplicate message IDs are provided.** + /// + /// **This endpoint is not usable by user accounts.** (At least according to Discord.com. Spacebar behaviour may differ.) + /// + /// # Reference: + /// See: + pub async fn bulk_delete( + channel_id: Snowflake, + messages: Vec, + user: &mut UserMeta, + ) -> ChorusResult<()> { + if messages.len() < 2 { + return Err(ChorusError::InvalidArguments { + error: "`messages` must contain at least 2 entries.".to_string(), + }); + } + let chorus_request = ChorusRequest { + request: Client::new() + .post(format!( + "{}/channels/{}/messages/bulk-delete", + user.belongs_to.borrow().urls.api, + channel_id, + )) + .header("Authorization", user.token()) + .header("Content-Type", "application/json") + .body(to_string(&messages).unwrap()), + limit_type: LimitType::Channel(channel_id), + }; + chorus_request.handle_request_as_result(user).await + } } fn search_error(result_text: String) -> ChorusError {