Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0045.py @ 3085:c048fc192739
plugin XEP-0384: update to latest python-omemo + better trust management:
- python-omemo minimal version is now 0.11.0
- `undecided` devices are now handled, fixing the "accept all or none" issue: if a device
is `undecided`, the trust manager will be shown with the missing devices before sending
the message.
- `untrusted` devices are discarded
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 20 Dec 2019 12:28:01 +0100 |
parents | 16925f494820 |
children | 13be04a70e2f |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
72 | 2 # -*- coding: utf-8 -*- |
3 | |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
4 # SAT plugin for managing xep-0045 |
2771 | 5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org) |
72 | 6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
10 # (at your option) any later version. |
72 | 11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
15 # GNU Affero General Public License for more details. |
72 | 16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
599
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
72 | 19 |
1068
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
20 from sat.core.i18n import _, D_ |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
21 from sat.core.constants import Const as C |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
22 from sat.core.log import getLogger |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
23 from twisted.internet import defer |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
24 from twisted.words.protocols.jabber import jid |
3080
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
25 from twisted.words.protocols.jabber import error as xmpp_error |
1986
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
26 from twisted.python import failure |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
27 |
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
28 from sat.core import exceptions |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
29 from sat.memory import memory |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
30 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
31 import time |
319 | 32 import uuid |
72 | 33 |
1466
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
34 from wokkel import muc, disco, iwokkel |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
35 from sat.tools import xml_tools |
72 | 36 |
3028 | 37 from zope.interface import implementer |
1466
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
38 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
39 # XXX: mam and rsm come from sat_tmp.wokkel |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
40 from wokkel import rsm |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
41 from wokkel import mam |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
42 |
72 | 43 |
3080
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
44 log = getLogger(__name__) |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
45 |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
46 |
72 | 47 PLUGIN_INFO = { |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
48 C.PI_NAME: "XEP-0045 Plugin", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
49 C.PI_IMPORT_NAME: "XEP-0045", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
50 C.PI_TYPE: "XEP", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
51 C.PI_PROTOCOLS: ["XEP-0045"], |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
52 C.PI_DEPENDENCIES: ["XEP-0359"], |
3028 | 53 C.PI_RECOMMENDATIONS: [C.TEXT_CMDS, "XEP-0313"], |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
54 C.PI_MAIN: "XEP_0045", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
55 C.PI_HANDLER: "yes", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
56 C.PI_DESCRIPTION: _("""Implementation of Multi-User Chat""") |
72 | 57 } |
58 | |
1466
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
59 NS_MUC = 'http://jabber.org/protocol/muc' |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
60 AFFILIATIONS = ('owner', 'admin', 'member', 'none', 'outcast') |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
61 ROOM_USER_JOINED = 'ROOM_USER_JOINED' |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
62 ROOM_USER_LEFT = 'ROOM_USER_LEFT' |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
63 OCCUPANT_KEYS = ('nick', 'entity', 'affiliation', 'role') |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
64 ROOM_STATE_OCCUPANTS = "occupants" |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
65 ROOM_STATE_SELF_PRESENCE = "self-presence" |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
66 ROOM_STATE_LIVE = "live" |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
67 ROOM_STATES = (ROOM_STATE_OCCUPANTS, ROOM_STATE_SELF_PRESENCE, ROOM_STATE_LIVE) |
3028 | 68 HISTORY_LEGACY = "legacy" |
69 HISTORY_MAM = "mam" | |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
70 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
71 |
3028 | 72 CONFIG_SECTION = 'plugin muc' |
1407
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
73 |
3028 | 74 default_conf = {"default_muc": 'sat@chat.jabberfr.org'} |
1407
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
75 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
76 |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
77 class AlreadyJoined(exceptions.ConflictError): |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
78 |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
79 def __init__(self, room): |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
80 super(AlreadyJoined, self).__init__() |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
81 self.room = room |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
82 |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
83 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
84 class XEP_0045(object): |
2046
b99bd02ea643
plugin XEP-0045, XEP-0054, XEP-0096: deprecated bridge method are not used anymore
Goffi <goffi@goffi.org>
parents:
2028
diff
changeset
|
85 # TODO: handle invitations |
2461
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
86 # FIXME: this plugin need a good cleaning, join method is messy |
72 | 87 |
88 def __init__(self, host): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
89 log.info(_("Plugin XEP_0045 initialization")) |
72 | 90 self.host = host |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
91 self._sessions = memory.Sessions() |
3060
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
92 # return same arguments as mucRoomJoined + a boolean set to True is the room was |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
93 # already joined (first argument) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
94 host.bridge.addMethod( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
95 "mucJoin", ".plugin", in_sign='ssa{ss}s', out_sign='(bsa{sa{ss}}sss)', |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
96 method=self._join, async_=True) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
97 host.bridge.addMethod( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
98 "mucNick", ".plugin", in_sign='sss', out_sign='', method=self._nick) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
99 host.bridge.addMethod( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
100 "mucNickGet", ".plugin", in_sign='ss', out_sign='s', method=self._getRoomNick) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
101 host.bridge.addMethod( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
102 "mucLeave", ".plugin", in_sign='ss', out_sign='', method=self._leave, |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
103 async_=True) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
104 host.bridge.addMethod( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
105 "mucOccupantsGet", ".plugin", in_sign='ss', out_sign='a{sa{ss}}', |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
106 method=self._getRoomOccupants) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
107 host.bridge.addMethod( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
108 "mucSubject", ".plugin", in_sign='sss', out_sign='', method=self._subject) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
109 host.bridge.addMethod( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
110 "mucGetRoomsJoined", ".plugin", in_sign='s', out_sign='a(sa{sa{ss}}ss)', |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
111 method=self._getRoomsJoined) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
112 host.bridge.addMethod( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
113 "mucGetUniqueRoomName", ".plugin", in_sign='ss', out_sign='s', |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
114 method=self._getUniqueName) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
115 host.bridge.addMethod( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
116 "mucConfigureRoom", ".plugin", in_sign='ss', out_sign='s', |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
117 method=self._configureRoom, async_=True) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
118 host.bridge.addMethod( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
119 "mucGetDefaultService", ".plugin", in_sign='', out_sign='s', |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
120 method=self.getDefaultMUC) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
121 host.bridge.addMethod( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
122 "mucGetService", ".plugin", in_sign='ss', out_sign='s', |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
123 method=self._getMUCService, async_=True) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
124 # called when a room will be joined but must be locked until join is received |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
125 # (room is prepared, history is getting retrieved) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
126 # args: room_jid, profile |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
127 host.bridge.addSignal( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
128 "mucRoomPrepareJoin", ".plugin", signature='ss') |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
129 # args: room_jid, occupants, user_nick, subject, profile |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
130 host.bridge.addSignal( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
131 "mucRoomJoined", ".plugin", signature='sa{sa{ss}}sss') |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
132 # args: room_jid, profile |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
133 host.bridge.addSignal( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
134 "mucRoomLeft", ".plugin", signature='ss') |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
135 # args: room_jid, old_nick, new_nick, profile |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
136 host.bridge.addSignal( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
137 "mucRoomUserChangedNick", ".plugin", signature='ssss') |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
138 # args: room_jid, subject, profile |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
139 host.bridge.addSignal( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
140 "mucRoomNewSubject", ".plugin", signature='sss') |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
141 self.__submit_conf_id = host.registerCallback( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
142 self._submitConfiguration, with_data=True) |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
143 self._room_join_id = host.registerCallback(self._UIRoomJoinCb, with_data=True) |
3060
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
144 host.importMenu( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
145 (D_("MUC"), D_("configure")), self._configureRoomMenu, security_limit=0, |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
146 help_string=D_("Configure Multi-User Chat room"), type_=C.MENU_ROOM) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
147 try: |
1992
d5befe7253aa
plugin XEP-0045: fixed typo in text commands
Goffi <goffi@goffi.org>
parents:
1990
diff
changeset
|
148 self.text_cmds = self.host.plugins[C.TEXT_CMDS] |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
149 except KeyError: |
3028 | 150 log.info(_("Text commands not available")) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
151 else: |
1992
d5befe7253aa
plugin XEP-0045: fixed typo in text commands
Goffi <goffi@goffi.org>
parents:
1990
diff
changeset
|
152 self.text_cmds.registerTextCommands(self) |
d5befe7253aa
plugin XEP-0045: fixed typo in text commands
Goffi <goffi@goffi.org>
parents:
1990
diff
changeset
|
153 self.text_cmds.addWhoIsCb(self._whois, 100) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
154 |
3028 | 155 self._mam = self.host.plugins.get("XEP-0313") |
156 self._si = self.host.plugins["XEP-0359"] | |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
157 |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
158 host.trigger.add("presence_available", self.presenceTrigger) |
2822
5284be4c601b
plugin XEP-0045: cache presences if they are received before the room is fully joined:
Goffi <goffi@goffi.org>
parents:
2815
diff
changeset
|
159 host.trigger.add("presence_received", self.presenceReceivedTrigger) |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
160 host.trigger.add("MessageReceived", self.messageReceivedTrigger, priority=1000000) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
161 host.trigger.add("message_parse", self._message_parseTrigger) |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
162 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2066
diff
changeset
|
163 def profileConnected(self, client): |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
164 def assign_service(service): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
165 client.muc_service = service |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
166 return self.getMUCService(client).addCallback(assign_service) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
167 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
168 def _message_parseTrigger(self, client, message_elt, data): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
169 """Add stanza-id from the room if present""" |
3028 | 170 if message_elt.getAttribute("type") != C.MESS_TYPE_GROUPCHAT: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
171 return True |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
172 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
173 # stanza_id will not be filled by parseMessage because the emitter |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
174 # is the room and not our server, so we have to parse it here |
3028 | 175 room_jid = data["from"].userhostJID() |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
176 stanza_id = self._si.getStanzaId(message_elt, room_jid) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
177 if stanza_id: |
3028 | 178 data["extra"]["stanza_id"] = stanza_id |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
179 |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
180 def messageReceivedTrigger(self, client, message_elt, post_treat): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
181 if message_elt.getAttribute("type") == C.MESS_TYPE_GROUPCHAT: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
182 if message_elt.subject or message_elt.delay: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
183 return False |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
184 from_jid = jid.JID(message_elt['from']) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
185 room_jid = from_jid.userhostJID() |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
186 if room_jid in client._muc_client.joined_rooms: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
187 room = client._muc_client.joined_rooms[room_jid] |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
188 if room.state != ROOM_STATE_LIVE: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
189 if getattr(room, "_history_type", HISTORY_LEGACY) == HISTORY_LEGACY: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
190 # With MAM history, order is different, and we can get live |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
191 # messages before history is complete, so this is not a warning |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
192 # but an expected case. |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
193 # On the other hand, with legacy history, it's not normal. |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
194 log.warning(_( |
3028 | 195 "Received non delayed message in a room before its " |
196 "initialisation: state={state}, msg={msg}").format( | |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
197 state=room.state, |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
198 msg=message_elt.toXml())) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
199 room._cache.append(message_elt) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
200 return False |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
201 else: |
3028 | 202 log.warning("Received groupchat message for a room which has not been " |
203 "joined, ignoring it: {}".format(message_elt.toXml())) | |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
204 return False |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
205 return True |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
206 |
2844
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
207 def getRoom(self, client, room_jid): |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
208 """Retrieve Room instance from its jid |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
209 |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
210 @param room_jid(jid.JID): jid of the room |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
211 @raise exceptions.NotFound: the room has not been joined |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
212 """ |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
213 try: |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
214 return client._muc_client.joined_rooms[room_jid] |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
215 except KeyError: |
3028 | 216 raise exceptions.NotFound(_("This room has not been joined")) |
2844
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
217 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
218 def checkRoomJoined(self, client, room_jid): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
219 """Check that given room has been joined in current session |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
220 |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
221 @param room_jid (JID): room JID |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
222 """ |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
223 if room_jid not in client._muc_client.joined_rooms: |
3028 | 224 raise exceptions.NotFound(_("This room has not been joined")) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
225 |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
226 def isJoinedRoom(self, client, room_jid): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
227 """Tell if a jid is a known and joined room |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
228 |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
229 @room_jid(jid.JID): jid of the room |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
230 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
231 try: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
232 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
233 except exceptions.NotFound: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
234 return False |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
235 else: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
236 return True |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
237 |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
238 def _getRoomJoinedArgs(self, room, profile): |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
239 return [ |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
240 room.roomJID.userhost(), |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
241 XEP_0045._getOccupants(room), |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
242 room.nick, |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
243 room.subject, |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
244 profile |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
245 ] |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
246 |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
247 def _UIRoomJoinCb(self, data, profile): |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
248 room_jid = jid.JID(data['index']) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
249 client = self.host.getClient(profile) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
250 self.join(client, room_jid) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
251 return {} |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
252 |
1986
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
253 def _passwordUICb(self, data, client, room_jid, nick): |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
254 """Called when the user has given room password (or cancelled)""" |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
255 if C.bool(data.get(C.XMLUI_DATA_CANCELLED, "false")): |
3028 | 256 log.info("room join for {} is cancelled".format(room_jid.userhost())) |
257 raise failure.Failure(exceptions.CancelError(D_("Room joining cancelled by user"))) | |
1986
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
258 password = data[xml_tools.formEscape('password')] |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
259 return client._muc_client.join(room_jid, nick, password).addCallbacks(self._joinCb, self._joinEb, (client, room_jid, nick), errbackArgs=(client, room_jid, nick, password)) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
260 |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
261 def _showListUI(self, items, client, service): |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
262 xmlui = xml_tools.XMLUI(title=D_('Rooms in {}'.format(service.full()))) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
263 adv_list = xmlui.changeContainer('advanced_list', columns=1, selectable='single', callback_id=self._room_join_id) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
264 items = sorted(items, key=lambda i: i.name.lower()) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
265 for item in items: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
266 adv_list.setRowIndex(item.entity.full()) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
267 xmlui.addText(item.name) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
268 adv_list.end() |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
269 self.host.actionNew({'xmlui': xmlui.toXml()}, profile=client.profile) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
270 |
1986
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
271 def _joinCb(self, room, client, room_jid, nick): |
72 | 272 """Called when the user is in the requested room""" |
452
fd455b3ca6d4
plugin XEP-0045: room unlocking fix
Goffi <goffi@goffi.org>
parents:
451
diff
changeset
|
273 if room.locked: |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
274 # FIXME: the current behaviour is to create an instant room |
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
275 # and send the signal only when the room is unlocked |
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
276 # a proper configuration management should be done |
3028 | 277 log.debug(_("room locked !")) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
278 d = client._muc_client.configure(room.roomJID, {}) |
2990
6959c71ab8bf
plugin XEP-0045: log "failure" on configure error
Goffi <goffi@goffi.org>
parents:
2986
diff
changeset
|
279 d.addErrback(self.host.logErrback, |
3028 | 280 msg=_('Error while configuring the room: {failure_}')) |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
281 return room.fully_joined |
319 | 282 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
283 def _joinEb(self, failure, client, room_jid, nick, password): |
72 | 284 """Called when something is going wrong when joining the room""" |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
285 try: |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
286 condition = failure.value.condition |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
287 except AttributeError: |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
288 msg_suffix = '' |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
289 else: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
290 if condition == 'conflict': |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
291 # we have a nickname conflict, we try again with "_" suffixed to current nickname |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
292 nick += '_' |
1986
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
293 return client._muc_client.join(room_jid, nick, password).addCallbacks(self._joinCb, self._joinEb, (client, room_jid, nick), errbackArgs=(client, room_jid, nick, password)) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
294 elif condition == 'not-allowed': |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
295 # room is restricted, we need a password |
3028 | 296 password_ui = xml_tools.XMLUI("form", title=D_('Room {} is restricted').format(room_jid.userhost()), submit_id='') |
1986
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
297 password_ui.addText(D_("This room is restricted, please enter the password")) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
298 password_ui.addPassword('password') |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
299 d = xml_tools.deferXMLUI(self.host, password_ui, profile=client.profile) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
300 d.addCallback(self._passwordUICb, client, room_jid, nick) |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
301 return d |
fbd313cfd40b
plugin xep-0045: ask for password when getting a "not-allowed" error
Goffi <goffi@goffi.org>
parents:
1984
diff
changeset
|
302 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
303 msg_suffix = ' with condition "{}"'.format(failure.value.condition) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
304 |
3028 | 305 mess = D_("Error while joining the room {room}{suffix}".format( |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
306 room = room_jid.userhost(), suffix = msg_suffix)) |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
307 log.error(mess) |
3028 | 308 xmlui = xml_tools.note(mess, D_("Group chat error"), level=C.XMLUI_DATA_LVL_ERROR) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
309 self.host.actionNew({'xmlui': xmlui.toXml()}, profile=client.profile) |
72 | 310 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
311 @staticmethod |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
312 def _getOccupants(room): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
313 """Get occupants of a room in a form suitable for bridge""" |
3028 | 314 return {u.nick: {k:str(getattr(u,k) or '') for k in OCCUPANT_KEYS} for u in list(room.roster.values())} |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
315 |
2844
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
316 def _getRoomOccupants(self, room_jid_s, profile_key): |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
317 client = self.host.getClient(profile_key) |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
318 room_jid = jid.JID(room_jid_s) |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
319 return self.getRoomOccupants(client, room_jid) |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
320 |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
321 def getRoomOccupants(self, client, room_jid): |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
322 room = self.getRoom(client, room_jid) |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
323 return self._getOccupants(room) |
fa1cc09df195
plugin XEP-0045: added getRoomOccupants/mucOccupantsGet method to retrieve occupants of a joined room.
Goffi <goffi@goffi.org>
parents:
2827
diff
changeset
|
324 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
325 def _getRoomsJoined(self, profile_key=C.PROF_KEY_NONE): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
326 client = self.host.getClient(profile_key) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
327 return self.getRoomsJoined(client) |
1392
c7082457d03f
memory, plugin XEP-0045: getMainResource returns None when asking a MUC entity + fixes /whois on a MUC (bare) entity
souliane <souliane@mailoo.org>
parents:
1384
diff
changeset
|
328 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
329 def getRoomsJoined(self, client): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
330 """Return rooms where user is""" |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
331 result = [] |
3028 | 332 for room in list(client._muc_client.joined_rooms.values()): |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
333 if room.state == ROOM_STATE_LIVE: |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
334 result.append((room.roomJID.userhost(), self._getOccupants(room), room.nick, room.subject)) |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
335 return result |
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
336 |
2461
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
337 def _getRoomNick(self, room_jid_s, profile_key=C.PROF_KEY_NONE): |
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
338 client = self.host.getClient(profile_key) |
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
339 return self.getRoomNick(client, jid.JID(room_jid_s)) |
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
340 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
341 def getRoomNick(self, client, room_jid): |
93 | 342 """return nick used in room by user |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
343 |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
344 @param room_jid (jid.JID): JID of the room |
93 | 345 @profile_key: profile |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
346 @return: nick or empty string in case of error |
2461
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
347 @raise exceptions.Notfound: use has not joined the room |
715
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
348 """ |
2461
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
349 self.checkRoomJoined(client, room_jid) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
350 return client._muc_client.joined_rooms[room_jid].nick |
715
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
351 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
352 def _configureRoom(self, room_jid_s, profile_key=C.PROF_KEY_NONE): |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
353 client = self.host.getClient(profile_key) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
354 d = self.configureRoom(client, jid.JID(room_jid_s)) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
355 d.addCallback(lambda xmlui: xmlui.toXml()) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
356 return d |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
357 |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
358 def _configureRoomMenu(self, menu_data, profile): |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
359 """Return room configuration form |
1135
3158f9e08760
plugin OTR: a warning is logged when Account is instancied with a bare jid.
Goffi <goffi@goffi.org>
parents:
1101
diff
changeset
|
360 |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
361 @param menu_data: %(menu_data)s |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
362 @param profile: %(doc_profile)s |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
363 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
364 client = self.host.getClient(profile) |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
365 try: |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
366 room_jid = jid.JID(menu_data['room_jid']) |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
367 except KeyError: |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
368 log.error(_("room_jid key is not present !")) |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
369 return defer.fail(exceptions.DataError) |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
370 |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
371 def xmluiReceived(xmlui): |
2584
f8e4d855001e
plugin XEP-0045: display a note when no configuration is available on the room
Goffi <goffi@goffi.org>
parents:
2583
diff
changeset
|
372 if not xmlui: |
3028 | 373 msg = D_("No configuration available for this room") |
2584
f8e4d855001e
plugin XEP-0045: display a note when no configuration is available on the room
Goffi <goffi@goffi.org>
parents:
2583
diff
changeset
|
374 return {"xmlui": xml_tools.note(msg).toXml()} |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
375 return {"xmlui": xmlui.toXml()} |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
376 return self.configureRoom(client, room_jid).addCallback(xmluiReceived) |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
377 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
378 def configureRoom(self, client, room_jid): |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
379 """return the room configuration form |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
380 |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
381 @param room: jid of the room to configure |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
382 @return: configuration form as XMLUI |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
383 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
384 self.checkRoomJoined(client, room_jid) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
385 |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
386 def config2XMLUI(result): |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
387 if not result: |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
388 return "" |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
389 session_id, session_data = self._sessions.newSession(profile=client.profile) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
390 session_data["room_jid"] = room_jid |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
391 xmlui = xml_tools.dataForm2XMLUI(result, submit_id=self.__submit_conf_id) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
392 xmlui.session_id = session_id |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
393 return xmlui |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
394 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
395 d = client._muc_client.getConfiguration(room_jid) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
396 d.addCallback(config2XMLUI) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
397 return d |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
398 |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
399 def _submitConfiguration(self, raw_data, profile): |
2583
8378806a70fe
plugin XEP-0045: fixed room configuration cancellation
Goffi <goffi@goffi.org>
parents:
2581
diff
changeset
|
400 cancelled = C.bool(raw_data.get("cancelled", C.BOOL_FALSE)) |
8378806a70fe
plugin XEP-0045: fixed room configuration cancellation
Goffi <goffi@goffi.org>
parents:
2581
diff
changeset
|
401 if cancelled: |
8378806a70fe
plugin XEP-0045: fixed room configuration cancellation
Goffi <goffi@goffi.org>
parents:
2581
diff
changeset
|
402 return defer.succeed({}) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
403 client = self.host.getClient(profile) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
404 try: |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
405 session_data = self._sessions.profileGet(raw_data["session_id"], profile) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
406 except KeyError: |
1068
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
407 log.warning(D_("Session ID doesn't exist, session has probably expired.")) |
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
408 _dialog = xml_tools.XMLUI('popup', title=D_('Room configuration failed')) |
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
409 _dialog.addText(D_("Session ID doesn't exist, session has probably expired.")) |
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
410 return defer.succeed({'xmlui': _dialog.toXml()}) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
411 |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
412 data = xml_tools.XMLUIResult2DataFormResult(raw_data) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
413 d = client._muc_client.configure(session_data['room_jid'], data) |
1068
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
414 _dialog = xml_tools.XMLUI('popup', title=D_('Room configuration succeed')) |
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
415 _dialog.addText(D_("The new settings have been saved.")) |
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
416 d.addCallback(lambda ignore: {'xmlui': _dialog.toXml()}) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
417 del self._sessions[raw_data["session_id"]] |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
418 return d |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
419 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
420 def isNickInRoom(self, client, room_jid, nick): |
522
3446ce33247d
plugin XEP-0045: added isNickInRoom method
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
421 """Tell if a nick is currently present in a room""" |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
422 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
423 return client._muc_client.joined_rooms[room_jid].inRoster(muc.User(nick)) |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
424 |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
425 def _getMUCService(self, jid_=None, profile=C.PROF_KEY_NONE): |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
426 client = self.host.getClient(profile) |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
427 d = self.getMUCService(client, jid_ or None) |
3028 | 428 d.addCallback(lambda service_jid: service_jid.full() if service_jid is not None else '') |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
429 return d |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
430 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
431 @defer.inlineCallbacks |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
432 def getMUCService(self, client, jid_=None): |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
433 """Return first found MUC service of an entity |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
434 |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
435 @param jid_: entity which may have a MUC service, or None for our own server |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
436 @return (jid.JID, None): found service jid or None |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
437 """ |
2468
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
438 if jid_ is None: |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
439 try: |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
440 muc_service = client.muc_service |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
441 except AttributeError: |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
442 pass |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
443 else: |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
444 # we have a cached value, we return it |
8f14c1865e9e
plugin XEP-0045: new mucGetService bridge method to retrieve MUC service of the server.
Goffi <goffi@goffi.org>
parents:
2461
diff
changeset
|
445 defer.returnValue(muc_service) |
2148
a543eda2c923
core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
446 services = yield self.host.findServiceEntities(client, "conference", "text", jid_) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
447 for service in services: |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
448 if ".irc." not in service.userhost(): |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
449 # FIXME: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
450 # This ugly hack is here to avoid an issue with openfire: the IRC gateway |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
451 # use "conference/text" identity (instead of "conference/irc") |
712
f610864eb7a5
plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
452 muc_service = service |
f610864eb7a5
plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
453 break |
2613
9680cd958529
plugin XEP-0045: fixed crash when muc service is not found
Goffi <goffi@goffi.org>
parents:
2584
diff
changeset
|
454 else: |
9680cd958529
plugin XEP-0045: fixed crash when muc service is not found
Goffi <goffi@goffi.org>
parents:
2584
diff
changeset
|
455 muc_service = None |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
456 defer.returnValue(muc_service) |
712
f610864eb7a5
plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
457 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
458 def _getUniqueName(self, muc_service="", profile_key=C.PROF_KEY_NONE): |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
459 client = self.host.getClient(profile_key) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
460 return self.getUniqueName(client, muc_service or None).full() |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
461 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
462 def getUniqueName(self, client, muc_service=None): |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
463 """Return unique name for a room, avoiding collision |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
464 |
1356
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
465 @param muc_service (jid.JID) : leave empty string to use the default service |
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
466 @return: jid.JID (unique room bare JID) |
712
f610864eb7a5
plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
467 """ |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
468 # TODO: we should use #RFC-0045 10.1.4 when available here |
3028 | 469 room_name = str(uuid.uuid4()) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
470 if muc_service is None: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
471 try: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
472 muc_service = client.muc_service |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
473 except AttributeError: |
3028 | 474 raise exceptions.NotReady("Main server MUC service has not been checked yet") |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
475 if muc_service is None: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
476 log.warning(_("No MUC service found on main server")) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
477 raise exceptions.FeatureNotFound |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
478 |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
479 muc_service = muc_service.userhost() |
3028 | 480 return jid.JID("{}@{}".format(room_name, muc_service)) |
319 | 481 |
1407
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
482 def getDefaultMUC(self): |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
483 """Return the default MUC. |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
484 |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
485 @return: unicode |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
486 """ |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
487 return self.host.memory.getConfig(CONFIG_SECTION, 'default_muc', default_conf['default_muc']) |
77f07ea90420
plugin XEP-0045, quick_frontend, primitivus: replace C.DEFAULT_MUC by bridge method getDefaultMUC (value is defined in plugin XEP-0045 and can be overriden with the config file)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
488 |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
489 def _join_eb(self, failure_, client): |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
490 failure_.trap(AlreadyJoined) |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
491 room = failure_.value.room |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
492 return [True] + self._getRoomJoinedArgs(room, client.profile) |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
493 |
2028
70bd7b242a9e
plugin XEP-0045: fixed options parameter handling in bridge callback
Goffi <goffi@goffi.org>
parents:
2021
diff
changeset
|
494 def _join(self, room_jid_s, nick, options, profile_key=C.PROF_KEY_NONE): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
495 """join method used by bridge |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
496 |
2461
34cb8b713370
plugin XEP-0045: added mucNickGet to retrieve our nickname in a MUC room
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
497 @return (tuple): already_joined boolean + room joined arguments (see [_getRoomJoinedArgs]) |
712
f610864eb7a5
plugins (MUC, tools, games): generalize the generation of a unique room name when joining a MUC and no room is specified:
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
498 """ |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
499 client = self.host.getClient(profile_key) |
1356
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
500 if room_jid_s: |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
501 muc_service = client.muc_service |
1356
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
502 try: |
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
503 room_jid = jid.JID(room_jid_s) |
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
504 except (RuntimeError, jid.InvalidFormat, AttributeError): |
3028 | 505 return defer.fail(jid.InvalidFormat(_("Invalid room identifier: {room_id}'. Please give a room short or full identifier like 'room' or 'room@{muc_service}'.").format( |
2170 | 506 room_id=room_jid_s, |
3028 | 507 muc_service=str(muc_service)))) |
1384
73f8582c7c99
plugins XEP-0045, XEP-0249: allow to join / invite without specifying the JID's host part (use client's values)
souliane <souliane@mailoo.org>
parents:
1381
diff
changeset
|
508 if not room_jid.user: |
73f8582c7c99
plugins XEP-0045, XEP-0249: allow to join / invite without specifying the JID's host part (use client's values)
souliane <souliane@mailoo.org>
parents:
1381
diff
changeset
|
509 room_jid.user, room_jid.host = room_jid.host, muc_service |
1356
c01cbd8fc8dd
plugin XEP-0045: make joinMUC asynchronous and fixes its handler
souliane <souliane@mailoo.org>
parents:
1315
diff
changeset
|
510 else: |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
511 room_jid = self.getUniqueName(profile_key=client.profile) |
743
5a131930348d
plugin XEP-0045: remove redondant errback from _join
souliane <souliane@mailoo.org>
parents:
742
diff
changeset
|
512 # TODO: error management + signal in bridge |
2028
70bd7b242a9e
plugin XEP-0045: fixed options parameter handling in bridge callback
Goffi <goffi@goffi.org>
parents:
2021
diff
changeset
|
513 d = self.join(client, room_jid, nick, options or None) |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
514 d.addCallback(lambda room: [False] + self._getRoomJoinedArgs(room, client.profile)) |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
515 d.addErrback(self._join_eb, client) |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
516 return d |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
517 |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
518 def join(self, client, room_jid, nick=None, options=None): |
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
519 if not nick: |
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
520 nick = client.jid.user |
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
521 if options is None: |
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
522 options = {} |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
523 if room_jid in client._muc_client.joined_rooms: |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
524 room = client._muc_client.joined_rooms[room_jid] |
3028 | 525 log.info(_('{profile} is already in room {room_jid}').format( |
3002
6acaa8244220
plugin 0249: fixed invitation handling + some improvments:
Goffi <goffi@goffi.org>
parents:
2994
diff
changeset
|
526 profile=client.profile, room_jid = room_jid.userhost())) |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
527 return defer.fail(AlreadyJoined(room)) |
3028 | 528 log.info(_("[{profile}] is joining room {room} with nick {nick}").format( |
3002
6acaa8244220
plugin 0249: fixed invitation handling + some improvments:
Goffi <goffi@goffi.org>
parents:
2994
diff
changeset
|
529 profile=client.profile, room=room_jid.userhost(), nick=nick)) |
3060
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
530 self.host.bridge.mucRoomPrepareJoin(room_jid.userhost(), client.profile) |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
531 |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
532 password = options.get("password") |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
533 |
3002
6acaa8244220
plugin 0249: fixed invitation handling + some improvments:
Goffi <goffi@goffi.org>
parents:
2994
diff
changeset
|
534 d = client._muc_client.join(room_jid, nick, password) |
6acaa8244220
plugin 0249: fixed invitation handling + some improvments:
Goffi <goffi@goffi.org>
parents:
2994
diff
changeset
|
535 d.addCallbacks(self._joinCb, self._joinEb, |
6acaa8244220
plugin 0249: fixed invitation handling + some improvments:
Goffi <goffi@goffi.org>
parents:
2994
diff
changeset
|
536 (client, room_jid, nick), |
6acaa8244220
plugin 0249: fixed invitation handling + some improvments:
Goffi <goffi@goffi.org>
parents:
2994
diff
changeset
|
537 errbackArgs=(client, room_jid, nick, password)) |
6acaa8244220
plugin 0249: fixed invitation handling + some improvments:
Goffi <goffi@goffi.org>
parents:
2994
diff
changeset
|
538 return d |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
539 |
3008
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
540 def popRooms(self, client): |
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
541 """Remove rooms and return data needed to re-join them |
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
542 |
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
543 This methods is to be called before a hot reconnection |
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
544 @return (list[(jid.JID, unicode)]): arguments needed to re-join the rooms |
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
545 This list can be used directly (unpacked) with self.join |
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
546 """ |
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
547 args_list = [] |
3028 | 548 for room in list(client._muc_client.joined_rooms.values()): |
3008
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
549 client._muc_client._removeRoom(room.roomJID) |
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
550 args_list.append((client, room.roomJID, room.nick)) |
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
551 return args_list |
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
552 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
553 def _nick(self, room_jid_s, nick, profile_key=C.PROF_KEY_NONE): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
554 client = self.host.getClient(profile_key) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
555 return self.nick(client, jid.JID(room_jid_s), nick) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
556 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
557 def nick(self, client, room_jid, nick): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
558 """Change nickname in a room""" |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
559 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
560 return client._muc_client.nick(room_jid, nick) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
561 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
562 def _leave(self, room_jid, profile_key): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
563 client = self.host.getClient(profile_key) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
564 return self.leave(client, jid.JID(room_jid)) |
515
29b5ef129488
plugin XEP-0045, plugin text commands: added '/title' command
Goffi <goffi@goffi.org>
parents:
509
diff
changeset
|
565 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
566 def leave(self, client, room_jid): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
567 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
568 return client._muc_client.leave(room_jid) |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
569 |
2021
6c51e8f17c92
plugin XEP-0045: added bridge method to change subject
Goffi <goffi@goffi.org>
parents:
1992
diff
changeset
|
570 def _subject(self, room_jid_s, new_subject, profile_key): |
6c51e8f17c92
plugin XEP-0045: added bridge method to change subject
Goffi <goffi@goffi.org>
parents:
1992
diff
changeset
|
571 client = self.host.getClient(profile_key) |
6c51e8f17c92
plugin XEP-0045: added bridge method to change subject
Goffi <goffi@goffi.org>
parents:
1992
diff
changeset
|
572 return self.subject(client, jid.JID(room_jid_s), new_subject) |
6c51e8f17c92
plugin XEP-0045: added bridge method to change subject
Goffi <goffi@goffi.org>
parents:
1992
diff
changeset
|
573 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
574 def subject(self, client, room_jid, subject): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
575 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
576 return client._muc_client.subject(room_jid, subject) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
577 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2066
diff
changeset
|
578 def getHandler(self, client): |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
579 # create a MUC client and associate it with profile' session |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
580 muc_client = client._muc_client = SatMUCClient(self) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
581 return muc_client |
72 | 582 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
583 def kick(self, client, nick, room_jid, options=None): |
2689
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2613
diff
changeset
|
584 """Kick a participant from the room |
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2613
diff
changeset
|
585 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
586 @param nick (str): nick of the user to kick |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
587 @param room_jid_s (JID): jid of the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
588 @param options (dict): attribute with extra info (reason, password) as in #XEP-0045 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
589 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
590 if options is None: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
591 options = {} |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
592 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
593 return client._muc_client.kick(room_jid, nick, reason=options.get('reason', None)) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
594 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
595 def ban(self, client, entity_jid, room_jid, options=None): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
596 """Ban an entity from the room |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
597 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
598 @param entity_jid (JID): bare jid of the entity to be banned |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
599 @param room_jid (JID): jid of the room |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
600 @param options: attribute with extra info (reason, password) as in #XEP-0045 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
601 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
602 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
603 if options is None: |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
604 options = {} |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
605 assert not entity_jid.resource |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
606 assert not room_jid.resource |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
607 return client._muc_client.ban(room_jid, entity_jid, reason=options.get('reason', None)) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
608 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
609 def affiliate(self, client, entity_jid, room_jid, options): |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
610 """Change the affiliation of an entity |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
611 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
612 @param entity_jid (JID): bare jid of the entity |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
613 @param room_jid_s (JID): jid of the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
614 @param options: attribute with extra info (reason, nick) as in #XEP-0045 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
615 """ |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
616 self.checkRoomJoined(client, room_jid) |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
617 assert not entity_jid.resource |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
618 assert not room_jid.resource |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
619 assert 'affiliation' in options |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
620 # TODO: handles reason and nick |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
621 return client._muc_client.modifyAffiliationList(room_jid, [entity_jid], options['affiliation']) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
622 |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
623 # Text commands # |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
624 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
625 def cmd_nick(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
626 """change nickname |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
627 |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
628 @command (group): new_nick |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
629 - new_nick: new nick to use |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
630 """ |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
631 nick = mess_data["unparsed"].strip() |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
632 if nick: |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
633 room = mess_data["to"] |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
634 self.nick(client, room, nick) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
635 |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
636 return False |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
637 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
638 def cmd_join(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
639 """join a new room |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
640 |
1381
0d12d4e32664
plugin XEP-0045: /join text command can be used in all contexts, not only group
Goffi <goffi@goffi.org>
parents:
1371
diff
changeset
|
641 @command (all): JID |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
642 - JID: room to join (on the same service if full jid is not specified) |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
643 """ |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
644 if mess_data["unparsed"].strip(): |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
645 room_jid = self.text_cmds.getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
646 nick = (self.getRoomNick(client, room_jid) or |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
647 client.jid.user) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
648 self.join(client, room_jid, nick, {}) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
649 |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
650 return False |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
651 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
652 def cmd_leave(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
653 """quit a room |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
654 |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
655 @command (group): [ROOM_JID] |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
656 - ROOM_JID: jid of the room to live (current room if not specified) |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
657 """ |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
658 if mess_data["unparsed"].strip(): |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
659 room = self.text_cmds.getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
660 else: |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
661 room = mess_data["to"] |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
662 |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
663 self.leave(client, room) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
664 |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
665 return False |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
666 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
667 def cmd_part(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
668 """just a synonym of /leave |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
669 |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
670 @command (group): [ROOM_JID] |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
671 - ROOM_JID: jid of the room to live (current room if not specified) |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
672 """ |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
673 return self.cmd_leave(client, mess_data) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
674 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
675 def cmd_kick(self, client, mess_data): |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
676 """kick a room member |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
677 |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
678 @command (group): ROOM_NICK |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
679 - ROOM_NICK: the nick of the person to kick |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
680 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
681 options = mess_data["unparsed"].strip().split() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
682 try: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
683 nick = options[0] |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
684 assert self.isNickInRoom(client, mess_data["to"], nick) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
685 except (IndexError, AssertionError): |
3028 | 686 feedback = _("You must provide a member's nick to kick.") |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
687 self.text_cmds.feedBack(client, feedback, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
688 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
689 |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
690 d = self.kick(client, nick, mess_data["to"], {} if len(options) == 1 else {'reason': options[1]}) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
691 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
692 def cb(__): |
3028 | 693 feedback_msg = _('You have kicked {}').format(nick) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
694 if len(options) > 1: |
3028 | 695 feedback_msg += _(' for the following reason: {}').format(options[1]) |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
696 self.text_cmds.feedBack(client, feedback_msg, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
697 return True |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
698 d.addCallback(cb) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
699 return d |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
700 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
701 def cmd_ban(self, client, mess_data): |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
702 """ban an entity from the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
703 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
704 @command (group): (JID) [reason] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
705 - JID: the JID of the entity to ban |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
706 - reason: the reason why this entity is being banned |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
707 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
708 options = mess_data["unparsed"].strip().split() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
709 try: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
710 jid_s = options[0] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
711 entity_jid = jid.JID(jid_s).userhostJID() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
712 assert(entity_jid.user) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
713 assert(entity_jid.host) |
1742
244a605623d6
complete the Exception's list when catching JID error:
souliane <souliane@mailoo.org>
parents:
1700
diff
changeset
|
714 except (RuntimeError, jid.InvalidFormat, AttributeError, IndexError, AssertionError): |
3028 | 715 feedback = _("You must provide a valid JID to ban, like in '/ban contact@example.net'") |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
716 self.text_cmds.feedBack(client, feedback, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
717 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
718 |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
719 d = self.ban(client, entity_jid, mess_data["to"], {} if len(options) == 1 else {'reason': options[1]}) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
720 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
721 def cb(__): |
3028 | 722 feedback_msg = _('You have banned {}').format(entity_jid) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
723 if len(options) > 1: |
3028 | 724 feedback_msg += _(' for the following reason: {}').format(options[1]) |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
725 self.text_cmds.feedBack(client, feedback_msg, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
726 return True |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
727 d.addCallback(cb) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
728 return d |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
729 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
730 def cmd_affiliate(self, client, mess_data): |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
731 """affiliate an entity to the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
732 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
733 @command (group): (JID) [owner|admin|member|none|outcast] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
734 - JID: the JID of the entity to affiliate |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
735 - owner: grant owner privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
736 - admin: grant admin privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
737 - member: grant member privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
738 - none: reset entity privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
739 - outcast: ban entity |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
740 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
741 options = mess_data["unparsed"].strip().split() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
742 try: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
743 jid_s = options[0] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
744 entity_jid = jid.JID(jid_s).userhostJID() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
745 assert(entity_jid.user) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
746 assert(entity_jid.host) |
1742
244a605623d6
complete the Exception's list when catching JID error:
souliane <souliane@mailoo.org>
parents:
1700
diff
changeset
|
747 except (RuntimeError, jid.InvalidFormat, AttributeError, IndexError, AssertionError): |
3028 | 748 feedback = _("You must provide a valid JID to affiliate, like in '/affiliate contact@example.net member'") |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
749 self.text_cmds.feedBack(client, feedback, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
750 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
751 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
752 affiliation = options[1] if len(options) > 1 else 'none' |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
753 if affiliation not in AFFILIATIONS: |
3028 | 754 feedback = _("You must provide a valid affiliation: %s") % ' '.join(AFFILIATIONS) |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
755 self.text_cmds.feedBack(client, feedback, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
756 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
757 |
1977
bdc6a5b07922
plugin XEP-0045: fixed calls to join, nick, kick, ban and affiliate
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
758 d = self.affiliate(client, entity_jid, mess_data["to"], {'affiliation': affiliation}) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
759 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
760 def cb(__): |
3028 | 761 feedback_msg = _('New affiliation for %(entity)s: %(affiliation)s').format(entity=entity_jid, affiliation=affiliation) |
1989
757c512fe06c
plugin XEP-0045: various fixes/improvments:
Goffi <goffi@goffi.org>
parents:
1986
diff
changeset
|
762 self.text_cmds.feedBack(client, feedback_msg, mess_data) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
763 return True |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
764 d.addCallback(cb) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
765 return d |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
766 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
767 def cmd_title(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
768 """change room's subject |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
769 |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
770 @command (group): title |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
771 - title: new room subject |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
772 """ |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
773 subject = mess_data["unparsed"].strip() |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
774 |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
775 if subject: |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
776 room = mess_data["to"] |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
777 self.subject(client, room, subject) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
778 |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
779 return False |
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
780 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
781 def cmd_topic(self, client, mess_data): |
1371
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
782 """just a synonym of /title |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
783 |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
784 @command (group): title |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
785 - title: new room subject |
876c9fbd0b3d
plugin text command, XEP-0045, XEP-0048, XEP-0249: removed feedBackWrongContext which is no more usefull with new _contextValid method
Goffi <goffi@goffi.org>
parents:
1358
diff
changeset
|
786 """ |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
787 return self.cmd_title(client, mess_data) |
926
d609581bf74a
plugin text commands: refactoring, text now only contain main commands, and other plugin can add commands themselve:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
788 |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
789 def cmd_list(self, client, mess_data): |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
790 """list available rooms in a muc server |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
791 |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
792 @command (all): [MUC_SERVICE] |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
793 - MUC_SERVICE: service to request |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
794 empty value will request room's service for a room, |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
795 or user's server default MUC service in a one2one chat |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
796 """ |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
797 unparsed = mess_data["unparsed"].strip() |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
798 try: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
799 service = jid.JID(unparsed) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
800 except RuntimeError: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
801 if mess_data['type'] == C.MESS_TYPE_GROUPCHAT: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
802 room_jid = mess_data["to"] |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
803 service = jid.JID(room_jid.host) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
804 elif client.muc_service is not None: |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
805 service = client.muc_service |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
806 else: |
3028 | 807 msg = D_("No known default MUC service".format(unparsed)) |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
808 self.text_cmds.feedBack(client, msg, mess_data) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
809 return False |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
810 except jid.InvalidFormat: |
3028 | 811 msg = D_("{} is not a valid JID!".format(unparsed)) |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
812 self.text_cmds.feedBack(client, msg, mess_data) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
813 return False |
2148
a543eda2c923
core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
814 d = self.host.getDiscoItems(client, service) |
1990
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
815 d.addCallback(self._showListUI, client, service) |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
816 |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
817 return False |
dfbe0bb056dc
plugin XEP-0045: added /list text command:
Goffi <goffi@goffi.org>
parents:
1989
diff
changeset
|
818 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
819 def _whois(self, client, whois_msg, mess_data, target_jid): |
1199 | 820 """ Add MUC user information to whois """ |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
821 if mess_data['type'] != "groupchat": |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
822 return |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
823 if target_jid.userhostJID() not in client._muc_client.joined_rooms: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
824 log.warning(_("This room has not been joined")) |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
825 return |
1392
c7082457d03f
memory, plugin XEP-0045: getMainResource returns None when asking a MUC entity + fixes /whois on a MUC (bare) entity
souliane <souliane@mailoo.org>
parents:
1384
diff
changeset
|
826 if not target_jid.resource: |
c7082457d03f
memory, plugin XEP-0045: getMainResource returns None when asking a MUC entity + fixes /whois on a MUC (bare) entity
souliane <souliane@mailoo.org>
parents:
1384
diff
changeset
|
827 return |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
828 user = client._muc_client.joined_rooms[target_jid.userhostJID()].getUser(target_jid.resource) |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
829 whois_msg.append(_("Nickname: %s") % user.nick) |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
830 if user.entity: |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
831 whois_msg.append(_("Entity: %s") % user.entity) |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
832 if user.affiliation != 'none': |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
833 whois_msg.append(_("Affiliation: %s") % user.affiliation) |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
834 if user.role != 'none': |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
835 whois_msg.append(_("Role: %s") % user.role) |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
836 if user.status: |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
837 whois_msg.append(_("Status: %s") % user.status) |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
838 if user.show: |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
839 whois_msg.append(_("Show: %s") % user.show) |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
840 |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
841 def presenceTrigger(self, presence_elt, client): |
3008
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
842 # FIXME: should we add a privacy parameters in settings to activate before |
c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
Goffi <goffi@goffi.org>
parents:
3002
diff
changeset
|
843 # broadcasting the presence to all MUC rooms ? |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
844 muc_client = client._muc_client |
3028 | 845 for room_jid, room in muc_client.joined_rooms.items(): |
2815
27d9d25ec3cd
plugin XEP-0045: fixed issue with deepcopy by using new xml_tools.elementCopy method
Goffi <goffi@goffi.org>
parents:
2794
diff
changeset
|
846 elt = xml_tools.elementCopy(presence_elt) |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
847 elt['to'] = room_jid.userhost() + '/' + room.nick |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
848 client.presence.send(elt) |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
849 return True |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
850 |
2822
5284be4c601b
plugin XEP-0045: cache presences if they are received before the room is fully joined:
Goffi <goffi@goffi.org>
parents:
2815
diff
changeset
|
851 def presenceReceivedTrigger(self, client, entity, show, priority, statuses): |
5284be4c601b
plugin XEP-0045: cache presences if they are received before the room is fully joined:
Goffi <goffi@goffi.org>
parents:
2815
diff
changeset
|
852 entity_bare = entity.userhostJID() |
5284be4c601b
plugin XEP-0045: cache presences if they are received before the room is fully joined:
Goffi <goffi@goffi.org>
parents:
2815
diff
changeset
|
853 muc_client = client._muc_client |
5284be4c601b
plugin XEP-0045: cache presences if they are received before the room is fully joined:
Goffi <goffi@goffi.org>
parents:
2815
diff
changeset
|
854 if entity_bare in muc_client.joined_rooms: |
2991
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
855 # presence is already handled in (un)availableReceived |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
856 return False |
2822
5284be4c601b
plugin XEP-0045: cache presences if they are received before the room is fully joined:
Goffi <goffi@goffi.org>
parents:
2815
diff
changeset
|
857 return True |
5284be4c601b
plugin XEP-0045: cache presences if they are received before the room is fully joined:
Goffi <goffi@goffi.org>
parents:
2815
diff
changeset
|
858 |
72 | 859 |
3028 | 860 @implementer(iwokkel.IDisco) |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
861 class SatMUCClient(muc.MUCClient): |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
862 |
72 | 863 def __init__(self, plugin_parent): |
864 self.plugin_parent = plugin_parent | |
865 muc.MUCClient.__init__(self) | |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
866 self._changing_nicks = set() # used to keep trace of who is changing nick, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
867 # and to discard userJoinedRoom signal in this case |
3028 | 868 print("init SatMUCClient OK") |
515
29b5ef129488
plugin XEP-0045, plugin text commands: added '/title' command
Goffi <goffi@goffi.org>
parents:
509
diff
changeset
|
869 |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
870 @property |
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
871 def joined_rooms(self): |
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
872 return self._rooms |
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
873 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
874 @property |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
875 def host(self): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
876 return self.plugin_parent.host |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
877 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
878 @property |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
879 def client(self): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
880 return self.parent |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
881 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
882 @property |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
883 def _mam(self): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
884 return self.plugin_parent._mam |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
885 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
886 @property |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
887 def _si(self): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
888 return self.plugin_parent._si |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
889 |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
890 def changeRoomState(self, room, new_state): |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
891 """Check that room is in expected state, and change it |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
892 |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
893 @param new_state: one of ROOM_STATE_* |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
894 """ |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
895 new_state_idx = ROOM_STATES.index(new_state) |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
896 if new_state_idx == -1: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
897 raise exceptions.InternalError("unknown room state") |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
898 if new_state_idx < 1: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
899 raise exceptions.InternalError("unexpected new room state ({room}): {state}".format( |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
900 room=room.userhost(), |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
901 state=new_state)) |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
902 expected_state = ROOM_STATES[new_state_idx-1] |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
903 if room.state != expected_state: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
904 log.error(_( |
3028 | 905 "room {room} is not in expected state: room is in state {current_state} " |
906 "while we were expecting {expected_state}").format( | |
3015
7b8d40b17451
plugin XEP-0045: fixed a bad attribute in a log message.
Goffi <goffi@goffi.org>
parents:
3008
diff
changeset
|
907 room=room.roomJID.userhost(), |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
908 current_state=room.state, |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
909 expected_state=expected_state)) |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
910 room.state = new_state |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
911 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
912 def _addRoom(self, room): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
913 super(SatMUCClient, self)._addRoom(room) |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
914 room._roster_ok = False # True when occupants list has been fully received |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
915 room.state = ROOM_STATE_OCCUPANTS |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
916 # FIXME: check if history_d is not redundant with fully_joined |
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
917 room.fully_joined = defer.Deferred() # called when everything is OK |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
918 # cache data until room is ready |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
919 # list of elements which will be re-injected in stream |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
920 room._cache = [] |
2822
5284be4c601b
plugin XEP-0045: cache presences if they are received before the room is fully joined:
Goffi <goffi@goffi.org>
parents:
2815
diff
changeset
|
921 # we only need to keep last presence status for each jid, so a dict is suitable |
5284be4c601b
plugin XEP-0045: cache presences if they are received before the room is fully joined:
Goffi <goffi@goffi.org>
parents:
2815
diff
changeset
|
922 room._cache_presence = {} |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
923 |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
924 @defer.inlineCallbacks |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
925 def _joinLegacy(self, client, room_jid, nick, password): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
926 """Join room an retrieve history with legacy method""" |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
927 mess_data_list = yield self.host.memory.historyGet(room_jid, |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
928 client.jid.userhostJID(), |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
929 limit=1, |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
930 between=True, |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
931 profile=client.profile) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
932 if mess_data_list: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
933 timestamp = mess_data_list[0][1] |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
934 # we use seconds since last message to get backlog without duplicates |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
935 # and we remove 1 second to avoid getting the last message again |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
936 seconds = int(time.time() - timestamp) - 1 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
937 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
938 seconds = None |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
939 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
940 room = yield super(SatMUCClient, self).join( |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
941 room_jid, nick, muc.HistoryOptions(seconds=seconds), password) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
942 # used to send bridge signal once backlog are written in history |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
943 room._history_type = HISTORY_LEGACY |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
944 room._history_d = defer.Deferred() |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
945 room._history_d.callback(None) |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
946 defer.returnValue(room) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
947 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
948 @defer.inlineCallbacks |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
949 def _joinMAM(self, client, room_jid, nick, password): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
950 """Join room and retrieve history using MAM""" |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
951 room = yield super(SatMUCClient, self).join( |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
952 # we don't want any history from room as we'll get it with MAM |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
953 room_jid, nick, muc.HistoryOptions(maxStanzas=0), password=password) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
954 room._history_type = HISTORY_MAM |
3060
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
955 history_d = room._history_d = defer.Deferred() |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
956 # we trigger now the deferred so all callback are processed as soon as possible |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
957 # and in order |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
958 history_d.callback(None) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
959 |
2826
177f11163ed0
plugin XEP-0045: fixed message type filtering when getting last stanza_id to retrieve history with MAM
Goffi <goffi@goffi.org>
parents:
2822
diff
changeset
|
960 last_mess = yield self.host.memory.historyGet( |
177f11163ed0
plugin XEP-0045: fixed message type filtering when getting last stanza_id to retrieve history with MAM
Goffi <goffi@goffi.org>
parents:
2822
diff
changeset
|
961 room_jid, |
177f11163ed0
plugin XEP-0045: fixed message type filtering when getting last stanza_id to retrieve history with MAM
Goffi <goffi@goffi.org>
parents:
2822
diff
changeset
|
962 None, |
177f11163ed0
plugin XEP-0045: fixed message type filtering when getting last stanza_id to retrieve history with MAM
Goffi <goffi@goffi.org>
parents:
2822
diff
changeset
|
963 limit=1, |
177f11163ed0
plugin XEP-0045: fixed message type filtering when getting last stanza_id to retrieve history with MAM
Goffi <goffi@goffi.org>
parents:
2822
diff
changeset
|
964 between=False, |
177f11163ed0
plugin XEP-0045: fixed message type filtering when getting last stanza_id to retrieve history with MAM
Goffi <goffi@goffi.org>
parents:
2822
diff
changeset
|
965 filters={ |
3028 | 966 'types': C.MESS_TYPE_GROUPCHAT, |
967 'last_stanza_id': True}, | |
2826
177f11163ed0
plugin XEP-0045: fixed message type filtering when getting last stanza_id to retrieve history with MAM
Goffi <goffi@goffi.org>
parents:
2822
diff
changeset
|
968 profile=client.profile) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
969 if last_mess: |
3028 | 970 stanza_id = last_mess[0][-1]['stanza_id'] |
3060
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
971 rsm_req = rsm.RSMRequest(max_=20, after=stanza_id) |
2724
35a0ab3032bb
plugin XEP-0045: don't loop when initiating MAM archive
Goffi <goffi@goffi.org>
parents:
2723
diff
changeset
|
972 no_loop=False |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
973 else: |
3028 | 974 log.info("We have no MAM archive for room {room_jid}.".format( |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
975 room_jid=room_jid)) |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
976 # we don't want the whole archive if we have no archive yet |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
977 # as it can be huge |
3028 | 978 rsm_req = rsm.RSMRequest(max_=50, before='') |
2724
35a0ab3032bb
plugin XEP-0045: don't loop when initiating MAM archive
Goffi <goffi@goffi.org>
parents:
2723
diff
changeset
|
979 no_loop=True |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
980 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
981 mam_req = mam.MAMRequest(rsm_=rsm_req) |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
982 complete = False |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
983 count = 0 |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
984 while not complete: |
3080
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
985 try: |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
986 mam_data = yield self._mam.getArchives(client, mam_req, |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
987 service=room_jid) |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
988 except xmpp_error.StanzaError as e: |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
989 if last_mess and e.condition == 'item-not-found': |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
990 log.info( |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
991 f"requested item (with id {stanza_id!r}) can't be found in " |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
992 f"history of {room_jid}, history has probably been purged on " |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
993 f"server.") |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
994 # we get last items like for a new room |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
995 rsm_req = rsm.RSMRequest(max_=50, before='') |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
996 mam_req = mam.MAMRequest(rsm_=rsm_req) |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
997 no_loop=True |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
998 continue |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
999 else: |
16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Goffi <goffi@goffi.org>
parents:
3060
diff
changeset
|
1000 raise e |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1001 elt_list, rsm_response, mam_response = mam_data |
3028 | 1002 complete = True if no_loop else mam_response["complete"] |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1003 # we update MAM request for next iteration |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1004 mam_req.rsm.after = rsm_response.last |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1005 |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1006 if not elt_list: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1007 break |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1008 else: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1009 count += len(elt_list) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1010 |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1011 for mess_elt in elt_list: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1012 try: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1013 fwd_message_elt = self._mam.getMessageFromResult( |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1014 client, mess_elt, mam_req, service=room_jid) |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1015 except exceptions.DataError: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1016 continue |
3028 | 1017 if fwd_message_elt.getAttribute("to"): |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1018 log.warning( |
3028 | 1019 'Forwarded message element has a "to" attribute while it is ' |
1020 'forbidden by specifications') | |
1021 fwd_message_elt["to"] = client.jid.full() | |
3060
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1022 try: |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1023 mess_data = client.messageProt.parseMessage(fwd_message_elt) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1024 except Exception as e: |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1025 log.error( |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1026 f"Can't parse message, ignoring it: {e}\n" |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1027 f"{fwd_message_elt.toXml()}" |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1028 ) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1029 continue |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1030 # we attache parsed message data to element, to avoid parsing |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1031 # again in _addToHistory |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1032 fwd_message_elt._mess_data = mess_data |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1033 # and we inject to MUC workflow |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1034 client._muc_client._onGroupChat(fwd_message_elt) |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1035 |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1036 if not count: |
3028 | 1037 log.info(_("No message received while offline in {room_jid}".format( |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1038 room_jid=room_jid))) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1039 else: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1040 log.info( |
3028 | 1041 _("We have received {num_mess} message(s) in {room_jid} while " |
1042 "offline.") | |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2715
diff
changeset
|
1043 .format(num_mess=count, room_jid=room_jid)) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1044 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1045 # for legacy history, the following steps are done in receivedSubject but for MAM |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1046 # the order is different (we have to join then get MAM archive, so subject |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1047 # is received before archive), so we change state and add the callbacks here. |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1048 self.changeRoomState(room, ROOM_STATE_LIVE) |
3060
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1049 history_d.addCallbacks(self._historyCb, self._historyEb, [room], |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1050 errbackArgs=[room]) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1051 |
3060
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1052 # we wait for all callbacks to be processed |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1053 yield history_d |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1054 |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1055 defer.returnValue(room) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1056 |
2728
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
1057 @defer.inlineCallbacks |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1058 def join(self, room_jid, nick, password=None): |
2827
9a3b99acad91
plugin XEP-0045: fixed item-not-found exception when creating a room:
Goffi <goffi@goffi.org>
parents:
2826
diff
changeset
|
1059 room_service = jid.JID(room_jid.host) |
9a3b99acad91
plugin XEP-0045: fixed item-not-found exception when creating a room:
Goffi <goffi@goffi.org>
parents:
2826
diff
changeset
|
1060 has_mam = yield self.host.hasFeature(self.client, mam.NS_MAM, room_service) |
2728
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
1061 if not self._mam or not has_mam: |
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
1062 room = yield self._joinLegacy(self.client, room_jid, nick, password) |
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
1063 defer.returnValue(room) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1064 else: |
2728
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
1065 room = yield self._joinMAM(self.client, room_jid, nick, password) |
1b11da85492c
plugin XEP-0045: fixed bad MAM detection on join
Goffi <goffi@goffi.org>
parents:
2724
diff
changeset
|
1066 defer.returnValue(room) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1067 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1068 ## presence/roster ## |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
1069 |
1891
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1070 def availableReceived(self, presence): |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1071 """ |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1072 Available presence was received. |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1073 """ |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1074 # XXX: we override MUCClient.availableReceived to fix bugs |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1075 # (affiliation and role are not set) |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1076 |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1077 room, user = self._getRoomUser(presence) |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1078 |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1079 if room is None: |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1080 return |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1081 |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1082 if user is None: |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1083 nick = presence.sender.resource |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1084 if not nick: |
3028 | 1085 log.warning(_("missing nick in presence: {xml}").format( |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1086 xml = presence.toElement().toXml())) |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1087 return |
1891
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1088 user = muc.User(nick, presence.entity) |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1089 |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1090 # Update user data |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1091 user.role = presence.role |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1092 user.affiliation = presence.affiliation |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1093 user.status = presence.status |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1094 user.show = presence.show |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1095 |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1096 if room.inRoster(user): |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1097 self.userUpdatedStatus(room, user, presence.show, presence.status) |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1098 else: |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1099 room.addUser(user) |
b91c8637c656
plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream
Goffi <goffi@goffi.org>
parents:
1890
diff
changeset
|
1100 self.userJoinedRoom(room, user) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1101 |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1102 def unavailableReceived(self, presence): |
1358
bf3f669a6052
plugins XEP-0045, XEP-0249, parrot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1356
diff
changeset
|
1103 # XXX: we override this method to manage nickname change |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1104 """ |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1105 Unavailable presence was received. |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1106 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1107 If this was received from a MUC room occupant JID, that occupant has |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1108 left the room. |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1109 """ |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1110 room, user = self._getRoomUser(presence) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1111 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1112 if room is None or user is None: |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1113 return |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1114 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1115 room.removeUser(user) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1116 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1117 if muc.STATUS_CODE.NEW_NICK in presence.mucStatuses: |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1118 self._changing_nicks.add(presence.nick) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1119 self.userChangedNick(room, user, presence.nick) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1120 else: |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1121 self._changing_nicks.discard(presence.nick) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1122 self.userLeftRoom(room, user) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1123 |
74
6e3a06b4dd36
plugin xep-0045: added roomUserJoined and roomUserLeft signals
Goffi <goffi@goffi.org>
parents:
73
diff
changeset
|
1124 def userJoinedRoom(self, room, user): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1125 if user.nick == room.nick: |
2994
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1126 # we have received our own nick, |
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1127 # this mean that the full room roster was received |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1128 self.changeRoomState(room, ROOM_STATE_SELF_PRESENCE) |
3028 | 1129 log.debug("room {room} joined with nick {nick}".format( |
2994
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1130 room=room.occupantJID.userhost(), nick=user.nick)) |
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1131 # we set type so we don't have to use a deferred |
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1132 # with disco to check entity type |
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1133 self.host.memory.updateEntityData( |
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1134 room.roomJID, C.ENTITY_TYPE, C.ENTITY_TYPE_MUC, |
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1135 profile_key=self.client.profile) |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1136 elif room.state not in (ROOM_STATE_OCCUPANTS, ROOM_STATE_LIVE): |
2994
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1137 log.warning( |
3028 | 1138 "Received user presence data in a room before its initialisation " |
1139 "(current state: {state})," | |
1140 "this is not standard! Ignoring it: {room} ({nick})".format( | |
2994
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1141 state=room.state, |
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1142 room=room.roomJID.userhost(), |
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1143 nick=user.nick)) |
1984
de4fac507dc4
xep-0045: ignore non standard presence received between own presence and room subject
Goffi <goffi@goffi.org>
parents:
1977
diff
changeset
|
1144 return |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1145 else: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1146 if not room.fully_joined.called: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1147 return |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1148 try: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1149 self._changing_nicks.remove(user.nick) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1150 except KeyError: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1151 # this is a new user |
3028 | 1152 log.debug(_("user {nick} has joined room {room_id}").format( |
2994
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1153 nick=user.nick, room_id=room.occupantJID.userhost())) |
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1154 if not self.host.trigger.point( |
94708a7d3ecf
core, plugin XEP-0045: fixed message type autodetection + ENTITY_TYPE_MUC constant:
Goffi <goffi@goffi.org>
parents:
2991
diff
changeset
|
1155 "MUC user joined", room, user, self.client.profile): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1156 return |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1157 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1158 extra = {'info_type': ROOM_USER_JOINED, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1159 'user_affiliation': user.affiliation, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1160 'user_role': user.role, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1161 'user_nick': user.nick |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1162 } |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1163 if user.entity is not None: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1164 extra['user_entity'] = user.entity.full() |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1165 mess_data = { # dict is similar to the one used in client.onMessage |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1166 "from": room.roomJID, |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1167 "to": self.client.jid, |
3028 | 1168 "uid": str(uuid.uuid4()), |
1169 "message": {'': D_("=> {} has joined the room").format(user.nick)}, | |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1170 "subject": {}, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1171 "type": C.MESS_TYPE_INFO, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1172 "extra": extra, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1173 "timestamp": time.time(), |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1174 } |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1175 # FIXME: we disable presence in history as it's taking a lot of space |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1176 # while not indispensable. In the future an option may allow |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1177 # to re-enable it |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1178 # self.client.messageAddToHistory(mess_data) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1179 self.client.messageSendToBridge(mess_data) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1180 |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
1181 |
74
6e3a06b4dd36
plugin xep-0045: added roomUserJoined and roomUserLeft signals
Goffi <goffi@goffi.org>
parents:
73
diff
changeset
|
1182 def userLeftRoom(self, room, user): |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1183 if not self.host.trigger.point("MUC user left", room, user, self.client.profile): |
715
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
1184 return |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1185 if user.nick == room.nick: |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1186 # we left the room |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1187 room_jid_s = room.roomJID.userhost() |
3028 | 1188 log.info(_("Room ({room}) left ({profile})").format( |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1189 room = room_jid_s, profile = self.client.profile)) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1190 self.host.memory.delEntityCache(room.roomJID, profile_key=self.client.profile) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1191 self.host.bridge.mucRoomLeft(room.roomJID.userhost(), self.client.profile) |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1192 elif room.state != ROOM_STATE_LIVE: |
3028 | 1193 log.warning("Received user presence data in a room before its initialisation (current state: {state})," |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1194 "this is not standard! Ignoring it: {room} ({nick})".format( |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1195 state=room.state, |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1196 room=room.roomJID.userhost(), |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1197 nick=user.nick)) |
1984
de4fac507dc4
xep-0045: ignore non standard presence received between own presence and room subject
Goffi <goffi@goffi.org>
parents:
1977
diff
changeset
|
1198 return |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1199 else: |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1200 if not room.fully_joined.called: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1201 return |
3028 | 1202 log.debug(_("user {nick} left room {room_id}").format(nick=user.nick, room_id=room.occupantJID.userhost())) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1203 extra = {'info_type': ROOM_USER_LEFT, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1204 'user_affiliation': user.affiliation, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1205 'user_role': user.role, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1206 'user_nick': user.nick |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1207 } |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1208 if user.entity is not None: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1209 extra['user_entity'] = user.entity.full() |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1210 mess_data = { # dict is similar to the one used in client.onMessage |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1211 "from": room.roomJID, |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1212 "to": self.client.jid, |
3028 | 1213 "uid": str(uuid.uuid4()), |
1214 "message": {'': D_("<= {} has left the room").format(user.nick)}, | |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1215 "subject": {}, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1216 "type": C.MESS_TYPE_INFO, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1217 "extra": extra, |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1218 "timestamp": time.time(), |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1219 } |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1220 # FIXME: disable history, see userJoinRoom comment |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1221 # self.client.messageAddToHistory(mess_data) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1222 self.client.messageSendToBridge(mess_data) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1223 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
1224 def userChangedNick(self, room, user, new_nick): |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1225 self.host.bridge.mucRoomUserChangedNick(room.roomJID.userhost(), user.nick, new_nick, self.client.profile) |
72 | 1226 |
77
1ae680f9682e
wix: MUC groupchat management + short nick shown in chat window instead of full jid when possible
Goffi <goffi@goffi.org>
parents:
76
diff
changeset
|
1227 def userUpdatedStatus(self, room, user, show, status): |
2991
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1228 entity = jid.JID(tuple=(room.roomJID.user, room.roomJID.host, user.nick)) |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1229 if hasattr(room, "_cache_presence"): |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1230 # room has a cache for presence, meaning it has not been fully |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1231 # joined yet. So we put presence in cache, and stop workflow. |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1232 # Or delete current presence and continue workflow if it's an |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1233 # "unavailable" presence |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1234 cache = room._cache_presence |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1235 cache[entity] = { |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1236 "room": room, |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1237 "user": user, |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1238 "show": show, |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1239 "status": status, |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1240 } |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1241 return |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1242 statuses = {C.PRESENCE_STATUSES_DEFAULT: status or ''} |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1243 self.host.bridge.presenceUpdate( |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1244 entity.full(), show or '', 0, statuses, self.client.profile) |
77
1ae680f9682e
wix: MUC groupchat management + short nick shown in chat window instead of full jid when possible
Goffi <goffi@goffi.org>
parents:
76
diff
changeset
|
1245 |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1246 ## messages ## |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1247 |
1256
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
1248 def receivedGroupChat(self, room, user, body): |
3028 | 1249 log.debug('receivedGroupChat: room=%s user=%s body=%s' % (room.roomJID.full(), user, body)) |
1256
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
1250 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1251 def _addToHistory(self, __, user, message): |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1252 try: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1253 # message can be already parsed (with MAM), in this case mess_data |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1254 # it attached to the element |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1255 mess_data = message.element._mess_data |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1256 except AttributeError: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1257 mess_data = self.client.messageProt.parseMessage(message.element) |
3028 | 1258 if mess_data['message'] or mess_data['subject']: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1259 return self.host.memory.addToHistory(self.client, mess_data) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1260 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1261 return defer.succeed(None) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1262 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1263 def _addToHistoryEb(self, failure): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1264 failure.trap(exceptions.CancelError) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1265 |
1256
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
1266 def receivedHistory(self, room, user, message): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1267 """Called when history (backlog) message are received |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1268 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1269 we check if message is not already in our history |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1270 and add it if needed |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1271 @param room(muc.Room): room instance |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1272 @param user(muc.User, None): the user that sent the message |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1273 None if the message come from the room |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1274 @param message(muc.GroupChat): the parsed message |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1275 """ |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1276 if room.state != ROOM_STATE_SELF_PRESENCE: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1277 log.warning(_( |
3028 | 1278 "received history in unexpected state in room {room} (state: " |
1279 "{state})").format(room = room.roomJID.userhost(), | |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1280 state = room.state)) |
2794
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1281 if not hasattr(room, "_history_d"): |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1282 # XXX: this hack is due to buggy behaviour seen in the wild because of the |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1283 # "mod_delay" prosody module being activated. This module add an |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1284 # unexpected <delay> elements which break our workflow. |
3028 | 1285 log.warning(_("storing the unexpected message anyway, to avoid loss")) |
2794
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1286 # we have to restore URI which are stripped by wokkel parsing |
2979
f44a95f566d2
core, plugin XEP-0045: fix crashes when changing URIs:
Goffi <goffi@goffi.org>
parents:
2844
diff
changeset
|
1287 for c in message.element.elements(): |
2794
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1288 if c.uri is None: |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1289 c.uri = C.NS_CLIENT |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1290 mess_data = self.client.messageProt.parseMessage(message.element) |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1291 message.element._mess_data = mess_data |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1292 self._addToHistory(None, user, message) |
3028 | 1293 if mess_data['message'] or mess_data['subject']: |
2794
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1294 self.host.bridge.messageNew( |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1295 *self.client.messageGetBridgeArgs(mess_data), |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1296 profile=self.client.profile |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1297 ) |
33fa70c102de
plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
1298 return |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1299 room._history_d.addCallback(self._addToHistory, user, message) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1300 room._history_d.addErrback(self._addToHistoryEb) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1301 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1302 ## subject ## |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1303 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1304 def groupChatReceived(self, message): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1305 """ |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1306 A group chat message has been received from a MUC room. |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1307 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1308 There are a few event methods that may get called here. |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1309 L{receivedGroupChat}, L{receivedSubject} or L{receivedHistory}. |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1310 """ |
3060
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1311 # We override this method to fix subject handling (empty strings were discarded) |
730bbed77a89
plugin XEP-0045: join / MAM history improvements:
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
1312 # FIXME: remove this once fixed upstream |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1313 room, user = self._getRoomUser(message) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1314 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1315 if room is None: |
3028 | 1316 log.warning("No room found for message: {message}" |
2986
37b55d87d027
plugin XEP-0045: added a warning if a message is discarded because the room has not been found
Goffi <goffi@goffi.org>
parents:
2979
diff
changeset
|
1317 .format(message=message.toElement().toXml())) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1318 return |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1319 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1320 if message.subject is not None: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1321 self.receivedSubject(room, user, message.subject) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1322 elif message.delay is None: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1323 self.receivedGroupChat(room, user, message) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1324 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1325 self.receivedHistory(room, user, message) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1326 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1327 def subject(self, room, subject): |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1328 return muc.MUCClientProtocol.subject(self, room, subject) |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1329 |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1330 def _historyCb(self, __, room): |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1331 """Called when history have been written to database and subject is received |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1332 |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1333 this method will finish joining by: |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1334 - sending message to bridge |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1335 - calling fully_joined deferred |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1336 - sending stanza put in cache |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1337 - cleaning variables not needed anymore |
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1338 """ |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1339 args = self.plugin_parent._getRoomJoinedArgs(room, self.client.profile) |
2066
09c18fcd8225
plugin XEP-0045, quick frontend (app,chat): various chat improvments:
Goffi <goffi@goffi.org>
parents:
2058
diff
changeset
|
1340 self.host.bridge.mucRoomJoined(*args) |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1341 room.fully_joined.callback(room) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1342 del room._history_d |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1343 del room._history_type |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1344 cache = room._cache |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1345 del room._cache |
2822
5284be4c601b
plugin XEP-0045: cache presences if they are received before the room is fully joined:
Goffi <goffi@goffi.org>
parents:
2815
diff
changeset
|
1346 cache_presence = room._cache_presence |
5284be4c601b
plugin XEP-0045: cache presences if they are received before the room is fully joined:
Goffi <goffi@goffi.org>
parents:
2815
diff
changeset
|
1347 del room._cache_presence |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1348 for elem in cache: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1349 self.client.xmlstream.dispatch(elem) |
3028 | 1350 for presence_data in cache_presence.values(): |
1351 if not presence_data['show'] and not presence_data['status']: | |
2991
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1352 # occupants are already sent in mucRoomJoined, so if we don't have |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1353 # extra information like show or statuses, we can discard the signal |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1354 continue |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1355 else: |
f4590ca2acff
plugin XEP-0045: avoid sending useless presence signals:
Goffi <goffi@goffi.org>
parents:
2990
diff
changeset
|
1356 self.userUpdatedStatus(**presence_data) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1357 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1358 def _historyEb(self, failure_, room): |
3028 | 1359 log.error("Error while managing history: {}".format(failure_)) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1360 self._historyCb(None, room) |
1256
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
1361 |
405
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
372
diff
changeset
|
1362 def receivedSubject(self, room, user, subject): |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1363 # when subject is received, we know that we have whole roster and history |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1364 # cf. http://xmpp.org/extensions/xep-0045.html#enter-subject |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1365 room.subject = subject # FIXME: subject doesn't handle xml:lang |
2581
395a3d1c2888
plugin XEP-0045: fixed joining workflow:
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1366 if room.state != ROOM_STATE_LIVE: |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1367 if room._history_type == HISTORY_LEGACY: |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1368 self.changeRoomState(room, ROOM_STATE_LIVE) |
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1369 room._history_d.addCallbacks(self._historyCb, self._historyEb, [room], errbackArgs=[room]) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1370 else: |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1371 # the subject has been changed |
3028 | 1372 log.debug(_("New subject for room ({room_id}): {subject}").format(room_id = room.roomJID.full(), subject = subject)) |
2715
b35c84ea73cf
plugin XEP-0045: MAM implementation for MUC
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
1373 self.host.bridge.mucRoomNewSubject(room.roomJID.userhost(), subject, self.client.profile) |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1374 |
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
1375 ## disco ## |
1466
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1376 |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1377 def getDiscoInfo(self, requestor, target, nodeIdentifier=''): |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1378 return [disco.DiscoFeature(NS_MUC)] |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1379 |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1380 def getDiscoItems(self, requestor, target, nodeIdentifier=''): |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1381 # TODO: manage room queries ? Bad for privacy, must be disabled by default |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1382 # see XEP-0045 § 6.7 |
2184d5f496b5
plugin XEP-0045: added disco announce
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1383 return [] |