Skip to content

Commit cc0cf1a

Browse files
authored
fix: Improve Thread.members Reliability (#2351)
1 parent 33cbe88 commit cc0cf1a

File tree

3 files changed

+28
-9
lines changed

3 files changed

+28
-9
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,8 @@ These changes are available on the `master` branch, but have not yet been releas
237237
- Fixed `AttributeError` due to `entitlements` not being included in
238238
`Interaction.__slots__`.
239239
([#2345](https://github.com/Pycord-Development/pycord/pull/2345))
240+
- Fixed `Thread.me` being out of date and added the thread owner to `Thread.members` on
241+
creation. ([#1296](https://github.com/Pycord-Development/pycord/issues/1296))
240242

241243
## [2.4.1] - 2023-03-20
242244

discord/state.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
Union,
4444
)
4545

46+
import discord
47+
4648
from . import utils
4749
from .activity import BaseActivity
4850
from .audit_logs import AuditLogEntry
@@ -976,14 +978,27 @@ def parse_thread_create(self, data) -> None:
976978
)
977979
return
978980

979-
thread = Thread(guild=guild, state=guild._state, data=data)
980-
has_thread = guild.get_thread(thread.id)
981-
guild._add_thread(thread)
982-
if not has_thread:
981+
cached_thread = guild.get_thread(int(data["id"]))
982+
if not cached_thread:
983+
thread = Thread(guild=guild, state=guild._state, data=data)
984+
guild._add_thread(thread)
983985
if data.get("newly_created"):
986+
thread._add_member(
987+
ThreadMember(
988+
thread,
989+
{
990+
"id": thread.id,
991+
"user_id": data["owner_id"],
992+
"join_timestamp": data["thread_metadata"][
993+
"create_timestamp"
994+
],
995+
"flags": utils.MISSING,
996+
},
997+
)
998+
)
984999
self.dispatch("thread_create", thread)
985-
else:
986-
self.dispatch("thread_join", thread)
1000+
else:
1001+
self.dispatch("thread_join", cached_thread)
9871002

9881003
def parse_thread_update(self, data) -> None:
9891004
guild_id = int(data["guild_id"])
@@ -1095,6 +1110,7 @@ def parse_thread_member_update(self, data) -> None:
10951110

10961111
member = ThreadMember(thread, data)
10971112
thread.me = member
1113+
thread._add_member(member)
10981114

10991115
def parse_thread_members_update(self, data) -> None:
11001116
guild_id = int(data["guild_id"])
@@ -1123,20 +1139,21 @@ def parse_thread_members_update(self, data) -> None:
11231139
removed_member_ids = [int(x) for x in data.get("removed_member_ids", [])]
11241140
self_id = self.self_id
11251141
for member in added_members:
1142+
thread._add_member(member)
11261143
if member.id != self_id:
1127-
thread._add_member(member)
11281144
self.dispatch("thread_member_join", member)
11291145
else:
11301146
thread.me = member
11311147
self.dispatch("thread_join", thread)
11321148

11331149
for member_id in removed_member_ids:
1150+
member = thread._pop_member(member_id)
11341151
if member_id != self_id:
1135-
member = thread._pop_member(member_id)
11361152
self.dispatch("raw_thread_member_remove", raw)
11371153
if member is not None:
11381154
self.dispatch("thread_member_remove", member)
11391155
else:
1156+
thread.me = None
11401157
self.dispatch("thread_remove", thread)
11411158

11421159
def parse_guild_member_add(self, data) -> None:

discord/threads.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ def jump_url(self) -> str:
288288

289289
@property
290290
def members(self) -> list[ThreadMember]:
291-
"""A list of thread members in this thread.
291+
"""A list of thread members in this thread, including the bot if it is a member of this thread.
292292
293293
This requires :attr:`Intents.members` to be properly filled. Most of the time however,
294294
this data is not provided by the gateway and a call to :meth:`fetch_members` is

0 commit comments

Comments
 (0)