9090 from .types .sticker import GuildSticker as GuildStickerPayload
9191 from .types .user import User as UserPayload
9292 from .voice_client import VoiceClient
93+ from .types .member import MemberUpdateEvent
9394
9495 T = TypeVar ("T" )
9596 CS = TypeVar ("CS" , bound = "ConnectionState" )
@@ -910,9 +911,11 @@ def parse_message_poll_vote_add(self, data) -> None:
910911 if answer .id in counts :
911912 counts [answer .id ].count += 1
912913 else :
913- counts [answer .id ] = PollAnswerCount (
914- {"id" : answer .id , "count" : 1 , "me_voted" : False }
915- )
914+ counts [answer .id ] = PollAnswerCount ({
915+ "id" : answer .id ,
916+ "count" : 1 ,
917+ "me_voted" : False ,
918+ })
916919 if poll is not None and user is not None :
917920 answer = poll .get_answer (raw .answer_id )
918921 if answer is not None :
@@ -1322,7 +1325,7 @@ def parse_guild_member_remove(self, data) -> None:
13221325 )
13231326 self .dispatch ("raw_member_remove" , raw )
13241327
1325- def parse_guild_member_update (self , data ) -> None :
1328+ def parse_guild_member_update (self , data : MemberUpdateEvent ) -> None :
13261329 guild = self ._get_guild (int (data ["guild_id" ]))
13271330 user = data ["user" ]
13281331 user_id = int (user ["id" ])
@@ -1333,29 +1336,38 @@ def parse_guild_member_update(self, data) -> None:
13331336 )
13341337 return
13351338
1336- member = guild .get_member (user_id )
1337- if member is not None :
1338- old_member = Member ._copy (member )
1339- member ._update (data )
1340- user_update = member ._update_inner_user (user )
1339+ if not self .member_cache_flags .joined :
1340+ old_member = guild ._members .pop (user_id , None )
1341+ else :
1342+ old_member = guild .get_member (user_id )
1343+
1344+ old_member = Member ._copy (old_member ) if old_member is not None else None
1345+
1346+ if old_member is not None :
1347+ new_member = old_member
1348+ new_member ._update (data )
1349+
1350+ # handle user_update if necessary
1351+ user_update = old_member ._update_inner_user (user )
13411352 if user_update :
13421353 self .dispatch ("user_update" , user_update [0 ], user_update [1 ])
13431354
1344- self .dispatch ("member_update" , old_member , member )
1355+ self .dispatch ("member_update" , old_member , new_member )
13451356 else :
1346- if self .member_cache_flags .joined :
1347- member = Member (data = data , guild = guild , state = self )
1357+ new_member = Member (guild = guild , data = data , state = self ) # type: ignore
13481358
1359+ if self .member_cache_flags .joined :
13491360 # Force an update on the inner user if necessary
1350- user_update = member ._update_inner_user (user )
1361+ user_update = new_member ._update_inner_user (user )
13511362 if user_update :
13521363 self .dispatch ("user_update" , user_update [0 ], user_update [1 ])
13531364
1354- guild ._add_member (member )
1355- _log .debug (
1356- "GUILD_MEMBER_UPDATE referencing an unknown member ID: %s. Discarding." ,
1357- user_id ,
1358- )
1365+ print ("adding new member to cache:" , new_member )
1366+ guild ._add_member (new_member )
1367+
1368+ raw = RawMemberUpdateEvent (data , new_member )
1369+ raw .cached_member = old_member
1370+ self .dispatch ("raw_member_update" , raw )
13591371
13601372 def parse_guild_emojis_update (self , data ) -> None :
13611373 guild = self ._get_guild (int (data ["guild_id" ]))
0 commit comments