|
43 | 43 | Union,
|
44 | 44 | )
|
45 | 45 |
|
| 46 | +import discord |
| 47 | + |
46 | 48 | from . import utils
|
47 | 49 | from .activity import BaseActivity
|
48 | 50 | from .audit_logs import AuditLogEntry
|
@@ -976,14 +978,27 @@ def parse_thread_create(self, data) -> None:
|
976 | 978 | )
|
977 | 979 | return
|
978 | 980 |
|
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) |
983 | 985 | 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 | + ) |
984 | 999 | self.dispatch("thread_create", thread)
|
985 |
| - else: |
986 |
| - self.dispatch("thread_join", thread) |
| 1000 | + else: |
| 1001 | + self.dispatch("thread_join", cached_thread) |
987 | 1002 |
|
988 | 1003 | def parse_thread_update(self, data) -> None:
|
989 | 1004 | guild_id = int(data["guild_id"])
|
@@ -1095,6 +1110,7 @@ def parse_thread_member_update(self, data) -> None:
|
1095 | 1110 |
|
1096 | 1111 | member = ThreadMember(thread, data)
|
1097 | 1112 | thread.me = member
|
| 1113 | + thread._add_member(member) |
1098 | 1114 |
|
1099 | 1115 | def parse_thread_members_update(self, data) -> None:
|
1100 | 1116 | guild_id = int(data["guild_id"])
|
@@ -1123,20 +1139,21 @@ def parse_thread_members_update(self, data) -> None:
|
1123 | 1139 | removed_member_ids = [int(x) for x in data.get("removed_member_ids", [])]
|
1124 | 1140 | self_id = self.self_id
|
1125 | 1141 | for member in added_members:
|
| 1142 | + thread._add_member(member) |
1126 | 1143 | if member.id != self_id:
|
1127 |
| - thread._add_member(member) |
1128 | 1144 | self.dispatch("thread_member_join", member)
|
1129 | 1145 | else:
|
1130 | 1146 | thread.me = member
|
1131 | 1147 | self.dispatch("thread_join", thread)
|
1132 | 1148 |
|
1133 | 1149 | for member_id in removed_member_ids:
|
| 1150 | + member = thread._pop_member(member_id) |
1134 | 1151 | if member_id != self_id:
|
1135 |
| - member = thread._pop_member(member_id) |
1136 | 1152 | self.dispatch("raw_thread_member_remove", raw)
|
1137 | 1153 | if member is not None:
|
1138 | 1154 | self.dispatch("thread_member_remove", member)
|
1139 | 1155 | else:
|
| 1156 | + thread.me = None |
1140 | 1157 | self.dispatch("thread_remove", thread)
|
1141 | 1158 |
|
1142 | 1159 | def parse_guild_member_add(self, data) -> None:
|
|
0 commit comments