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, MessageUpdateEvent,
IntegrationDeleteEvent, IntegrationDeleteEvent,
ThreadDeleteEvent, ThreadDeleteEvent,
ThreadMembersUpdate,
) )
from .message import Message from .message import Message
from .partial_emoji import PartialEmoji from .partial_emoji import PartialEmoji
@ -57,6 +58,7 @@ __all__ = (
'RawReactionClearEmojiEvent', 'RawReactionClearEmojiEvent',
'RawIntegrationDeleteEvent', 'RawIntegrationDeleteEvent',
'RawThreadDeleteEvent', 'RawThreadDeleteEvent',
'RawThreadMembersUpdate',
) )
@ -314,3 +316,29 @@ class RawThreadDeleteEvent(_RawReprMixin):
self.guild_id: int = int(data['guild_id']) self.guild_id: int = int(data['guild_id'])
self.parent_id: int = int(data['parent_id']) self.parent_id: int = int(data['parent_id'])
self.thread: Optional[Thread] = None 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_id = int(data['id'])
thread: Optional[Thread] = guild.get_thread(thread_id) thread: Optional[Thread] = guild.get_thread(thread_id)
raw = RawThreadMembersUpdate(data)
if thread is None: if thread is None:
_log.debug('THREAD_MEMBERS_UPDATE referencing an unknown thread ID: %s. Discarding.', thread_id) _log.debug('THREAD_MEMBERS_UPDATE referencing an unknown thread ID: %s. Discarding.', thread_id)
return return
@ -1693,6 +1694,7 @@ class ConnectionState:
for member_id in removed_member_ids: for member_id in removed_member_ids:
member = thread._pop_member(member_id) member = thread._pop_member(member_id)
if member_id != self_id: if member_id != self_id:
self.dispatch('raw_thread_member_remove', raw)
if member is not None: if member is not None:
self.dispatch('thread_member_remove', member) self.dispatch('thread_member_remove', member)
else: else:

17
docs/api.rst

@ -1323,8 +1323,6 @@ Threads
Called whenever a thread is deleted. Unlike :func:`on_thread_delete` this 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. 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 .. versionadded:: 2.0
:param payload: The raw event payload data. :param payload: The raw event payload data.
@ -1342,6 +1340,16 @@ Threads
:param member: The member who joined or left. :param member: The member who joined or left.
:type member: :class:`ThreadMember` :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 Voice
~~~~~~ ~~~~~~
@ -6836,6 +6844,11 @@ RawEvent
.. autoclass:: RawIntegrationDeleteEvent() .. autoclass:: RawIntegrationDeleteEvent()
:members: :members:
.. attributetable:: RawThreadMembersUpdate
.. autoclass:: RawThreadMembersUpdate()
:members:
.. attributetable:: RawThreadDeleteEvent .. attributetable:: RawThreadDeleteEvent
.. autoclass:: RawThreadDeleteEvent() .. autoclass:: RawThreadDeleteEvent()

Loading…
Cancel
Save