aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2018-01-27 18:53:48 -0800
committerZeyla Hellyer <[email protected]>2018-01-27 18:53:48 -0800
commit92c91b81490b621de4519e0d87830dbce53dd689 (patch)
treed8d601c5d788ae01e6c34b000e32ce57e970f884 /src
parentAdd `Message::member` (diff)
downloadserenity-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.rs15
-rw-r--r--src/model/channel/group.rs9
-rw-r--r--src/model/channel/guild_channel.rs9
-rw-r--r--src/model/channel/private_channel.rs9
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<()> {