summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--slixmpp/plugins/xep_0045/__init__.py89
-rw-r--r--slixmpp/plugins/xep_0045/stanza.py102
2 files changed, 103 insertions, 88 deletions
diff --git a/slixmpp/plugins/xep_0045/__init__.py b/slixmpp/plugins/xep_0045/__init__.py
index f0433097..e3437b8f 100644
--- a/slixmpp/plugins/xep_0045/__init__.py
+++ b/slixmpp/plugins/xep_0045/__init__.py
@@ -15,99 +15,12 @@ from slixmpp.xmlstream.handler.callback import Callback
from slixmpp.xmlstream.matcher.xpath import MatchXPath
from slixmpp.xmlstream.matcher.xmlmask import MatchXMLMask
from slixmpp.exceptions import IqError, IqTimeout
+from slixmpp.plugins.xep_0045.stanza import MUCPresence
log = logging.getLogger(__name__)
-class MUCPresence(ElementBase):
- name = 'x'
- namespace = 'http://jabber.org/protocol/muc#user'
- plugin_attrib = 'muc'
- interfaces = {'affiliation', 'role', 'jid', 'nick', 'room'}
- affiliations = {'', }
- roles = {'', }
-
- def get_item_attr(self, attr, default):
- item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
- if item is None:
- return default
- return item.get(attr)
-
- def set_item_attr(self, attr, value):
- item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
- if item is None:
- item = ET.Element('{http://jabber.org/protocol/muc#user}item')
- self.xml.append(item)
- item.attrib[attr] = value
- return item
-
- def del_item_attr(self, attr):
- item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
- if item is not None and attr in item.attrib:
- del item.attrib[attr]
-
- def get_affiliation(self):
- return self.get_item_attr('affiliation', '')
-
- def set_affiliation(self, value):
- self.set_item_attr('affiliation', value)
- return self
-
- def del_affiliation(self):
- # TODO: set default affiliation
- self.del_item_attr('affiliation')
- return self
-
- def get_jid(self):
- return JID(self.get_item_attr('jid', ''))
-
- def set_jid(self, value):
- if not isinstance(value, str):
- value = str(value)
- self.set_item_attr('jid', value)
- return self
-
- def del_jid(self):
- self.del_item_attr('jid')
- return self
-
- def get_role(self):
- return self.get_item_attr('role', '')
-
- def set_role(self, value):
- # TODO: check for valid role
- self.set_item_attr('role', value)
- return self
-
- def del_role(self):
- # TODO: set default role
- self.del_item_attr('role')
- return self
-
- def get_nick(self):
- return self.parent()['from'].resource
-
- def get_room(self):
- return self.parent()['from'].bare
-
- def set_nick(self, value):
- log.warning("Cannot set nick through mucpresence plugin.")
- return self
-
- def set_room(self, value):
- log.warning("Cannot set room through mucpresence plugin.")
- return self
-
- def del_nick(self):
- log.warning("Cannot delete nick through mucpresence plugin.")
- return self
-
- def del_room(self):
- log.warning("Cannot delete room through mucpresence plugin.")
- return self
-
-
class XEP_0045(BasePlugin):
"""
diff --git a/slixmpp/plugins/xep_0045/stanza.py b/slixmpp/plugins/xep_0045/stanza.py
new file mode 100644
index 00000000..265be83a
--- /dev/null
+++ b/slixmpp/plugins/xep_0045/stanza.py
@@ -0,0 +1,102 @@
+"""
+ Slixmpp: The Slick XMPP Library
+ Copyright (C) 2010 Nathanael C. Fritz
+ Copyright (C) 2020 "Maxime “pep” Buquet <pep@bouah.net>"
+ This file is part of Slixmpp.
+
+ See the file LICENSE for copying permission.
+"""
+
+import logging
+from slixmpp.xmlstream import ElementBase, ET, JID
+
+
+log = logging.getLogger(__name__)
+
+
+class MUCPresence(ElementBase):
+ name = 'x'
+ namespace = 'http://jabber.org/protocol/muc#user'
+ plugin_attrib = 'muc'
+ interfaces = {'affiliation', 'role', 'jid', 'nick', 'room'}
+ affiliations = {'', }
+ roles = {'', }
+
+ def get_item_attr(self, attr, default):
+ item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
+ if item is None:
+ return default
+ return item.get(attr)
+
+ def set_item_attr(self, attr, value):
+ item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
+ if item is None:
+ item = ET.Element('{http://jabber.org/protocol/muc#user}item')
+ self.xml.append(item)
+ item.attrib[attr] = value
+ return item
+
+ def del_item_attr(self, attr):
+ item = self.xml.find('{http://jabber.org/protocol/muc#user}item')
+ if item is not None and attr in item.attrib:
+ del item.attrib[attr]
+
+ def get_affiliation(self):
+ return self.get_item_attr('affiliation', '')
+
+ def set_affiliation(self, value):
+ self.set_item_attr('affiliation', value)
+ return self
+
+ def del_affiliation(self):
+ # TODO: set default affiliation
+ self.del_item_attr('affiliation')
+ return self
+
+ def get_jid(self):
+ return JID(self.get_item_attr('jid', ''))
+
+ def set_jid(self, value):
+ if not isinstance(value, str):
+ value = str(value)
+ self.set_item_attr('jid', value)
+ return self
+
+ def del_jid(self):
+ self.del_item_attr('jid')
+ return self
+
+ def get_role(self):
+ return self.get_item_attr('role', '')
+
+ def set_role(self, value):
+ # TODO: check for valid role
+ self.set_item_attr('role', value)
+ return self
+
+ def del_role(self):
+ # TODO: set default role
+ self.del_item_attr('role')
+ return self
+
+ def get_nick(self):
+ return self.parent()['from'].resource
+
+ def get_room(self):
+ return self.parent()['from'].bare
+
+ def set_nick(self, value):
+ log.warning("Cannot set nick through mucpresence plugin.")
+ return self
+
+ def set_room(self, value):
+ log.warning("Cannot set room through mucpresence plugin.")
+ return self
+
+ def del_nick(self):
+ log.warning("Cannot delete nick through mucpresence plugin.")
+ return self
+
+ def del_room(self):
+ log.warning("Cannot delete room through mucpresence plugin.")
+ return self