aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2017-06-29 14:06:12 -0400
committerRapptz <[email protected]>2017-06-29 14:06:12 -0400
commit64cba1165611ec86eaa23a27e1b81bcaf406b41b (patch)
tree9dec8fd403dfef287aa2c9e8861dbfc29f6839ba
parent[commands] Do not take up 'command' keyword-argument in Context.invoke. (diff)
downloaddiscord.py-64cba1165611ec86eaa23a27e1b81bcaf406b41b.tar.xz
discord.py-64cba1165611ec86eaa23a27e1b81bcaf406b41b.zip
Allow TextChannel.delete_messages to take lists of 0 or 1 element.
-rw-r--r--discord/channel.py30
1 files changed, 22 insertions, 8 deletions
diff --git a/discord/channel.py b/discord/channel.py
index 9a0489bc..8b2cdec2 100644
--- a/discord/channel.py
+++ b/discord/channel.py
@@ -167,11 +167,18 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
Deletes a list of messages. This is similar to :meth:`Message.delete`
except it bulk deletes multiple messages.
+ As a special case, if the number of messages is 0, then nothing
+ is done. If the number of messages is 1 then single message
+ delete is done. If it's more than two, then bulk delete is used.
+
+ You cannot bulk delete more than 100 messages or messages that
+ are older than 14 days old.
+
Usable only by bot accounts.
Parameters
-----------
- messages: iterable of :class:`Message`
+ messages: Iterable[:class:`abc.Snowflake`]
An iterable of messages denoting which ones to bulk delete.
reason: Optional[str]
The reason for bulk deleting these messages. Shows up on the audit log.
@@ -179,22 +186,29 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
Raises
------
ClientException
- The number of messages to delete is less than 2 or more than 100.
+ The number of messages to delete more than 100.
Forbidden
You do not have proper permissions to delete the messages or
you're not using a bot account.
HTTPException
Deleting the messages failed.
"""
+ if not isinstance(messages, (list, tuple)):
+ messages = list(messages)
- messages = list(messages)
- if len(messages) > 100 or len(messages) < 2:
- raise ClientException('Can only delete messages in the range of [2, 100]')
+ if len(messages) == 0:
+ return # do nothing
- message_ids = [m.id for m in messages]
- channel = yield from self._get_channel()
+ if len(messages) == 1:
+ message_id = messages[0].id
+ yield from self._state.http.delete_message(self.id, message_id, reason=reason)
+ return
- yield from self._state.http.delete_messages(channel.id, message_ids, reason=reason)
+ if len(messages) > 100:
+ raise ClientException('Can only bulk delete messages up to 100 messages')
+
+ message_ids = [m.id for m in messages]
+ yield from self._state.http.delete_messages(self.id, message_ids, reason=reason)
@asyncio.coroutine
def purge(self, *, limit=100, check=None, before=None, after=None, around=None, reason=None):