@ -134,12 +134,19 @@ class ConnectionState:
def parse_presence_update ( self , data ) :
def parse_presence_update ( self , data ) :
server = self . _get_server ( data . get ( ' guild_id ' ) )
server = self . _get_server ( data . get ( ' guild_id ' ) )
if server is not None :
if server is None :
return
status = data . get ( ' status ' )
status = data . get ( ' status ' )
user = data [ ' user ' ]
user = data [ ' user ' ]
member_id = user [ ' id ' ]
member_id = user [ ' id ' ]
member = server . get_member ( member_id )
member = server . get_member ( member_id )
if member is not None :
if member is None :
# if the member is not in cache then it's being "lazily"
# loaded due to large_threshold so we need to add it into
# the cache and then update that instead.
member = self . _add_member ( server , data )
old_member = copy . copy ( member )
old_member = copy . copy ( member )
member . status = data . get ( ' status ' )
member . status = data . get ( ' status ' )
try :
try :
@ -192,9 +199,7 @@ class ConnectionState:
self . dispatch ( ' channel_create ' , channel )
self . dispatch ( ' channel_create ' , channel )
def parse_guild_member_add ( self , data ) :
def _add_member ( self , server , data ) :
server = self . _get_server ( data . get ( ' guild_id ' ) )
roles = [ server . default_role ]
roles = [ server . default_role ]
for roleid in data . get ( ' roles ' , [ ] ) :
for roleid in data . get ( ' roles ' , [ ] ) :
role = utils . get ( server . roles , id = roleid )
role = utils . get ( server . roles , id = roleid )
@ -204,6 +209,11 @@ class ConnectionState:
data [ ' roles ' ] = roles
data [ ' roles ' ] = roles
member = Member ( server = server , * * data )
member = Member ( server = server , * * data )
server . _add_member ( member )
server . _add_member ( member )
return member
def parse_guild_member_add ( self , data ) :
server = self . _get_server ( data . get ( ' guild_id ' ) )
self . _add_member ( server , data )
server . _member_count + = 1
server . _member_count + = 1
self . dispatch ( ' member_join ' , member )
self . dispatch ( ' member_join ' , member )