From c357fd085bd44014dd2a624ff024e1d4cf617bc9 Mon Sep 17 00:00:00 2001 From: Kacper Ziubryniewicz Date: Sat, 5 Jan 2019 18:36:48 +0100 Subject: [PATCH] Better listening for buddylist overlay and chatbox presence --- fbchat/client.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/fbchat/client.py b/fbchat/client.py index e8e019a..858cbcd 100644 --- a/fbchat/client.py +++ b/fbchat/client.py @@ -2491,22 +2491,43 @@ class Client(object): buddylist = dict() for _id in m.get('buddyList', {}): payload = m['buddyList'][_id] + last_active = payload.get('lat') - active = time.time() - last_active <= 60 + active = payload.get('p') in [2, 3] in_game = int(_id) in m.get('gamers', {}) + buddylist[_id] = last_active - self._buddylist[_id] = ActiveStatus(active=active, last_active=last_active, in_game=in_game) + + if self._buddylist.get(_id): + self._buddylist[_id].last_active = last_active + self._buddylist[_id].active = active + self._buddylist[_id].in_game = in_game + else: + self._buddylist[_id] = ActiveStatus(active=active, last_active=last_active, in_game=in_game) + self.onChatTimestamp(buddylist=buddylist, msg=m) + # Buddylist overlay elif mtype == "buddylist_overlay": statuses = dict() for _id in m.get('overlay', {}): payload = m['overlay'][_id] + last_active = payload.get('la') active = payload.get('a') in [2, 3] in_game = self._buddylist[_id].in_game if self._buddylist.get(_id) else False - self._buddylist[_id] = ActiveStatus(active=active, last_active=last_active, in_game=in_game) - statuses[_id] = ActiveStatus(active=active, last_active=last_active, in_game=in_game) + + status = ActiveStatus(active=active, last_active=last_active, in_game=in_game) + + if self._buddylist.get(_id): + self._buddylist[_id].last_active = last_active + self._buddylist[_id].active = active + self._buddylist[_id].in_game = in_game + else: + self._buddylist[_id] = status + + statuses[_id] = status + self.onBuddylistOverlay(statuses=statuses, msg=m) # Unknown message type