From 3bff0d02370db1f10d1d1868ddc64b358ad808cf Mon Sep 17 00:00:00 2001 From: souliane Date: Wed, 25 Mar 2015 15:28:02 +0100 Subject: [PATCH] memory, plugin XEP-0045: getMainResource returns None when asking a MUC entity + fixes /whois on a MUC (bare) entity --- src/memory/memory.py | 5 +++++ src/plugins/plugin_xep_0045.py | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/memory/memory.py b/src/memory/memory.py index 99df9a9b..4d27f6e8 100644 --- a/src/memory/memory.py +++ b/src/memory/memory.py @@ -514,6 +514,11 @@ class Memory(object): """ if entity_jid.resource: raise ValueError("getMainResource must be used with a bare jid (got {})".format(entity_jid)) + try: + if self.host.plugins["XEP-0045"].isRoom(entity_jid, profile_key): + return None # MUC rooms have no main resource + except KeyError: # plugin not found + pass resources = self.getAllResources(entity_jid, profile_key) priority_resources = [] for resource in resources: diff --git a/src/plugins/plugin_xep_0045.py b/src/plugins/plugin_xep_0045.py index bac713b1..2b1bc1a0 100755 --- a/src/plugins/plugin_xep_0045.py +++ b/src/plugins/plugin_xep_0045.py @@ -153,6 +153,16 @@ class XEP_0045(object): self.host.bridge.newAlert(mess, D_("Group chat error"), "ERROR", profile) raise failure + def isRoom(self, entity_bare, profile_key): + """Tell if a bare entity is a MUC room. + + @param entity_bare (jid.JID): bare entity + @param profile_key (unicode): %(doc_profile_key)s + @return bool + """ + profile = self.host.memory.getProfileName(profile_key) + return entity_bare in self.clients[profile].joined_rooms + def getRoomsJoined(self, profile_key=C.PROF_KEY_NONE): """Return room where user is""" profile = self.host.memory.getProfileName(profile_key) @@ -615,6 +625,8 @@ class XEP_0045(object): if target_jid.userhostJID() not in self.clients[profile].joined_rooms: log.warning(_("This room has not been joined")) return + if not target_jid.resource: + return user = self.clients[profile].joined_rooms[target_jid.userhostJID()].getUser(target_jid.resource) whois_msg.append(_("Nickname: %s") % user.nick) if user.entity: