Browse Source

Add on_raw_thread_member_remove event

pull/10109/head
Enes Kurbetoğlu 3 years ago
committed by dolfies
parent
commit
77cf753089
  1. 28
      discord/raw_models.py
  2. 2
      discord/state.py
  3. 17
      docs/api.rst

28
discord/raw_models.py

@ -39,6 +39,7 @@ if TYPE_CHECKING:
MessageUpdateEvent,
IntegrationDeleteEvent,
ThreadDeleteEvent,
ThreadMembersUpdate,
)
from .message import Message
from .partial_emoji import PartialEmoji
@ -57,6 +58,7 @@ __all__ = (
'RawReactionClearEmojiEvent',
'RawIntegrationDeleteEvent',
'RawThreadDeleteEvent',
'RawThreadMembersUpdate',
)
@ -314,3 +316,29 @@ class RawThreadDeleteEvent(_RawReprMixin):
self.guild_id: int = int(data['guild_id'])
self.parent_id: int = int(data['parent_id'])
self.thread: Optional[Thread] = None
class RawThreadMembersUpdate(_RawReprMixin):
"""Represents the payload for a :func:`on_raw_thread_member_remove` event.
.. versionadded:: 2.0
Attributes
----------
thread_id: :class:`int`
The ID of the thread that was updated.
guild_id: :class:`int`
The ID of the guild the thread is in.
member_count: :class:`int`
The approximate number of members in the thread. This caps at 50.
data: :class:`dict`
The raw data given by the :ddocs:`gateway <topics/gateway#thread-members-update>`.
"""
__slots__ = ('thread_id', 'guild_id', 'member_count', 'data')
def __init__(self, data: ThreadMembersUpdate) -> None:
self.thread_id: int = int(data['id'])
self.guild_id: int = int(data['guild_id'])
self.member_count: int = int(data['member_count'])
self.data: ThreadMembersUpdate = data

2
discord/state.py

@ -1675,6 +1675,7 @@ class ConnectionState:
thread_id = int(data['id'])
thread: Optional[Thread] = guild.get_thread(thread_id)
raw = RawThreadMembersUpdate(data)
if thread is None:
_log.debug('THREAD_MEMBERS_UPDATE referencing an unknown thread ID: %s. Discarding.', thread_id)
return
@ -1693,6 +1694,7 @@ class ConnectionState:
for member_id in removed_member_ids:
member = thread._pop_member(member_id)
if member_id != self_id:
self.dispatch('raw_thread_member_remove', raw)
if member is not None:
self.dispatch('thread_member_remove', member)
else:

17
docs/api.rst

@ -1323,8 +1323,6 @@ Threads
Called whenever a thread is deleted. Unlike :func:`on_thread_delete` this
is called regardless of the thread being in the internal thread cache or not.
This requires :attr:`Intents.guilds` to be enabled.
.. versionadded:: 2.0
:param payload: The raw event payload data.
@ -1342,6 +1340,16 @@ Threads
:param member: The member who joined or left.
:type member: :class:`ThreadMember`
.. function:: on_raw_thread_member_remove(payload)
Called when a :class:`ThreadMember` leaves a :class:`Thread`. Unlike :func:`on_thread_member_remove` this
is called regardless of the member being in the internal thread's members cache or not.
.. versionadded:: 2.0
:param payload: The raw event payload data.
:type member: :class:`RawThreadMembersUpdate`
Voice
~~~~~~
@ -6836,6 +6844,11 @@ RawEvent
.. autoclass:: RawIntegrationDeleteEvent()
:members:
.. attributetable:: RawThreadMembersUpdate
.. autoclass:: RawThreadMembersUpdate()
:members:
.. attributetable:: RawThreadDeleteEvent
.. autoclass:: RawThreadDeleteEvent()

Loading…
Cancel
Save