Mercurial > libervia-backend
annotate src/plugins/plugin_xep_0045.py @ 1316:8adcdf2cdfe1 frontends_multi_profiles
core: added a "profileConnecting" method check:
if a plugin has a profileConnecting method, it will be called when the profile is being connected but before the client stream is started. That can be usefull if things need to be done before the communication is started: e.g. putting triggers, loading PersistentDict, etc.
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 09 Feb 2015 21:39:51 +0100 |
parents | be3a301540c0 |
children | c01cbd8fc8dd |
rev | line source |
---|---|
72 | 1 #!/usr/bin/python |
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 |
811 | 5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 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 |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
23 log = getLogger(__name__) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
24 from twisted.internet import defer |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
25 from twisted.words.protocols.jabber import jid |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
26 |
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
27 from sat.core import exceptions |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
28 from sat.memory import memory |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
29 |
319 | 30 import uuid |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
31 import copy |
72 | 32 |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
33 from wokkel import muc |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
34 from sat.tools import xml_tools |
72 | 35 |
36 | |
37 PLUGIN_INFO = { | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
38 "name": "XEP 0045 Plugin", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
39 "import_name": "XEP-0045", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
40 "type": "XEP", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
41 "protocols": ["XEP-0045"], |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
42 "dependencies": [], |
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
|
43 "recommendations": [C.TEXT_CMDS], |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
44 "main": "XEP_0045", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
45 "handler": "yes", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
46 "description": _("""Implementation of Multi-User Chat""") |
72 | 47 } |
48 | |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
49 AFFILIATIONS = ('owner', 'admin', 'member', 'none', 'outcast') |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
50 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
51 |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
52 class UnknownRoom(Exception): |
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
53 pass |
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
54 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
55 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
56 class NotReadyYet(Exception): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
57 pass |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
58 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
59 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
60 class XEP_0045(object): |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
61 # TODO: this plugin is messy, need a big cleanup/refactoring |
72 | 62 |
63 def __init__(self, host): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
64 log.info(_("Plugin XEP_0045 initialization")) |
72 | 65 self.host = host |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
66 self.clients = {} |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
67 self._sessions = memory.Sessions() |
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
|
68 host.bridge.addMethod("joinMUC", ".plugin", in_sign='ssa{ss}s', out_sign='s', method=self._join) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
69 host.bridge.addMethod("mucNick", ".plugin", in_sign='sss', out_sign='', method=self.mucNick) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
70 host.bridge.addMethod("mucLeave", ".plugin", in_sign='ss', out_sign='', method=self.mucLeave, async=True) |
405
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
372
diff
changeset
|
71 host.bridge.addMethod("getRoomsJoined", ".plugin", in_sign='s', out_sign='a(sass)', method=self.getRoomsJoined) |
450
afe9cfd2ddbb
plugins: radio collective first draft
Goffi <goffi@goffi.org>
parents:
409
diff
changeset
|
72 host.bridge.addMethod("getRoomsSubjects", ".plugin", in_sign='s', out_sign='a(ss)', method=self.getRoomsSubjects) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
73 host.bridge.addMethod("getUniqueRoomName", ".plugin", in_sign='ss', out_sign='s', method=self._getUniqueName) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
74 host.bridge.addMethod("configureRoom", ".plugin", in_sign='ss', out_sign='s', method=self._configureRoom, async=True) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
75 host.bridge.addSignal("roomJoined", ".plugin", signature='sasss') # args: room_jid, room_nicks, user_nick, profile |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
76 host.bridge.addSignal("roomLeft", ".plugin", signature='ss') # args: room_jid, profile |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
77 host.bridge.addSignal("roomUserJoined", ".plugin", signature='ssa{ss}s') # args: room_jid, user_nick, user_data, profile |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
78 host.bridge.addSignal("roomUserLeft", ".plugin", signature='ssa{ss}s') # args: room_jid, user_nick, user_data, profile |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
79 host.bridge.addSignal("roomUserChangedNick", ".plugin", signature='ssss') # args: room_jid, old_nick, new_nick, profile |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
80 host.bridge.addSignal("roomNewSubject", ".plugin", signature='sss') # args: room_jid, subject, profile |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
81 self.__submit_conf_id = host.registerCallback(self._submitConfiguration, with_data=True) |
1101
ad4ec8d9235e
plugin XEP-0045: change security limit of "config room" menu to 4
souliane <souliane@mailoo.org>
parents:
1094
diff
changeset
|
82 host.importMenu((D_("MUC"), D_("configure")), self._configureRoomMenu, security_limit=4, 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
|
83 try: |
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
|
84 self.host.plugins[C.TEXT_CMDS].registerTextCommands(self) |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
85 self.host.plugins[C.TEXT_CMDS].addWhoIsCb(self._whois, 100) |
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
|
86 except KeyError: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
87 log.info(_("Text commands not available")) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
88 |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
89 host.trigger.add("presence_available", self.presenceTrigger) |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
90 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
91 def profileConnected(self, profile): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
92 def assign_service(service): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
93 client = self.host.getClient(profile) |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
94 client.muc_service = service |
950
5e8e8a034411
plugin XEP-0045: profileConnected return the deferred, so muc service presence is checked before the end of initialisation
Goffi <goffi@goffi.org>
parents:
944
diff
changeset
|
95 return self.getMUCService(profile_key=profile).addCallback(assign_service) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
96 |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
97 def checkClient(self, profile): |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
98 """Check if the profile is connected and has used the MUC feature. |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
99 |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
100 If profile was using MUC feature but is now disconnected, remove it from the client list. |
75 | 101 @param profile: profile to check |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
102 @return: True if the profile is connected and has used the MUC feature, else False""" |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
103 if not profile or profile not in self.clients or not self.host.isConnected(profile): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
104 log.error(_('Unknown or disconnected profile (%s)') % profile) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
105 if profile in self.clients: |
72 | 106 del self.clients[profile] |
107 return False | |
108 return True | |
109 | |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
110 def getProfileAssertInRoom(self, room_jid, profile_key): |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
111 """Retrieve the profile name, assert that it's connected and participating in the given room. |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
112 |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
113 @param room_jid (JID): room JID |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
114 @param profile_key (str): %(doc_profile_key) |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
115 @return: the profile name |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
116 """ |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
117 profile = self.host.memory.getProfileName(profile_key) |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
118 if not self.checkClient(profile): |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
119 raise exceptions.ProfileUnknownError("Unknown or disconnected profile") |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
120 if room_jid.userhost() not in self.clients[profile].joined_rooms: |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
121 raise UnknownRoom("This room has not been joined") |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
122 return profile |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
123 |
72 | 124 def __room_joined(self, room, profile): |
125 """Called when the user is in the requested room""" | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
126 |
319 | 127 def _sendBridgeSignal(ignore=None): |
405
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
372
diff
changeset
|
128 self.host.bridge.roomJoined(room.roomJID.userhost(), [user.nick for user in room.roster.values()], room.nick, profile) |
319 | 129 |
405
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
372
diff
changeset
|
130 room_jid_s = room.roomJID.userhost() |
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
372
diff
changeset
|
131 self.clients[profile].joined_rooms[room_jid_s] = room |
452
fd455b3ca6d4
plugin XEP-0045: room unlocking fix
Goffi <goffi@goffi.org>
parents:
451
diff
changeset
|
132 if room.locked: |
319 | 133 #FIXME: the current behaviour is to create an instant room |
134 #and send the signal only when the room is unlocked | |
135 #a proper configuration management should be done | |
452
fd455b3ca6d4
plugin XEP-0045: room unlocking fix
Goffi <goffi@goffi.org>
parents:
451
diff
changeset
|
136 print "room locked !" |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
137 self.clients[profile].configure(room.roomJID, {}).addCallbacks(_sendBridgeSignal, lambda x: log.error(_('Error while configuring the room'))) |
319 | 138 else: |
139 _sendBridgeSignal() | |
140 return room | |
141 | |
528
f899f6e2a9d1
plugin XEP-0045: in case of nickname conflict when entering a room, a new one is automaticaly assigned
Goffi <goffi@goffi.org>
parents:
522
diff
changeset
|
142 def __err_joining_room(self, failure, room_jid, nick, history_options, password, profile): |
72 | 143 """Called when something is going wrong when joining the room""" |
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
|
144 if hasattr(failure.value, "condition") and failure.value.condition == 'conflict': |
528
f899f6e2a9d1
plugin XEP-0045: in case of nickname conflict when entering a room, a new one is automaticaly assigned
Goffi <goffi@goffi.org>
parents:
522
diff
changeset
|
145 # we have a nickname conflict, we try again with "_" suffixed to current nickname |
f899f6e2a9d1
plugin XEP-0045: in case of nickname conflict when entering a room, a new one is automaticaly assigned
Goffi <goffi@goffi.org>
parents:
522
diff
changeset
|
146 nick += '_' |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
147 return self.clients[profile].join(room_jid, nick, history_options, password).addCallbacks(self.__room_joined, self.__err_joining_room, callbackKeywords={'profile': profile}, errbackArgs=[room_jid, nick, history_options, password, profile]) |
1068
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
148 mess = D_("Error while joining the room %s" % room_jid.userhost()) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
149 try: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
150 mess += " with condition '%s'" % failure.value.condition |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
151 except AttributeError: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
152 pass |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
153 log.error(mess) |
1068
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
154 self.host.bridge.newAlert(mess, D_("Group chat error"), "ERROR", profile) |
450
afe9cfd2ddbb
plugins: radio collective first draft
Goffi <goffi@goffi.org>
parents:
409
diff
changeset
|
155 raise failure |
72 | 156 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
157 def getRoomsJoined(self, profile_key=C.PROF_KEY_NONE): |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
158 """Return room where user is""" |
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
159 profile = self.host.memory.getProfileName(profile_key) |
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
160 result = [] |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
161 if not self.checkClient(profile): |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
162 return result |
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
163 for room in self.clients[profile].joined_rooms.values(): |
405
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
372
diff
changeset
|
164 result.append((room.roomJID.userhost(), [user.nick for user in room.roster.values()], room.nick)) |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
165 return result |
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
166 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
167 def getRoomNick(self, room_jid_s, profile_key=C.PROF_KEY_NONE): |
93 | 168 """return nick used in room by user |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
169 |
509
64ff046dc201
plugin text commands: added /join command
Goffi <goffi@goffi.org>
parents:
507
diff
changeset
|
170 @param room_jid_s: unicode room id |
93 | 171 @profile_key: profile |
172 @return: nick or empty string in case of error""" | |
173 profile = self.host.memory.getProfileName(profile_key) | |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
174 if not self.checkClient(profile) or room_jid_s not in self.clients[profile].joined_rooms: |
93 | 175 return '' |
509
64ff046dc201
plugin text commands: added /join command
Goffi <goffi@goffi.org>
parents:
507
diff
changeset
|
176 return self.clients[profile].joined_rooms[room_jid_s].nick |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
177 |
715
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
178 def getRoomNickOfUser(self, room, user_jid, secure=True): |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
179 """Returns the nick of the given user in the room. |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
180 |
715
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
181 @room: instance of wokkel.muc.Room |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
182 @user: JID or unicode (JID userhost). |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
183 @param secure: set to True for a secure check |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
184 @return: the nick or None if the user didn't join the room. |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
185 """ |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
186 if not isinstance(user_jid, jid.JID): |
791
23b0c949b86c
plugins room games, XEP-0045: small fixes, improved docstrings
souliane <souliane@mailoo.org>
parents:
771
diff
changeset
|
187 user_jid = jid.JID(user_jid).userhostJID() |
715
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
188 for user in room.roster.values(): |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
189 if user.entity is not None: |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
190 if user.entity.userhostJID() == user_jid.userhostJID(): |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
191 return user.nick |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
192 elif not secure: |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
193 # FIXME: this is NOT ENOUGH to check an identity!! |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
194 # See in which conditions user.entity could be None. |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
195 if user.nick == user_jid.user: |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
196 return user.nick |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
197 return None |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
198 |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
199 def getRoomNicksOfUsers(self, room, users=[], secure=True): |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
200 """Returns the nicks of the given users in the room. |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
201 |
715
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
202 @room: instance of wokkel.muc.Room |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
203 @users: list of JID or unicode (JID userhost). |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
204 @param secure: set to True for a secure check |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
205 @return: (x, y) with x a list containing the nicks of |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
206 the users who are in the room, and y the missing users. |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
207 """ |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
208 nicks = [] |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
209 missing = [] |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
210 for user in users: |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
211 nick = self.getRoomNickOfUser(room, user, secure) |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
212 if nick is None: |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
213 missing.append(user) |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
214 else: |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
215 nicks.append(nick) |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
216 return nicks, missing |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
217 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
218 def _configureRoom(self, room_jid_s, profile_key=C.PROF_KEY_NONE): |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
219 d = self.configureRoom(jid.JID(room_jid_s), profile_key) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
220 d.addCallback(lambda xmlui: xmlui.toXml()) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
221 return d |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
222 |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
223 def _configureRoomMenu(self, menu_data, profile): |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
224 """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
|
225 |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
226 @param menu_data: %(menu_data)s |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
227 @param profile: %(doc_profile)s |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
228 """ |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
229 try: |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
230 room_jid = jid.JID(menu_data['room_jid']) |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
231 except KeyError: |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
232 log.error(_("room_jid key is not present !")) |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
233 return defer.fail(exceptions.DataError) |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
234 def xmluiReceived(xmlui): |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
235 return {"xmlui": xmlui.toXml()} |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
236 return self.configureRoom(room_jid, profile).addCallback(xmluiReceived) |
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
237 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
238 def configureRoom(self, room_jid, profile_key=C.PROF_KEY_NONE): |
1094
4286a19e9e8a
pluging XEP-0045: configure room dynamic menu
Goffi <goffi@goffi.org>
parents:
1083
diff
changeset
|
239 """return the room configuration form |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
240 |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
241 @param room: jid of the room to configure |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
242 @param profile_key: %(doc_profile_key)s |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
243 @return: configuration form as XMLUI |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
244 """ |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
245 profile = self.getProfileAssertInRoom(room_jid, profile_key) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
246 |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
247 def config2XMLUI(result): |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
248 if not result: |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
249 return "" |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
250 session_id, session_data = self._sessions.newSession(profile=profile) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
251 session_data["room_jid"] = room_jid |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
252 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
|
253 xmlui.session_id = session_id |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
254 return xmlui |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
255 |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
256 d = self.clients[profile].getConfiguration(room_jid) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
257 d.addCallback(config2XMLUI) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
258 return d |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
259 |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
260 def _submitConfiguration(self, raw_data, profile): |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
261 try: |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
262 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
|
263 except KeyError: |
1068
1513511a0586
plugin XEP-0045: room configuration returns a success or failure message
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
264 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
|
265 _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
|
266 _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
|
267 return defer.succeed({'xmlui': _dialog.toXml()}) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
268 |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
269 data = xml_tools.XMLUIResult2DataFormResult(raw_data) |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
270 d = self.clients[profile].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
|
271 _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
|
272 _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
|
273 d.addCallback(lambda ignore: {'xmlui': _dialog.toXml()}) |
801
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
274 del self._sessions[raw_data["session_id"]] |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
275 return d |
02ee9ef95277
plugin XEP-0045, primitivus: added MUC configuration
Goffi <goffi@goffi.org>
parents:
791
diff
changeset
|
276 |
522
3446ce33247d
plugin XEP-0045: added isNickInRoom method
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
277 def isNickInRoom(self, room_jid, nick, profile): |
3446ce33247d
plugin XEP-0045: added isNickInRoom method
Goffi <goffi@goffi.org>
parents:
519
diff
changeset
|
278 """Tell if a nick is currently present in a room""" |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
279 profile = self.getProfileAssertInRoom(room_jid, profile) |
599
8d8a2ad163e2
plugin XEP-0045: fixed isNickInRoom
Goffi <goffi@goffi.org>
parents:
596
diff
changeset
|
280 return self.clients[profile].joined_rooms[room_jid.userhost()].inRoster(muc.User(nick)) |
93 | 281 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
282 def getRoomsSubjects(self, profile_key=C.PROF_KEY_NONE): |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
283 """Return received subjects of rooms""" |
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
284 profile = self.host.memory.getProfileName(profile_key) |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
285 if not self.checkClient(profile): |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
286 return [] |
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
287 return self.clients[profile].rec_subjects.values() |
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
288 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
289 @defer.inlineCallbacks |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
290 def getMUCService(self, jid_=None, profile_key=C.PROF_KEY_NONE): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
291 """Return first found MUC service of an entity |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
292 |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
293 @param jid_: entity which may have a MUC service, or None for our own server |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
294 @param profile_key: %(doc_profile_key)s |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
295 """ |
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
|
296 muc_service = None |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
297 services = yield self.host.findServiceEntities("conference", "text", jid_, profile_key=profile_key) |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
298 for service in services: |
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
|
299 if not ".irc." in service.userhost(): |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
300 # FIXME: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
301 # 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
|
302 # 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
|
303 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
|
304 break |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
305 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
|
306 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
307 def _getUniqueName(self, muc_service="", profile_key=C.PROF_KEY_NONE): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
308 return self.getUniqueName(muc_service or None, profile_key).full() |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
309 |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
310 def getUniqueName(self, muc_service=None, profile_key=C.PROF_KEY_NONE): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
311 """Return unique name for a room, avoiding collision |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
312 |
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
|
313 @param muc_service: leave empty string to use the default 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
|
314 @return: unique room userhost, or '' if an error occured. |
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
|
315 """ |
319 | 316 #TODO: we should use #RFC-0045 10.1.4 when available here |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
317 client = self.host.getClient(profile_key) |
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
|
318 room_name = uuid.uuid1() |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
319 if muc_service is None: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
320 try: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
321 muc_service = client.muc_service |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
322 except AttributeError: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
323 raise NotReadyYet("Main server MUC service has not been checked yet") |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
324 if muc_service is None: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
325 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
|
326 raise exceptions.FeatureNotFound |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
327 |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
328 muc_service = muc_service.userhost() |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
329 return jid.JID("%s@%s" % (room_name, muc_service)) |
319 | 330 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
331 def join(self, room_jid, nick, options, profile_key=C.PROF_KEY_NONE): |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
332 def _errDeferred(exc_obj=Exception, txt='Error while joining room'): |
350
abe08fcb42d7
plugin XEP-0045: added error callback to join's deferred, and a callback is created if join fail before calling MUCClient's join
Goffi <goffi@goffi.org>
parents:
319
diff
changeset
|
333 d = defer.Deferred() |
abe08fcb42d7
plugin XEP-0045: added error callback to join's deferred, and a callback is created if join fail before calling MUCClient's join
Goffi <goffi@goffi.org>
parents:
319
diff
changeset
|
334 d.errback(exc_obj(txt)) |
451
4f196e2d3781
plugin xep-0045: fixed missing return deferred
Goffi <goffi@goffi.org>
parents:
450
diff
changeset
|
335 return d |
350
abe08fcb42d7
plugin XEP-0045: added error callback to join's deferred, and a callback is created if join fail before calling MUCClient's join
Goffi <goffi@goffi.org>
parents:
319
diff
changeset
|
336 |
72 | 337 profile = self.host.memory.getProfileName(profile_key) |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
338 if not self.checkClient(profile): |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
339 return _errDeferred() |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
340 if room_jid.userhost() in self.clients[profile].joined_rooms: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
341 log.warning(_('%(profile)s is already in room %(room_jid)s') % {'profile': profile, 'room_jid': room_jid.userhost()}) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
342 return _errDeferred() |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
343 log.info(_("[%(profile)s] is joining room %(room)s with nick %(nick)s") % {'profile': profile, 'room': room_jid.userhost(), 'nick': nick}) |
72 | 344 |
1256
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
345 if "history" in options: |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
346 history_limit = int(options["history"]) |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
347 else: |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
348 history_limit = int(self.host.memory.getParamA(C.HISTORY_LIMIT, 'General', profile_key=profile)) |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
349 # http://xmpp.org/extensions/xep-0045.html#enter-managehistory |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
350 history_options = muc.HistoryOptions(maxStanzas=history_limit) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
351 password = options["password"] if "password" in options else None |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
352 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
353 return self.clients[profile].join(room_jid, nick, history_options, password).addCallbacks(self.__room_joined, self.__err_joining_room, callbackKeywords={'profile': profile}, errbackArgs=[room_jid, nick, history_options, password, profile]) |
743
5a131930348d
plugin XEP-0045: remove redondant errback from _join
souliane <souliane@mailoo.org>
parents:
742
diff
changeset
|
354 # FIXME: how to set the cancel method on the Deferred created by wokkel? |
5a131930348d
plugin XEP-0045: remove redondant errback from _join
souliane <souliane@mailoo.org>
parents:
742
diff
changeset
|
355 # This happens when the room is not reachable, e.g. no internet connection: |
5a131930348d
plugin XEP-0045: remove redondant errback from _join
souliane <souliane@mailoo.org>
parents:
742
diff
changeset
|
356 # > /usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py(480)_startRunCallbacks() |
5a131930348d
plugin XEP-0045: remove redondant errback from _join
souliane <souliane@mailoo.org>
parents:
742
diff
changeset
|
357 # -> raise AlreadyCalledError(extra) |
405
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
372
diff
changeset
|
358 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
359 def _join(self, room_jid_s, nick, options={}, profile_key=C.PROF_KEY_NONE): |
743
5a131930348d
plugin XEP-0045: remove redondant errback from _join
souliane <souliane@mailoo.org>
parents:
742
diff
changeset
|
360 """join method used by bridge: use the join method, but doesn't return any deferred |
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
|
361 @return the room userhost (given value or unique generated name) |
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
|
362 """ |
406
b03b38b20c18
plugin XEP-0045: send error on invalid room jid on _join
Goffi <goffi@goffi.org>
parents:
405
diff
changeset
|
363 profile = self.host.memory.getProfileName(profile_key) |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
364 if not self.checkClient(profile): |
406
b03b38b20c18
plugin XEP-0045: send error on invalid room jid on _join
Goffi <goffi@goffi.org>
parents:
405
diff
changeset
|
365 return |
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
|
366 if room_jid_s == "": |
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
|
367 room_jid_s = self.getUniqueName(profile_key=profile_key) |
406
b03b38b20c18
plugin XEP-0045: send error on invalid room jid on _join
Goffi <goffi@goffi.org>
parents:
405
diff
changeset
|
368 try: |
b03b38b20c18
plugin XEP-0045: send error on invalid room jid on _join
Goffi <goffi@goffi.org>
parents:
405
diff
changeset
|
369 room_jid = jid.JID(room_jid_s) |
b03b38b20c18
plugin XEP-0045: send error on invalid room jid on _join
Goffi <goffi@goffi.org>
parents:
405
diff
changeset
|
370 except: |
b03b38b20c18
plugin XEP-0045: send error on invalid room jid on _join
Goffi <goffi@goffi.org>
parents:
405
diff
changeset
|
371 mess = _("Invalid room jid: %s") % room_jid_s |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
372 log.warning(mess) |
406
b03b38b20c18
plugin XEP-0045: send error on invalid room jid on _join
Goffi <goffi@goffi.org>
parents:
405
diff
changeset
|
373 self.host.bridge.newAlert(mess, _("Group chat error"), "ERROR", profile) |
b03b38b20c18
plugin XEP-0045: send error on invalid room jid on _join
Goffi <goffi@goffi.org>
parents:
405
diff
changeset
|
374 return |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
928
diff
changeset
|
375 self.join(room_jid, nick, options, profile) |
743
5a131930348d
plugin XEP-0045: remove redondant errback from _join
souliane <souliane@mailoo.org>
parents:
742
diff
changeset
|
376 # TODO: error management + signal in bridge |
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
|
377 return room_jid_s |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
378 |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
379 def nick(self, room_jid, nick, profile_key): |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
380 profile = self.getProfileAssertInRoom(room_jid, profile_key) |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
381 return self.clients[profile].nick(room_jid, nick) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
382 |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
383 def leave(self, room_jid, profile_key): |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
384 profile = self.getProfileAssertInRoom(room_jid, profile_key) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
385 return self.clients[profile].leave(room_jid) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
386 |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
387 def subject(self, room_jid, subject, profile_key): |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
388 profile = self.getProfileAssertInRoom(room_jid, profile_key) |
515
29b5ef129488
plugin XEP-0045, plugin text commands: added '/title' command
Goffi <goffi@goffi.org>
parents:
509
diff
changeset
|
389 return self.clients[profile].subject(room_jid, subject) |
29b5ef129488
plugin XEP-0045, plugin text commands: added '/title' command
Goffi <goffi@goffi.org>
parents:
509
diff
changeset
|
390 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
391 def mucNick(self, room_jid_s, nick, profile_key=C.PROF_KEY_NONE): |
505
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
392 """Change nickname in a room""" |
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
393 return self.nick(jid.JID(room_jid_s), nick, profile_key) |
2402668b5d05
plugin xep-0045: nick change management
Goffi <goffi@goffi.org>
parents:
488
diff
changeset
|
394 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
395 def mucLeave(self, room_jid_s, profile_key=C.PROF_KEY_NONE): |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
396 """Leave a room""" |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
397 return self.leave(jid.JID(room_jid_s), profile_key) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
398 |
72 | 399 def getHandler(self, profile): |
400 self.clients[profile] = SatMUCClient(self) | |
401 return self.clients[profile] | |
402 | |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
403 def profileDisconnected(self, profile): |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
404 try: |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
405 del self.clients[profile] |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
406 except KeyError: |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
407 pass |
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
408 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
409 def kick(self, nick, room_jid, options={}, profile_key=C.PROF_KEY_NONE): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
410 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
411 Kick a participant from the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
412 @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
|
413 @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
|
414 @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
|
415 @param profile_key (str): %(doc_profile_key)s |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
416 """ |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
417 profile = self.getProfileAssertInRoom(room_jid, profile_key) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
418 return self.clients[profile].kick(room_jid, nick, reason=options.get('reason', None)) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
419 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
420 def ban(self, entity_jid, room_jid, options={}, profile_key=C.PROF_KEY_NONE): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
421 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
422 Ban an entity from the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
423 @param entity_jid (JID): bare jid of the entity to be banned |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
424 @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
|
425 @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
|
426 @param profile_key (str): %(doc_profile_key)s |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
427 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
428 assert(not entity_jid.resource) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
429 assert(not room_jid.resource) |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
430 profile = self.getProfileAssertInRoom(room_jid, profile_key) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
431 return self.clients[profile].ban(room_jid, entity_jid, reason=options.get('reason', None)) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
432 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
433 def affiliate(self, entity_jid, room_jid, options=None, profile_key=C.PROF_KEY_NONE): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
434 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
435 Change the affiliation of an entity |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
436 @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
|
437 @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
|
438 @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
|
439 @param profile_key (str): %(doc_profile_key)s |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
440 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
441 assert(not entity_jid.resource) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
442 assert(not room_jid.resource) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
443 assert('affiliation' in options) |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
444 profile = self.getProfileAssertInRoom(room_jid, profile_key) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
445 # TODO: handles reason and nick |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
446 return self.clients[profile].modifyAffiliationList(room_jid, [entity_jid], options['affiliation']) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
447 |
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
|
448 # 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
|
449 |
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
|
450 def cmd_nick(self, mess_data, profile): |
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
|
451 """change nickname""" |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
452 log.debug("Catched nick command") |
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
|
453 |
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
|
454 if mess_data['type'] != "groupchat": |
1002
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
455 self.host.plugins[C.TEXT_CMDS].feedBackWrongContext('nick', 'groupchat', mess_data, profile) |
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
456 return False |
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
|
457 |
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
|
458 nick = 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
|
459 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
|
460 |
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
|
461 self.nick(room, nick, profile) |
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
|
462 |
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
|
463 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
|
464 |
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
|
465 def cmd_join(self, mess_data, profile): |
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
|
466 """join a new room (on the same service if full jid is not specified)""" |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
467 log.debug("Catched join command") |
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
|
468 |
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
|
469 if mess_data['type'] != "groupchat": |
1002
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
470 self.host.plugins[C.TEXT_CMDS].feedBackWrongContext('join', 'groupchat', mess_data, profile) |
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
471 return False |
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
|
472 |
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
|
473 if 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
|
474 room = self.host.plugins[C.TEXT_CMDS].getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host) |
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
|
475 nick = (self.getRoomNick(mess_data["to"].userhost(), profile) or |
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
|
476 self.host.getClient(profile).jid.user) |
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
|
477 self.join(room, nick, {}, profile) |
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
|
478 |
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
|
479 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
|
480 |
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
|
481 def cmd_leave(self, mess_data, profile): |
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
|
482 """quit a room""" |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
483 log.debug("Catched leave command") |
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
|
484 |
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
|
485 if mess_data['type'] != "groupchat": |
1002
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
486 self.host.plugins[C.TEXT_CMDS].feedBackWrongContext('leave', 'groupchat', mess_data, profile) |
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
487 return False |
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
|
488 |
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
|
489 if 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
|
490 room = self.host.plugins[C.TEXT_CMDS].getRoomJID(mess_data["unparsed"].strip(), mess_data["to"].host) |
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
|
491 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
|
492 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
|
493 |
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
|
494 self.leave(room, profile) |
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
|
495 |
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
|
496 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
|
497 |
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
|
498 def cmd_part(self, mess_data, profile): |
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
|
499 """just a synonym of /leave""" |
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
|
500 return self.cmd_leave(mess_data, profile) |
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
|
501 |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
502 def cmd_kick(self, mess_data, profile): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
503 """kick a room member |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
504 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
505 @command (group): (nick) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
506 - nick: the nick of the person to kick |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
507 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
508 log.debug("Catched kick command") |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
509 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
510 if mess_data['type'] != "groupchat": |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
511 self.host.plugins[C.TEXT_CMDS].feedBackWrongContext('kick', 'groupchat', mess_data, profile) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
512 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
513 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
514 options = mess_data["unparsed"].strip().split() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
515 try: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
516 nick = options[0] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
517 assert(self.isNickInRoom(mess_data["to"], nick, profile)) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
518 except (IndexError, AssertionError): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
519 feedback = _(u"You must provide a member's nick to kick.") |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
520 self.host.plugins[C.TEXT_CMDS].feedBack(feedback, mess_data, profile) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
521 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
522 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
523 d = self.kick(nick, mess_data["to"], {} if len(options) == 1 else {'reason': options[1]}, profile) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
524 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
525 def cb(dummy): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
526 mess_data['message'] = _('%s has been kicked') % nick |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
527 if len(options) > 1: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
528 mess_data['message'] += _(' for the following reason: %s') % options[1] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
529 return True |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
530 d.addCallback(cb) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
531 return d |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
532 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
533 def cmd_ban(self, mess_data, profile): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
534 """ban an entity from the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
535 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
536 @command (group): (JID) [reason] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
537 - 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
|
538 - 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
|
539 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
540 log.debug("Catched ban command") |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
541 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
542 if mess_data['type'] != "groupchat": |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
543 self.host.plugins[C.TEXT_CMDS].feedBackWrongContext('ban', 'groupchat', mess_data, profile) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
544 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
545 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
546 options = mess_data["unparsed"].strip().split() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
547 try: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
548 jid_s = options[0] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
549 entity_jid = jid.JID(jid_s).userhostJID() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
550 assert(entity_jid.user) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
551 assert(entity_jid.host) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
552 except (IndexError, jid.InvalidFormat, AssertionError): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
553 feedback = _(u"You must provide a valid JID to ban, like in '/ban contact@example.net'") |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
554 self.host.plugins[C.TEXT_CMDS].feedBack(feedback, mess_data, profile) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
555 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
556 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
557 d = self.ban(entity_jid, mess_data["to"], {} if len(options) == 1 else {'reason': options[1]}, profile) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
558 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
559 def cb(dummy): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
560 mess_data['message'] = _('%s has been banned') % entity_jid |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
561 if len(options) > 1: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
562 mess_data['message'] += _(' for the following reason: %s') % options[1] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
563 return True |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
564 d.addCallback(cb) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
565 return d |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
566 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
567 def cmd_affiliate(self, mess_data, profile): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
568 """affiliate an entity to the room |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
569 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
570 @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
|
571 - 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
|
572 - owner: grant owner privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
573 - admin: grant admin privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
574 - member: grant member privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
575 - none: reset entity privileges |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
576 - outcast: ban entity |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
577 """ |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
578 log.debug("Catched affiliate command") |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
579 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
580 if mess_data['type'] != "groupchat": |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
581 self.host.plugins[C.TEXT_CMDS].feedBackWrongContext('affiliate', 'groupchat', mess_data, profile) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
582 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
583 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
584 options = mess_data["unparsed"].strip().split() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
585 try: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
586 jid_s = options[0] |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
587 entity_jid = jid.JID(jid_s).userhostJID() |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
588 assert(entity_jid.user) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
589 assert(entity_jid.host) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
590 except (IndexError, jid.InvalidFormat, AssertionError): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
591 feedback = _(u"You must provide a valid JID to affiliate, like in '/affiliate contact@example.net member'") |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
592 self.host.plugins[C.TEXT_CMDS].feedBack(feedback, mess_data, profile) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
593 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
594 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
595 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
|
596 if affiliation not in AFFILIATIONS: |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
597 feedback = _(u"You must provide a valid affiliation: %s") % ' '.join(AFFILIATIONS) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
598 self.host.plugins[C.TEXT_CMDS].feedBack(feedback, mess_data, profile) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
599 return False |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
600 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
601 d = self.affiliate(entity_jid, mess_data["to"], {'affiliation': affiliation}, profile) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
602 |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
603 def cb(dummy): |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
604 mess_data['message'] = _('New affiliation for %(entity)s: %(affiliation)s') % {'entity': entity_jid, 'affiliation': affiliation} |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
605 return True |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
606 d.addCallback(cb) |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
607 return d |
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
608 |
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
|
609 def cmd_title(self, mess_data, profile): |
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
|
610 """change room's subject""" |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
611 log.debug("Catched title command") |
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
|
612 |
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
|
613 if mess_data['type'] != "groupchat": |
1002
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
614 self.host.plugins[C.TEXT_CMDS].feedBackWrongContext('title', 'groupchat', mess_data, profile) |
291eb8216f6e
plugins TEXT-COMMANDS, XEP-0045, XEP-0048, XEP-0249:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
615 return False |
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
|
616 |
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
|
617 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
|
618 |
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
|
619 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
|
620 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
|
621 self.subject(room, subject, profile) |
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
|
622 |
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 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
|
624 |
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
|
625 def cmd_topic(self, mess_data, profile): |
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
|
626 """just a synonym of /title""" |
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 return self.cmd_title(mess_data, profile) |
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
|
628 |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
629 def _whois(self, whois_msg, mess_data, target_jid, profile): |
1199 | 630 """ 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
|
631 if mess_data['type'] != "groupchat": |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
632 return |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
633 if target_jid.userhost() not in self.clients[profile].joined_rooms: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
634 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
|
635 return |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
636 user = self.clients[profile].joined_rooms[target_jid.userhost()].getUser(target_jid.resource) |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
637 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
|
638 if user.entity: |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
639 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
|
640 if user.affiliation != 'none': |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
641 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
|
642 if user.role != 'none': |
928
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
643 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
|
644 if user.status: |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
645 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
|
646 if user.show: |
73873e9b56f7
plugin XEP-0045: added user information to /whois text command
Goffi <goffi@goffi.org>
parents:
926
diff
changeset
|
647 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
|
648 |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
649 def presenceTrigger(self, presence_elt, client): |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
650 # XXX: shouldn't it be done by the server ?!! |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
651 muc_client = self.clients[client.profile] |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
652 for room_jid_s, room in muc_client.joined_rooms.items(): |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
653 elt = copy.deepcopy(presence_elt) |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
654 elt['to'] = room_jid_s + '/' + room.nick |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
655 client.presence.send(elt) |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
656 return True |
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
657 |
72 | 658 |
659 class SatMUCClient (muc.MUCClient): | |
660 #implements(iwokkel.IDisco) | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
661 |
72 | 662 def __init__(self, plugin_parent): |
663 self.plugin_parent = plugin_parent | |
664 self.host = plugin_parent.host | |
665 muc.MUCClient.__init__(self) | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
666 self.joined_rooms = {} # FIXME: seem to do the same thing as MUCClient's _rooms attribute, must be removed |
78
ace2af8abc5a
Added method to know which MUC are joined, and which subjects were received.
Goffi <goffi@goffi.org>
parents:
77
diff
changeset
|
667 self.rec_subjects = {} |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
668 self.__changing_nicks = set() # used to keep trace of who is changing nick, |
1083
e8731b02f5ea
plugin XEP-0045: small refactorization + clean on profile's disconnection
souliane <souliane@mailoo.org>
parents:
1082
diff
changeset
|
669 # and to discard userJoinedRoom signal in this case |
72 | 670 print "init SatMUCClient OK" |
515
29b5ef129488
plugin XEP-0045, plugin text commands: added '/title' command
Goffi <goffi@goffi.org>
parents:
509
diff
changeset
|
671 |
29b5ef129488
plugin XEP-0045, plugin text commands: added '/title' command
Goffi <goffi@goffi.org>
parents:
509
diff
changeset
|
672 def subject(self, room, subject): |
29b5ef129488
plugin XEP-0045, plugin text commands: added '/title' command
Goffi <goffi@goffi.org>
parents:
509
diff
changeset
|
673 return muc.MUCClientProtocol.subject(self, room, subject) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
674 |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
675 def unavailableReceived(self, presence): |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
676 #XXX: we override this method to manage nickname change |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
677 #TODO: feed this back to Wokkel |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
678 """ |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
679 Unavailable presence was received. |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
680 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
681 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
|
682 left the room. |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
683 """ |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
684 room, user = self._getRoomUser(presence) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
685 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
686 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
|
687 return |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
688 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
689 room.removeUser(user) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
690 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
691 if muc.STATUS_CODE.NEW_NICK in presence.mucStatuses: |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
692 self.__changing_nicks.add(presence.nick) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
693 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
|
694 else: |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
695 self.__changing_nicks.discard(presence.nick) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
696 self.userLeftRoom(room, user) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
697 |
74
6e3a06b4dd36
plugin xep-0045: added roomUserJoined and roomUserLeft signals
Goffi <goffi@goffi.org>
parents:
73
diff
changeset
|
698 def userJoinedRoom(self, room, user): |
1315
be3a301540c0
core (memory): updateEntityData now accept a "silent" argument to avoid sending signal to frontends when updating an attribute with "signalOnUpdate" flag.
Goffi <goffi@goffi.org>
parents:
1256
diff
changeset
|
699 self.host.memory.updateEntityData(room.roomJID, "type", "chatroom", profile_key=self.parent.profile) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
700 if user.nick in self.__changing_nicks: |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
701 self.__changing_nicks.remove(user.nick) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
702 else: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
703 log.debug(_("user %(nick)s has joined room (%(room_id)s)") % {'nick': user.nick, 'room_id': room.occupantJID.userhost()}) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
704 if not self.host.trigger.point("MUC user joined", room, user, self.parent.profile): |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
705 return |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
706 user_data = {'entity': user.entity.full() if user.entity else '', 'affiliation': user.affiliation, 'role': user.role} |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
707 self.host.bridge.roomUserJoined(room.roomJID.userhost(), user.nick, user_data, self.parent.profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
708 |
74
6e3a06b4dd36
plugin xep-0045: added roomUserJoined and roomUserLeft signals
Goffi <goffi@goffi.org>
parents:
73
diff
changeset
|
709 def userLeftRoom(self, room, user): |
715
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
710 if not self.host.trigger.point("MUC user left", room, user, self.parent.profile): |
f47d7c09c60b
plugins XEP-0045: added methods to get room nicks and "MUC user left" trigger
souliane <souliane@mailoo.org>
parents:
713
diff
changeset
|
711 return |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
712 if user.nick == room.nick: |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
713 # we left the room |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
714 room_jid_s = room.roomJID.userhost() |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
715 log.info(_("Room [%(room)s] left (%(profile)s))") % {"room": room_jid_s, |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
716 "profile": self.parent.profile}) |
1082
246712d2e7bc
plugin XEP-0045, text_commands: add some commands:
souliane <souliane@mailoo.org>
parents:
1068
diff
changeset
|
717 self.host.memory.delEntityCache(room.roomJID, profile_key=self.parent.profile) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
718 del self.plugin_parent.clients[self.parent.profile].joined_rooms[room_jid_s] |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
719 self.host.bridge.roomLeft(room.roomJID.userhost(), self.parent.profile) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
720 else: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
721 log.debug(_("user %(nick)s left room (%(room_id)s)") % {'nick': user.nick, 'room_id': room.occupantJID.userhost()}) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
722 user_data = {'entity': user.entity.full() if user.entity else '', 'affiliation': user.affiliation, 'role': user.role} |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
723 self.host.bridge.roomUserLeft(room.roomJID.userhost(), user.nick, user_data, self.parent.profile) |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
724 |
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
505
diff
changeset
|
725 def userChangedNick(self, room, user, new_nick): |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
726 self.host.bridge.roomUserChangedNick(room.roomJID.userhost(), user.nick, new_nick, self.parent.profile) |
72 | 727 |
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
|
728 def userUpdatedStatus(self, room, user, show, status): |
1239
b6dbac8ee485
plugin XEP-0045: handle MUC presence
souliane <souliane@mailoo.org>
parents:
1199
diff
changeset
|
729 self.host.bridge.presenceUpdate(room.roomJID.userhost() + '/' + user.nick, show or '', 0, {'default': status or ''}, self.parent.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
|
730 |
1256
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
731 def receivedGroupChat(self, room, user, body): |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
732 log.debug('receivedGroupChat: room=%s user=%s body=%s' % (room.roomJID.full(), user, body)) |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
733 |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
734 def receivedHistory(self, room, user, message): |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
735 # http://xmpp.org/extensions/xep-0045.html#enter-history |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
736 #log.debug('receivedHistory: room=%s user=%s body=%s' % (room.roomJID.full(), user, message)) |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
737 pass |
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
738 |
405
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
372
diff
changeset
|
739 def receivedSubject(self, room, user, subject): |
1256
4b27b9bf31b0
plugin XEP-0045: use HISTORY_LIMIT param to retrieve the MUC history
souliane <souliane@mailoo.org>
parents:
1250
diff
changeset
|
740 # http://xmpp.org/extensions/xep-0045.html#enter-subject |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
950
diff
changeset
|
741 log.debug(_("New subject for room (%(room_id)s): %(subject)s") % {'room_id': room.roomJID.full(), 'subject': subject}) |
405
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
372
diff
changeset
|
742 self.rec_subjects[room.roomJID.userhost()] = (room.roomJID.userhost(), subject) |
10b4f577d0c0
MUC update to follow wokkel's MUC branch update
Goffi <goffi@goffi.org>
parents:
372
diff
changeset
|
743 self.host.bridge.roomNewSubject(room.roomJID.userhost(), subject, self.parent.profile) |