Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0045.py @ 3080:16925f494820
plugin XEP-0045: don't fail on `item-not-found` with MAM:
Some servers don't store permanently the whole history of MUC with MAM. As a result, an
"item-not-found" stanza error can be received when message id used as reference doesn't exist
anymore on the server.
When this case happens, the history is retrieved in the same way as for a newly joined room
(i.e. last 50 messages are requested).
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 05 Dec 2019 23:05:16 +0100 |
parents | 730bbed77a89 |
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 [] |