summaryrefslogtreecommitdiff
path: root/slixmpp/plugins/xep_0045/stanza.py
blob: 265be83aeb3c8484239926e56a6b75f3bbffca3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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