Skip to content

Commit b27c61b

Browse files
committed
refactor: thread events
1 parent b88b26c commit b27c61b

File tree

5 files changed

+187
-122
lines changed

5 files changed

+187
-122
lines changed

discord/app/state.py

Lines changed: 0 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -491,108 +491,6 @@ async def query_members(
491491
)
492492
raise
493493

494-
def parse_thread_list_sync(self, data) -> None:
495-
guild_id = int(data["guild_id"])
496-
guild: Guild | None = self._get_guild(guild_id)
497-
if guild is None:
498-
_log.debug(
499-
"THREAD_LIST_SYNC referencing an unknown guild ID: %s. Discarding",
500-
guild_id,
501-
)
502-
return
503-
504-
try:
505-
channel_ids = set(data["channel_ids"])
506-
except KeyError:
507-
# If not provided, then the entire guild is being synced
508-
# So all previous thread data should be overwritten
509-
previous_threads = guild._threads.copy()
510-
guild._clear_threads()
511-
else:
512-
previous_threads = guild._filter_threads(channel_ids)
513-
514-
threads = {d["id"]: guild._store_thread(d) for d in data.get("threads", [])}
515-
516-
for member in data.get("members", []):
517-
try:
518-
# note: member['id'] is the thread_id
519-
thread = threads[member["id"]]
520-
except KeyError:
521-
continue
522-
else:
523-
thread._add_member(ThreadMember(thread, member))
524-
525-
for thread in threads.values():
526-
old = previous_threads.pop(thread.id, None)
527-
if old is None:
528-
self.dispatch("thread_join", thread)
529-
530-
for thread in previous_threads.values():
531-
self.dispatch("thread_remove", thread)
532-
533-
def parse_thread_member_update(self, data) -> None:
534-
guild_id = int(data["guild_id"])
535-
guild: Guild | None = self._get_guild(guild_id)
536-
if guild is None:
537-
_log.debug(
538-
"THREAD_MEMBER_UPDATE referencing an unknown guild ID: %s. Discarding",
539-
guild_id,
540-
)
541-
return
542-
543-
thread_id = int(data["id"])
544-
thread: Thread | None = guild.get_thread(thread_id)
545-
if thread is None:
546-
_log.debug(
547-
"THREAD_MEMBER_UPDATE referencing an unknown thread ID: %s. Discarding",
548-
thread_id,
549-
)
550-
return
551-
552-
member = ThreadMember(thread, data)
553-
thread.me = member
554-
thread._add_member(member)
555-
556-
def parse_thread_members_update(self, data) -> None:
557-
guild_id = int(data["guild_id"])
558-
guild: Guild | None = self._get_guild(guild_id)
559-
if guild is None:
560-
_log.debug(
561-
"THREAD_MEMBERS_UPDATE referencing an unknown guild ID: %s. Discarding",
562-
guild_id,
563-
)
564-
return
565-
566-
thread_id = int(data["id"])
567-
thread: Thread | None = guild.get_thread(thread_id)
568-
raw = RawThreadMembersUpdateEvent(data)
569-
if thread is None:
570-
_log.debug(
571-
("THREAD_MEMBERS_UPDATE referencing an unknown thread ID: %s. Discarding"),
572-
thread_id,
573-
)
574-
return
575-
576-
added_members = [ThreadMember(thread, d) for d in data.get("added_members", [])]
577-
removed_member_ids = [int(x) for x in data.get("removed_member_ids", [])]
578-
self_id = self.self_id
579-
for member in added_members:
580-
thread._add_member(member)
581-
if member.id != self_id:
582-
self.dispatch("thread_member_join", member)
583-
else:
584-
thread.me = member
585-
self.dispatch("thread_join", thread)
586-
587-
for member_id in removed_member_ids:
588-
member = thread._pop_member(member_id)
589-
if member_id != self_id:
590-
self.dispatch("raw_thread_member_remove", raw)
591-
if member is not None:
592-
self.dispatch("thread_member_remove", member)
593-
else:
594-
thread.me = None
595-
self.dispatch("thread_remove", thread)
596494

597495
def parse_guild_member_add(self, data) -> None:
598496
guild = self._get_guild(int(data["guild_id"]))

discord/events/channel.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from datetime import datetime
2626
from copy import copy
2727
from typing import Any, Self, TypeVar, cast
28-
from discord import utils
28+
from discord.utils.private import get_as_snowflake, parse_time
2929
from discord.abc import GuildChannel, PrivateChannel
3030
from discord.app.event_emitter import Event
3131
from discord.app.state import ConnectionState
@@ -47,7 +47,7 @@ async def __load__(cls, data: dict[str, Any], state: ConnectionState) -> Self |
4747
if factory is None:
4848
return
4949

50-
guild_id = utils._get_as_snowflake(data, "guild_id")
50+
guild_id = get_as_snowflake(data, "guild_id")
5151
guild = await state._get_guild(guild_id)
5252
if guild is not None:
5353
# the factory can't be a DMChannel or GroupChannel here
@@ -107,7 +107,7 @@ async def __load__(cls, data: dict[str, Any], state: ConnectionState) -> Self |
107107
await state.emitter.emit("PRIVATE_CHANNEL_UPDATE", (old_channel, channel))
108108
return
109109

110-
guild_id = utils._get_as_snowflake(data, "guild_id")
110+
guild_id = get_as_snowflake(data, "guild_id")
111111
guild = await state._get_guild(guild_id)
112112
if guild is not None:
113113
channel = guild.get_channel(channel_id)
@@ -124,7 +124,7 @@ def __init__(self) -> None: ...
124124

125125
@classmethod
126126
async def __load__(cls, data: dict[str, Any], state: ConnectionState) -> Self | None:
127-
guild = await state._get_guild(utils._get_as_snowflake(data, "guild_id"))
127+
guild = await state._get_guild(get_as_snowflake(data, "guild_id"))
128128
channel_id = int(data["id"])
129129
if guild is not None:
130130
channel = guild.get_channel(channel_id)
@@ -155,5 +155,5 @@ async def __load__(cls, data: dict[str, Any], state: ConnectionState) -> Self |
155155

156156
self = cls()
157157
self.channel = channel
158-
self.last_pin = utils.parse_time(data["last_pin_timestamp"]) if data["last_pin_timestamp"] else None
158+
self.last_pin = parse_time(data["last_pin_timestamp"]) if data["last_pin_timestamp"] else None
159159
return self

discord/events/gateway.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
from typing import Any, Self, cast
2626

27-
from discord import utils
27+
from discord.utils.private import get_as_snowflake
2828
from discord.emoji import Emoji
2929
from discord.flags import ApplicationFlags
3030
from discord.guild import Guild, GuildChannel
@@ -77,7 +77,7 @@ async def __load__(cls, data: dict[str, Any], state: ConnectionState) -> Self:
7777
except KeyError:
7878
pass
7979
else:
80-
self.application_id = utils._get_as_snowflake(application, "id") # type: ignore
80+
self.application_id = get_as_snowflake(application, "id") # type: ignore
8181
# flags will always be present here
8282
self.application_flags = ApplicationFlags._from_value(application["flags"]) # type: ignore
8383
state.application_id = self.application_id
@@ -213,7 +213,7 @@ class PresenceUpdate(Event):
213213
@classmethod
214214
async def __load__(cls, data: Any, state: ConnectionState) -> Self | None:
215215
self = cls()
216-
guild_id = utils._get_as_snowflake(data, "guild_id")
216+
guild_id = get_as_snowflake(data, "guild_id")
217217
guild = await state._get_guild(guild_id)
218218
if guild is None:
219219
return

discord/events/message.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,9 @@
2323
"""
2424

2525
from typing import Any, Self
26-
from discord import utils
26+
from discord.utils import private as utils, MISSING
2727
from discord.app.state import ConnectionState
2828
from discord.channel import StageChannel, TextChannel, VoiceChannel
29-
from discord.emoji import AppEmoji, GuildEmoji
3029
from discord.guild import Guild
3130
from discord.member import Member
3231
from discord.partial_emoji import PartialEmoji
@@ -135,7 +134,7 @@ async def __load__(cls, data: Any, state: ConnectionState) -> Self:
135134
self.old.author = new_msg.author
136135
self.__dict__.update(new_msg.__dict__)
137136
else:
138-
self.old = utils.MISSING
137+
self.old = MISSING
139138
if poll_data := data.get("poll"):
140139
channel = await state.get_channel(raw.channel_id)
141140
await state.store_poll(
@@ -157,7 +156,7 @@ class ReactionAdd(Event):
157156
async def __load__(cls, data: ReactionActionEvent, state: ConnectionState) -> Self:
158157
self = cls()
159158
emoji = data["emoji"]
160-
emoji_id = utils._get_as_snowflake(emoji, "id")
159+
emoji_id = utils.get_as_snowflake(emoji, "id")
161160
emoji = PartialEmoji.with_state(state, id=emoji_id, animated=emoji.get("animated", False), name=emoji["name"])
162161
raw = RawReactionActionEvent(data, emoji, "REACTION_ADD")
163162

@@ -181,7 +180,7 @@ async def __load__(cls, data: ReactionActionEvent, state: ConnectionState) -> Se
181180
if user:
182181
self.user = user
183182
else:
184-
self.user = utils.MISSING
183+
self.user = MISSING
185184

186185
return self
187186

@@ -204,8 +203,8 @@ async def __load__(cls, data: ReactionClearEvent, state: ConnectionState) -> Sel
204203
self.message = message
205204
self.old_reactions = old_reactions
206205
else:
207-
self.message = utils.MISSING
208-
self.old_reactions = utils.MISSING
206+
self.message = MISSING
207+
self.old_reactions = MISSING
209208
return self
210209

211210

@@ -220,7 +219,7 @@ class ReactionRemove(Event):
220219
async def __load__(cls, data: ReactionActionEvent, state: ConnectionState) -> Self:
221220
self = cls()
222221
emoji = data["emoji"]
223-
emoji_id = utils._get_as_snowflake(emoji, "id")
222+
emoji_id = utils.get_as_snowflake(emoji, "id")
224223
emoji = PartialEmoji.with_state(state, id=emoji_id, animated=emoji.get("animated", False), name=emoji["name"])
225224
raw = RawReactionActionEvent(data, emoji, "REACTION_ADD")
226225

@@ -247,7 +246,7 @@ async def __load__(cls, data: ReactionActionEvent, state: ConnectionState) -> Se
247246
if user:
248247
self.user = user
249248
else:
250-
self.user = utils.MISSING
249+
self.user = MISSING
251250

252251
return self
253252

@@ -261,7 +260,7 @@ def __init__(self):
261260
@classmethod
262261
async def __load__(cls, data: Any, state: ConnectionState) -> Self | None:
263262
emoji = data["emoji"]
264-
emoji_id = utils._get_as_snowflake(emoji, "id")
263+
emoji_id = utils.get_as_snowflake(emoji, "id")
265264
emoji = PartialEmoji.with_state(self, id=emoji_id, name=emoji["name"])
266265
raw = RawReactionClearEmojiEvent(data, emoji)
267266

0 commit comments

Comments
 (0)