diff options
| author | Zeyla Hellyer <[email protected]> | 2018-01-27 18:53:48 -0800 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2018-01-27 18:53:48 -0800 |
| commit | 92c91b81490b621de4519e0d87830dbce53dd689 (patch) | |
| tree | d8d601c5d788ae01e6c34b000e32ce57e970f884 /src | |
| parent | Add `Message::member` (diff) | |
| download | serenity-92c91b81490b621de4519e0d87830dbce53dd689.tar.xz serenity-92c91b81490b621de4519e0d87830dbce53dd689.zip | |
Check message ID count in `delete_messages`
In models' `delete_messages` methods, check the number of messages being
deleted. If 0 or more than 100, return a `ModelError::BulkDeleteAmount`,
as this amount would result in an invalid request.
Diffstat (limited to 'src')
| -rw-r--r-- | src/model/channel/channel_id.rs | 15 | ||||
| -rw-r--r-- | src/model/channel/group.rs | 9 | ||||
| -rw-r--r-- | src/model/channel/guild_channel.rs | 9 | ||||
| -rw-r--r-- | src/model/channel/private_channel.rs | 9 |
4 files changed, 29 insertions, 13 deletions
diff --git a/src/model/channel/channel_id.rs b/src/model/channel/channel_id.rs index bd9cc84..00dc1f2 100644 --- a/src/model/channel/channel_id.rs +++ b/src/model/channel/channel_id.rs @@ -112,20 +112,27 @@ impl ChannelId { /// /// Requires the [Manage Messages] permission. /// - /// **Note**: This uses bulk delete endpoint which is not available - /// for user accounts. + /// **Note**: Messages that are older than 2 weeks can't be deleted using + /// this method. /// - /// **Note**: Messages that are older than 2 weeks can't be deleted using this method. + /// # Errors + /// + /// Returns [`ModelError::BulkDeleteAmount`] if an attempt was made to + /// delete either 0 or more than 100 messages. /// /// [`Channel::delete_messages`]: enum.Channel.html#method.delete_messages + /// [`ModelError::BulkDeleteAmount`]: ../enum.ModelError.html#variant.BulkDeleteAmount /// [Manage Messages]: permissions/constant.MANAGE_MESSAGES.html pub fn delete_messages<T: AsRef<MessageId>, It: IntoIterator<Item=T>>(&self, message_ids: It) -> Result<()> { let ids = message_ids .into_iter() .map(|message_id| message_id.as_ref().0) .collect::<Vec<u64>>(); + let len = ids.len(); - if ids.len() == 1 { + if len == 0 || len > 100 { + return Err(Error::Model(ModelError::BulkDeleteAmount)); + } else if ids.len() == 1 { self.delete_message(ids[0]) } else { let map = json!({ "messages": ids }); diff --git a/src/model/channel/group.rs b/src/model/channel/group.rs index 0ee2a71..840234d 100644 --- a/src/model/channel/group.rs +++ b/src/model/channel/group.rs @@ -88,13 +88,16 @@ impl Group { /// /// Requires the [Manage Messages] permission. /// - /// **Note**: This uses bulk delete endpoint which is not available - /// for user accounts. - /// /// **Note**: Messages that are older than 2 weeks can't be deleted using /// this method. /// + /// # Errors + /// + /// Returns [`ModelError::BulkDeleteAmount`] if an attempt was made to + /// delete either 0 or more than 100 messages. + /// /// [`Channel::delete_messages`]: enum.Channel.html#method.delete_messages + /// [`ModelError::BulkDeleteAmount`]: ../enum.ModelError.html#variant.BulkDeleteAmount /// [Manage Messages]: permissions/constant.MANAGE_MESSAGES.html #[inline] pub fn delete_messages<T: AsRef<MessageId>, It: IntoIterator<Item=T>>(&self, message_ids: It) -> Result<()> { diff --git a/src/model/channel/guild_channel.rs b/src/model/channel/guild_channel.rs index 785ba8a..9b7d431 100644 --- a/src/model/channel/guild_channel.rs +++ b/src/model/channel/guild_channel.rs @@ -250,13 +250,16 @@ impl GuildChannel { /// /// Requires the [Manage Messages] permission. /// - /// **Note**: This uses bulk delete endpoint which is not available - /// for user accounts. - /// /// **Note**: Messages that are older than 2 weeks can't be deleted using /// this method. /// + /// # Errors + /// + /// Returns [`ModelError::BulkDeleteAmount`] if an attempt was made to + /// delete either 0 or more than 100 messages. + /// /// [`Channel::delete_messages`]: enum.Channel.html#method.delete_messages + /// [`ModelError::BulkDeleteAmount`]: ../enum.ModelError.html#variant.BulkDeleteAmount /// [Manage Messages]: permissions/constant.MANAGE_MESSAGES.html #[inline] pub fn delete_messages<T: AsRef<MessageId>, It: IntoIterator<Item=T>>(&self, message_ids: It) -> Result<()> { diff --git a/src/model/channel/private_channel.rs b/src/model/channel/private_channel.rs index 3bae61d..f22a225 100644 --- a/src/model/channel/private_channel.rs +++ b/src/model/channel/private_channel.rs @@ -71,13 +71,16 @@ impl PrivateChannel { /// /// Requires the [Manage Messages] permission. /// - /// **Note**: This uses bulk delete endpoint which is not available - /// for user accounts. - /// /// **Note**: Messages that are older than 2 weeks can't be deleted using /// this method. /// + /// # Errors + /// + /// Returns [`ModelError::BulkDeleteAmount`] if an attempt was made to + /// delete either 0 or more than 100 messages. + /// /// [`Channel::delete_messages`]: enum.Channel.html#method.delete_messages + /// [`ModelError::BulkDeleteAmount`]: ../enum.ModelError.html#variant.BulkDeleteAmount /// [Manage Messages]: permissions/constant.MANAGE_MESSAGES.html #[inline] pub fn delete_messages<T: AsRef<MessageId>, It: IntoIterator<Item=T>>(&self, message_ids: It) -> Result<()> { |