From 830858cde8c67fcb4e2a5884be389a4107369e5b Mon Sep 17 00:00:00 2001 From: Rapptz Date: Sun, 28 Sep 2025 13:17:54 -0400 Subject: [PATCH] Add MessageType.is_deletable to fix Messageable.purge failing Fix #10319 --- discord/abc.py | 3 +++ discord/enums.py | 10 ++++++++++ docs/api.rst | 9 +++++++++ 3 files changed, 22 insertions(+) diff --git a/discord/abc.py b/discord/abc.py index 535c70aba..5f06fb1ce 100644 --- a/discord/abc.py +++ b/discord/abc.py @@ -195,6 +195,9 @@ async def _purge_helper( count = 0 await asyncio.sleep(1) + if not message.type.is_deletable(): + continue + if not check(message): continue diff --git a/discord/enums.py b/discord/enums.py index 0f1d02695..d691e6b48 100644 --- a/discord/enums.py +++ b/discord/enums.py @@ -279,6 +279,16 @@ class MessageType(Enum): poll_result = 46 emoji_added = 63 + def is_deletable(self) -> bool: + return self not in { + MessageType.recipient_add, + MessageType.recipient_remove, + MessageType.call, + MessageType.channel_name_change, + MessageType.channel_icon_change, + MessageType.thread_starter_message, + } + class SpeakingState(Enum): none = 0 diff --git a/docs/api.rst b/docs/api.rst index 1a8365d81..495636b12 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -1732,6 +1732,15 @@ of :class:`enum.Enum`. Checks if two messages are not equal. + .. method:: is_deletable() + + Checks if the message type is deletable, as some system messages cannot be deleted. + + .. versionadded:: 2.7 + + :return: A boolean denoting if the message type is deletable. + :rtype: :class:`bool` + .. attribute:: default The default message type. This is the same as regular messages.