mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-06-07 04:17:16 +00:00
Add reason param to purge and delete_messages
Co-authored-by: Danny <Rapptz@users.noreply.github.com>
This commit is contained in:
parent
8226f0df2c
commit
86797dd9ab
@ -89,7 +89,7 @@ if TYPE_CHECKING:
|
|||||||
from .types.snowflake import SnowflakeList
|
from .types.snowflake import SnowflakeList
|
||||||
|
|
||||||
|
|
||||||
async def _single_delete_strategy(messages: Iterable[Message]):
|
async def _single_delete_strategy(messages: Iterable[Message], *, reason: Optional[str] = None):
|
||||||
for m in messages:
|
for m in messages:
|
||||||
await m.delete()
|
await m.delete()
|
||||||
|
|
||||||
@ -360,7 +360,7 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
|
|||||||
{'topic': self.topic, 'nsfw': self.nsfw, 'rate_limit_per_user': self.slowmode_delay}, name=name, reason=reason
|
{'topic': self.topic, 'nsfw': self.nsfw, 'rate_limit_per_user': self.slowmode_delay}, name=name, reason=reason
|
||||||
)
|
)
|
||||||
|
|
||||||
async def delete_messages(self, messages: Iterable[Snowflake], /) -> None:
|
async def delete_messages(self, messages: Iterable[Snowflake], *, reason: Optional[str] = None) -> None:
|
||||||
"""|coro|
|
"""|coro|
|
||||||
|
|
||||||
Deletes a list of messages. This is similar to :meth:`Message.delete`
|
Deletes a list of messages. This is similar to :meth:`Message.delete`
|
||||||
@ -380,10 +380,14 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
|
|||||||
|
|
||||||
``messages`` parameter is now positional-only.
|
``messages`` parameter is now positional-only.
|
||||||
|
|
||||||
|
The ``reason`` keyword-only parameter was added.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
-----------
|
-----------
|
||||||
messages: Iterable[:class:`abc.Snowflake`]
|
messages: Iterable[:class:`abc.Snowflake`]
|
||||||
An iterable of messages denoting which ones to bulk delete.
|
An iterable of messages denoting which ones to bulk delete.
|
||||||
|
reason: Optional[:class:`str`]
|
||||||
|
The reason for deleting the messages. Shows up on the audit log.
|
||||||
|
|
||||||
Raises
|
Raises
|
||||||
------
|
------
|
||||||
@ -411,7 +415,7 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
|
|||||||
raise ClientException('Can only bulk delete messages up to 100 messages')
|
raise ClientException('Can only bulk delete messages up to 100 messages')
|
||||||
|
|
||||||
message_ids: SnowflakeList = [m.id for m in messages]
|
message_ids: SnowflakeList = [m.id for m in messages]
|
||||||
await self._state.http.delete_messages(self.id, message_ids)
|
await self._state.http.delete_messages(self.id, message_ids, reason=reason)
|
||||||
|
|
||||||
async def purge(
|
async def purge(
|
||||||
self,
|
self,
|
||||||
@ -423,6 +427,7 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
|
|||||||
around: Optional[SnowflakeTime] = None,
|
around: Optional[SnowflakeTime] = None,
|
||||||
oldest_first: Optional[bool] = False,
|
oldest_first: Optional[bool] = False,
|
||||||
bulk: bool = True,
|
bulk: bool = True,
|
||||||
|
reason: Optional[str] = None,
|
||||||
) -> List[Message]:
|
) -> List[Message]:
|
||||||
"""|coro|
|
"""|coro|
|
||||||
|
|
||||||
@ -435,6 +440,10 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
|
|||||||
The :attr:`~Permissions.read_message_history` permission is
|
The :attr:`~Permissions.read_message_history` permission is
|
||||||
also needed to retrieve message history.
|
also needed to retrieve message history.
|
||||||
|
|
||||||
|
.. versionchanged:: 2.0
|
||||||
|
|
||||||
|
The ``reason`` keyword-only parameter was added.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
---------
|
---------
|
||||||
|
|
||||||
@ -466,6 +475,8 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
|
|||||||
If ``True``, use bulk delete. Setting this to ``False`` is useful for mass-deleting
|
If ``True``, use bulk delete. Setting this to ``False`` is useful for mass-deleting
|
||||||
a bot's own messages without :attr:`Permissions.manage_messages`. When ``True``, will
|
a bot's own messages without :attr:`Permissions.manage_messages`. When ``True``, will
|
||||||
fall back to single delete if messages are older than two weeks.
|
fall back to single delete if messages are older than two weeks.
|
||||||
|
reason: Optional[:class:`str`]
|
||||||
|
The reason for purging the messages. Shows up on the audit log.
|
||||||
|
|
||||||
Raises
|
Raises
|
||||||
-------
|
-------
|
||||||
@ -493,7 +504,7 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
|
|||||||
async for message in iterator:
|
async for message in iterator:
|
||||||
if count == 100:
|
if count == 100:
|
||||||
to_delete = ret[-100:]
|
to_delete = ret[-100:]
|
||||||
await strategy(to_delete)
|
await strategy(to_delete, reason=reason)
|
||||||
count = 0
|
count = 0
|
||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
@ -506,7 +517,7 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
|
|||||||
await ret[-1].delete()
|
await ret[-1].delete()
|
||||||
elif count >= 2:
|
elif count >= 2:
|
||||||
to_delete = ret[-count:]
|
to_delete = ret[-count:]
|
||||||
await strategy(to_delete)
|
await strategy(to_delete, reason=reason)
|
||||||
|
|
||||||
count = 0
|
count = 0
|
||||||
strategy = _single_delete_strategy
|
strategy = _single_delete_strategy
|
||||||
@ -514,11 +525,11 @@ class TextChannel(discord.abc.Messageable, discord.abc.GuildChannel, Hashable):
|
|||||||
count += 1
|
count += 1
|
||||||
ret.append(message)
|
ret.append(message)
|
||||||
|
|
||||||
# SOme messages remaining to poll
|
# Some messages remaining to poll
|
||||||
if count >= 2:
|
if count >= 2:
|
||||||
# more than 2 messages -> bulk delete
|
# more than 2 messages -> bulk delete
|
||||||
to_delete = ret[-count:]
|
to_delete = ret[-count:]
|
||||||
await strategy(to_delete)
|
await strategy(to_delete, reason=reason)
|
||||||
elif count == 1:
|
elif count == 1:
|
||||||
# delete a single message
|
# delete a single message
|
||||||
await ret[-1].delete()
|
await ret[-1].delete()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user