From de548fbccec7df25b2221a2f9b67384ff16038cf Mon Sep 17 00:00:00 2001 From: mathieui Date: Thu, 3 Dec 2020 22:05:47 +0100 Subject: XEP-0045: Add status_codes interface to the MUC element --- slixmpp/plugins/xep_0045/stanza.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'slixmpp/plugins/xep_0045/stanza.py') diff --git a/slixmpp/plugins/xep_0045/stanza.py b/slixmpp/plugins/xep_0045/stanza.py index 9756790b..337363c8 100644 --- a/slixmpp/plugins/xep_0045/stanza.py +++ b/slixmpp/plugins/xep_0045/stanza.py @@ -7,6 +7,7 @@ See the file LICENSE for copying permission. """ +from typing import Iterable, Set import logging from slixmpp.xmlstream import ElementBase, ET, JID @@ -23,7 +24,26 @@ class MUCBase(ElementBase): name = 'x' namespace = NS_USER plugin_attrib = 'muc' - interfaces = {'affiliation', 'role', 'jid', 'nick', 'room'} + interfaces = {'affiliation', 'role', 'jid', 'nick', 'room', 'status_codes'} + + def get_status_codes(self) -> Set[str]: + status = self.xml.findall(f'{{{NS_USER}}}status') + return {int(status.attrib['code']) for status in status} + + def set_status_codes(self, codes: Iterable[int]): + self.del_status_codes() + for code in set(codes): + self._add_status_code(code) + + def del_status_codes(self): + status = self.xml.findall(f'{{{NS_USER}}}status') + for elem in status: + self.xml.remove(elem) + + def _add_status_code(self, code: int): + status = MUCStatus() + status['code'] = code + self.append(status) def get_item_attr(self, attr, default: str): item = self.xml.find(f'{{{NS_USER}}}item') @@ -196,3 +216,12 @@ class MUCAdminItem(ElementBase): plugin_attrib = 'item' interfaces = {'role', 'affiliation', 'nick', 'jid'} + +class MUCStatus(ElementBase): + namespace = NS_USER + name = 'status' + plugin_attrib = 'status' + interfaces = {'code'} + + def set_code(self, code: int): + self.xml.attrib['code'] = str(code) -- cgit v1.2.3