diff --git a/session.py b/session.py index a345c69..2455f9e 100644 --- a/session.py +++ b/session.py @@ -447,6 +447,16 @@ class Session(YowsupApp): room, participants) self.groups[room].removeParticipants(participants) + # Called by superclass + def onContactStatusChanged(self, number, status): + self.logger.debug("%s changed their status to %s", number, status) + try: + buddy = self.buddies[number] + buddy.statusMsg = status + self.buddies.updateSpectrum(buddy) + except KeyError: + self.logger.debug("%s not in buddy list", number) + def onPresenceReceived(self, _type, name, jid, lastseen): self.logger.info("Presence received: %s %s %s %s", _type, name, jid, lastseen) buddy = jid.split("@")[0] diff --git a/yowsupwrapper.py b/yowsupwrapper.py index 8271400..fa4819a 100644 --- a/yowsupwrapper.py +++ b/yowsupwrapper.py @@ -35,6 +35,7 @@ from yowsup.layers.protocol_chatstate.protocolentities import * from yowsup.layers.protocol_contacts.protocolentities import * from yowsup.layers.protocol_groups.protocolentities import * from yowsup.layers.protocol_media.protocolentities import * +from yowsup.layers.protocol_notifications.protocolentities import * from yowsup.layers.protocol_messages.protocolentities import * from yowsup.layers.protocol_presence.protocolentities import * from yowsup.layers.protocol_profiles.protocolentities import * @@ -545,6 +546,15 @@ class YowsupApp(object): """ pass + def onContactStatusChanged(self, number, status): + """Called when a contacts changes their status + + Args + number: (str) the number of the contact who changed their status + status: (str) the new status + """ + pass + def sendEntity(self, entity): """Sends an entity down the stack (as if YowsupAppLayer called toLower)""" self.stack.broadcastEvent(YowLayerEvent(YowsupAppLayer.TO_LOWER_EVENT, @@ -651,6 +661,11 @@ class YowsupAppLayer(YowInterfaceLayer): entity.getGroupId().split('@')[0], entity.getParticipants().keys() ) + elif isinstance(entity, StatusNotificationProtocolEntity): + self.caller.onContactStatusChanged( + entity._from.split('@')[0], + entity.status + ) @ProtocolEntityCallback('message') def onMessageReceived(self, entity):