Add thread and invite event parsing (#88)
This commit is contained in:
parent
3a264f4530
commit
a93ad432b7
@ -61,6 +61,11 @@ class EventDispatcher:
|
|||||||
"GUILD_ROLE_UPDATE": self._parse_guild_role_update,
|
"GUILD_ROLE_UPDATE": self._parse_guild_role_update,
|
||||||
"TYPING_START": self._parse_typing_start,
|
"TYPING_START": self._parse_typing_start,
|
||||||
"VOICE_STATE_UPDATE": self._parse_voice_state_update,
|
"VOICE_STATE_UPDATE": self._parse_voice_state_update,
|
||||||
|
"THREAD_CREATE": self._parse_thread_create,
|
||||||
|
"THREAD_UPDATE": self._parse_thread_update,
|
||||||
|
"THREAD_DELETE": self._parse_thread_delete,
|
||||||
|
"INVITE_CREATE": self._parse_invite_create,
|
||||||
|
"INVITE_DELETE": self._parse_invite_delete,
|
||||||
}
|
}
|
||||||
|
|
||||||
def _parse_message_create(self, data: Dict[str, Any]) -> Message:
|
def _parse_message_create(self, data: Dict[str, Any]) -> Message:
|
||||||
@ -165,6 +170,43 @@ class EventDispatcher:
|
|||||||
|
|
||||||
return GuildRoleUpdate(data, client_instance=self._client)
|
return GuildRoleUpdate(data, client_instance=self._client)
|
||||||
|
|
||||||
|
def _parse_thread_create(self, data: Dict[str, Any]):
|
||||||
|
"""Parses THREAD_CREATE into a Thread object and updates caches."""
|
||||||
|
|
||||||
|
return self._client.parse_channel(data)
|
||||||
|
|
||||||
|
def _parse_thread_update(self, data: Dict[str, Any]):
|
||||||
|
"""Parses THREAD_UPDATE into a Thread object."""
|
||||||
|
|
||||||
|
return self._client.parse_channel(data)
|
||||||
|
|
||||||
|
def _parse_thread_delete(self, data: Dict[str, Any]):
|
||||||
|
"""Parses THREAD_DELETE, removing the thread from caches."""
|
||||||
|
|
||||||
|
thread = self._client.parse_channel(data)
|
||||||
|
thread_id = data.get("id")
|
||||||
|
if thread_id:
|
||||||
|
self._client._channels.invalidate(thread_id)
|
||||||
|
guild_id = data.get("guild_id")
|
||||||
|
if guild_id:
|
||||||
|
guild = self._client._guilds.get(guild_id)
|
||||||
|
if guild:
|
||||||
|
guild._channels.invalidate(thread_id)
|
||||||
|
guild._threads.pop(thread_id, None)
|
||||||
|
return thread
|
||||||
|
|
||||||
|
def _parse_invite_create(self, data: Dict[str, Any]):
|
||||||
|
"""Parses INVITE_CREATE into an Invite object."""
|
||||||
|
|
||||||
|
return self._client.parse_invite(data)
|
||||||
|
|
||||||
|
def _parse_invite_delete(self, data: Dict[str, Any]):
|
||||||
|
"""Parses INVITE_DELETE into an InviteDelete model."""
|
||||||
|
|
||||||
|
from .models import InviteDelete
|
||||||
|
|
||||||
|
return InviteDelete(data)
|
||||||
|
|
||||||
# Potentially add _parse_user for events that directly provide a full user object
|
# Potentially add _parse_user for events that directly provide a full user object
|
||||||
# def _parse_user_update(self, data: Dict[str, Any]) -> User:
|
# def _parse_user_update(self, data: Dict[str, Any]) -> User:
|
||||||
# return User(data=data)
|
# return User(data=data)
|
||||||
|
@ -2640,6 +2640,18 @@ class Invite:
|
|||||||
return f"<Invite code='{self.code}' guild_id='{self.guild_id}' channel_id='{self.channel_id}'>"
|
return f"<Invite code='{self.code}' guild_id='{self.guild_id}' channel_id='{self.channel_id}'>"
|
||||||
|
|
||||||
|
|
||||||
|
class InviteDelete:
|
||||||
|
"""Represents an INVITE_DELETE event."""
|
||||||
|
|
||||||
|
def __init__(self, data: Dict[str, Any]):
|
||||||
|
self.channel_id: str = data["channel_id"]
|
||||||
|
self.guild_id: Optional[str] = data.get("guild_id")
|
||||||
|
self.code: str = data["code"]
|
||||||
|
|
||||||
|
def __repr__(self) -> str:
|
||||||
|
return f"<InviteDelete code='{self.code}' guild_id='{self.guild_id}' channel_id='{self.channel_id}'>"
|
||||||
|
|
||||||
|
|
||||||
class GuildMemberRemove:
|
class GuildMemberRemove:
|
||||||
"""Represents a GUILD_MEMBER_REMOVE event."""
|
"""Represents a GUILD_MEMBER_REMOVE event."""
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user