@@ -1101,10 +1101,11 @@ def update_guild_member(data)
11011101 server_id = data [ 'guild_id' ] . to_i
11021102 server = self . server ( server_id )
11031103
1104- if ( member = server . member ( data [ 'user' ] [ 'id' ] . to_i ) )
1104+ # Only attempt to update members that're already cached
1105+ if ( member = server . member ( data [ 'user' ] [ 'id' ] . to_i , false ) )
11051106 member . update_data ( data )
11061107 else
1107- Discordrb :: LOGGER . warn ( "update_guild_member attempted to access a member which doesn't exist! Not sure what happened here, ignoring." )
1108+ ensure_user ( data [ 'user' ] )
11081109 end
11091110 end
11101111
@@ -1301,12 +1302,21 @@ def handle_dispatch(type, data)
13011302 return
13021303 end
13031304
1305+ if !should_parse_self && profile . id == data [ 'author' ] [ 'id' ] . to_i
1306+ debug ( 'Ignored message from the current bot' )
1307+ return
1308+ end
1309+
13041310 # If create_message is overwritten with a method that returns the parsed message, use that instead, so we don't
13051311 # parse the message twice (which is just thrown away performance)
13061312 message = create_message ( data )
13071313 message = Message . new ( data , self ) unless message . is_a? Message
13081314
1309- return if message . from_bot? && !should_parse_self
1315+ # Update the existing member if it exists in the cache.
1316+ if data [ 'member' ]
1317+ member = message . channel . server &.member ( data [ 'author' ] [ 'id' ] . to_i , false )
1318+ member &.update_data ( data [ 'member' ] )
1319+ end
13101320
13111321 # Dispatch a ChannelCreateEvent for channels we don't have cached
13121322 if message . channel . private? && @pm_channels [ message . channel . recipient . id ] . nil?
@@ -1330,18 +1340,27 @@ def handle_dispatch(type, data)
13301340 when :MESSAGE_UPDATE
13311341 update_message ( data )
13321342
1343+ if !should_parse_self && profile . id == data [ 'author' ] [ 'id' ] . to_i
1344+ debug ( 'Ignored message from the current bot' )
1345+ return
1346+ end
1347+
13331348 message = Message . new ( data , self )
13341349
13351350 event = MessageUpdateEvent . new ( message , self )
13361351 raise_event ( event )
13371352
1338- return if message . from_bot? && !should_parse_self
1339-
1340- unless message . author
1353+ if data [ 'author' ] . nil?
13411354 LOGGER . debug ( "Edited a message with nil author! Content: #{ message . content . inspect } , channel: #{ message . channel . inspect } " )
13421355 return
13431356 end
13441357
1358+ # Update the existing member if it exists in the cache.
1359+ if data [ 'member' ]
1360+ member = message . channel . server &.member ( data [ 'author' ] [ 'id' ] . to_i , false )
1361+ member &.update_data ( data [ 'member' ] )
1362+ end
1363+
13451364 event = MessageEditEvent . new ( message , self )
13461365 raise_event ( event )
13471366 when :MESSAGE_DELETE
@@ -1379,6 +1398,12 @@ def handle_dispatch(type, data)
13791398
13801399 return if profile . id == data [ 'user_id' ] . to_i && !should_parse_self
13811400
1401+ if data [ 'member' ]
1402+ server = self . server ( data [ 'guild_id' ] . to_i )
1403+
1404+ server &.cache_member ( Member . new ( data [ 'member' ] , server , self ) )
1405+ end
1406+
13821407 event = ReactionAddEvent . new ( data , self )
13831408 raise_event ( event )
13841409 when :MESSAGE_REACTION_REMOVE
@@ -1559,6 +1584,10 @@ def handle_dispatch(type, data)
15591584 event = ServerEmojiUpdateEvent . new ( server , old_emoji_data [ e ] , new_emoji_data [ e ] , self )
15601585 raise_event ( event )
15611586 end
1587+ when :APPLICATION_COMMAND_PERMISSIONS_UPDATE
1588+ event = ApplicationCommandPermissionsUpdateEvent . new ( data , self )
1589+
1590+ raise_event ( event )
15621591 when :INTERACTION_CREATE
15631592 event = InteractionCreateEvent . new ( data , self )
15641593 raise_event ( event )
0 commit comments