Mercurial > xib
annotate muc.py @ 266:c726e8b28318
(irclib) new exception UnknownChannel raised in ServerConnection.part
Signed-off-by: Charly COSTE <changaco@changaco.net>
author | Charly COSTE <changaco@changaco.net> |
---|---|
date | Tue, 23 Mar 2010 00:40:05 +0100 |
parents | 3b318108e9e0 |
children |
rev | line source |
---|---|
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
3 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
4 # This program is free software: you can redistribute it and/or modify |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
5 # it under the terms of the GNU General Public License as published by |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
6 # the Free Software Foundation, either version 3 of the License, or |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
7 # (at your option) any later version. |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
8 # |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
9 # This program is distributed in the hope that it will be useful, |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
12 # GNU General Public License for more details. |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
13 # |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
14 # You should have received a copy of the GNU General Public License |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
15 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
16 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
17 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
18 import xmppony as xmpp |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
19 from time import sleep |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
20 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
21 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
22 class muc: |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
23 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
24 class PasswordNeeded(Exception): pass |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
25 class MembersOnlyRoom(Exception): pass |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
26 class BannedFromRoom(Exception): pass |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
27 class NicknameConflict(Exception): pass |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
28 class RoomIsFull(Exception): pass |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
29 class RoomIsLocked(Exception): pass |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
30 class ForgotNickname(Exception): pass |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
31 class UnknownError(Exception): pass |
111
59401ac0f47a
handle XMPP remote-server-not-found
Charly COSTE <changaco@changaco.net>
parents:
90
diff
changeset
|
32 class RemoteServerNotFound(Exception): pass |
214
0c99d38b84b8
(muc) added "auto_reconnect" attribute (defaults to True, turns to False when "leave" is called), created NotConnected exception
Charly COSTE <changaco@changaco.net>
parents:
213
diff
changeset
|
33 class NotConnected(Exception): pass |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
34 |
259
3b318108e9e0
(muc) created "state" attribute to replace the "connected" one
Charly COSTE <changaco@changaco.net>
parents:
257
diff
changeset
|
35 LEFT, LEAVING, NOT_IN, JOINING, JOINED = range(5) |
3b318108e9e0
(muc) created "state" attribute to replace the "connected" one
Charly COSTE <changaco@changaco.net>
parents:
257
diff
changeset
|
36 |
256
f14b32e7fdb5
(muc) auto_reconnect must be set in join() not in __init__() because we turn it to False in leave()
Charly COSTE <changaco@changaco.net>
parents:
244
diff
changeset
|
37 def __init__(self, room_jid): |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
38 self.room_jid = room_jid |
259
3b318108e9e0
(muc) created "state" attribute to replace the "connected" one
Charly COSTE <changaco@changaco.net>
parents:
257
diff
changeset
|
39 self.state = self.NOT_IN |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
40 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
41 |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
42 def _join(self, callback=None): |
259
3b318108e9e0
(muc) created "state" attribute to replace the "connected" one
Charly COSTE <changaco@changaco.net>
parents:
257
diff
changeset
|
43 self.state = self.JOINING |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
44 self.callback = callback |
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
45 self.xmpp_c.RegisterHandler('presence', self._xmpp_presence_handler) |
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
46 s = xmpp.protocol.Presence(to=self.jid, status=self.status, payload=[xmpp.simplexml.Node(tag='x', attrs={'xmlns': 'http://jabber.org/protocol/muc'}, payload=[xmpp.simplexml.Node(tag='history', attrs={'maxchars': '0'})])]) |
214
0c99d38b84b8
(muc) added "auto_reconnect" attribute (defaults to True, turns to False when "leave" is called), created NotConnected exception
Charly COSTE <changaco@changaco.net>
parents:
213
diff
changeset
|
47 self._send(s, force=True) |
170
11717d14e22f
created muc._send(), should have been done ages ago
Charly COSTE <changaco@changaco.net>
parents:
111
diff
changeset
|
48 |
11717d14e22f
created muc._send(), should have been done ages ago
Charly COSTE <changaco@changaco.net>
parents:
111
diff
changeset
|
49 |
214
0c99d38b84b8
(muc) added "auto_reconnect" attribute (defaults to True, turns to False when "leave" is called), created NotConnected exception
Charly COSTE <changaco@changaco.net>
parents:
213
diff
changeset
|
50 def _send(self, stanza, force=False): |
0c99d38b84b8
(muc) added "auto_reconnect" attribute (defaults to True, turns to False when "leave" is called), created NotConnected exception
Charly COSTE <changaco@changaco.net>
parents:
213
diff
changeset
|
51 """Send a stanza. |
0c99d38b84b8
(muc) added "auto_reconnect" attribute (defaults to True, turns to False when "leave" is called), created NotConnected exception
Charly COSTE <changaco@changaco.net>
parents:
213
diff
changeset
|
52 |
0c99d38b84b8
(muc) added "auto_reconnect" attribute (defaults to True, turns to False when "leave" is called), created NotConnected exception
Charly COSTE <changaco@changaco.net>
parents:
213
diff
changeset
|
53 The "force" optional argument bypasses the fact that we are not in the room yet, necessary to send initial presence""" |
0c99d38b84b8
(muc) added "auto_reconnect" attribute (defaults to True, turns to False when "leave" is called), created NotConnected exception
Charly COSTE <changaco@changaco.net>
parents:
213
diff
changeset
|
54 |
259
3b318108e9e0
(muc) created "state" attribute to replace the "connected" one
Charly COSTE <changaco@changaco.net>
parents:
257
diff
changeset
|
55 if self.state != self.JOINED and not force: |
244
9b83cdd51523
(muc) minor change in NotConnected error message
Charly COSTE <changaco@changaco.net>
parents:
229
diff
changeset
|
56 raise self.NotConnected, self.jid+'\n'+stanza.__str__(fancy=1).encode('utf-8') |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
57 try: |
170
11717d14e22f
created muc._send(), should have been done ages ago
Charly COSTE <changaco@changaco.net>
parents:
111
diff
changeset
|
58 self.xmpp_c.send(stanza) |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
59 except IOError, xmpp.Conflict: |
214
0c99d38b84b8
(muc) added "auto_reconnect" attribute (defaults to True, turns to False when "leave" is called), created NotConnected exception
Charly COSTE <changaco@changaco.net>
parents:
213
diff
changeset
|
60 if not self.auto_reconnect: |
244
9b83cdd51523
(muc) minor change in NotConnected error message
Charly COSTE <changaco@changaco.net>
parents:
229
diff
changeset
|
61 raise self.NotConnected, self.jid+'\n'+stanza.__str__(fancy=1).encode('utf-8') |
214
0c99d38b84b8
(muc) added "auto_reconnect" attribute (defaults to True, turns to False when "leave" is called), created NotConnected exception
Charly COSTE <changaco@changaco.net>
parents:
213
diff
changeset
|
62 |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
63 self.xmpp_c.reconnectAndReauth() |
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
64 for m in self.xmpp_c.mucs: |
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
65 m.rejoin() |
170
11717d14e22f
created muc._send(), should have been done ages ago
Charly COSTE <changaco@changaco.net>
parents:
111
diff
changeset
|
66 self.xmpp_c.send(stanza) |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
67 |
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
68 |
256
f14b32e7fdb5
(muc) auto_reconnect must be set in join() not in __init__() because we turn it to False in leave()
Charly COSTE <changaco@changaco.net>
parents:
244
diff
changeset
|
69 def join(self, xmpp_c, nickname, status=None, callback=None, auto_reconnect=True): |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
70 """Join room on xmpp_c connection using nickname""" |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
71 self.jid = self.room_jid+'/'+nickname |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
72 self.nickname = nickname |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
73 self.status = status |
256
f14b32e7fdb5
(muc) auto_reconnect must be set in join() not in __init__() because we turn it to False in leave()
Charly COSTE <changaco@changaco.net>
parents:
244
diff
changeset
|
74 self.auto_reconnect = auto_reconnect |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
75 self.xmpp_c = xmpp_c |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
76 self.xmpp_c.mucs.append(self) |
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
77 self._join(callback=callback) |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
78 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
79 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
80 def _xmpp_presence_handler(self, xmpp_c, presence): |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
81 if presence.getFrom() == self.jid: |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
82 errors = [] |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
83 if presence.getAttr('type') == 'error': |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
84 for c in presence.getChildren(): |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
85 if c.getName() == 'error': |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
86 for cc in c.getChildren(): |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
87 if cc.getNamespace() == 'urn:ietf:params:xml:ns:xmpp-stanzas' and cc.getName() != 'text': |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
88 err = c.getAttr('type')+' '+cc.getName() |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
89 if err == 'auth not-authorized': |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
90 # password-protected room |
81 | 91 errors.append(self.__class__.PasswordNeeded(self.jid)) |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
92 elif err == 'auth registration-required': |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
93 # members-only room |
81 | 94 errors.append(self.__class__.MembersOnlyRoom(self.jid)) |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
95 elif err == 'auth forbidden': |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
96 # banned from room |
81 | 97 errors.append(self.__class__.BannedFromRoom(self.jid)) |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
98 elif err == 'cancel conflict': |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
99 # nickname conflict |
81 | 100 errors.append(self.__class__.NicknameConflict(self.jid)) |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
101 elif err == 'wait service-unavailable': |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
102 # room is full |
81 | 103 errors.append(self.__class__.RoomIsFull(self.jid)) |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
104 elif err == 'cancel item-not-found': |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
105 # room is locked |
81 | 106 errors.append(self.__class__.RoomIsLocked(self.jid)) |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
107 elif err == 'modify jid-malformed': |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
108 # forgot to give a nickname |
81 | 109 errors.append(self.__class__.ForgotNickname(self.jid)) |
111
59401ac0f47a
handle XMPP remote-server-not-found
Charly COSTE <changaco@changaco.net>
parents:
90
diff
changeset
|
110 elif err == 'cancel remote-server-not-found': |
59401ac0f47a
handle XMPP remote-server-not-found
Charly COSTE <changaco@changaco.net>
parents:
90
diff
changeset
|
111 # MUC server is down or doesn't exist |
59401ac0f47a
handle XMPP remote-server-not-found
Charly COSTE <changaco@changaco.net>
parents:
90
diff
changeset
|
112 errors.append(self.__class__.RemoteServerNotFound(self.jid)) |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
113 else: |
81 | 114 errors.append(self.__class__.UnknownError(presence.__str__(fancy=1).encode('utf-8'))) |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
115 break |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
116 if len(errors) == 0: |
81 | 117 errors.append(self.__class__.UnknownError(presence.__str__(fancy=1).encode('utf-8'))) |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
118 else: |
259
3b318108e9e0
(muc) created "state" attribute to replace the "connected" one
Charly COSTE <changaco@changaco.net>
parents:
257
diff
changeset
|
119 self.state = self.JOINED |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
120 xmpp_c.UnregisterHandler('presence', self._xmpp_presence_handler) |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
121 if self.callback != None: |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
122 self.callback(errors) |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
123 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
124 |
213
fbe40b397f67
created Bridge.say_on_behalf in order to avoid code repetition in participant.py
Charly COSTE <changaco@changaco.net>
parents:
203
diff
changeset
|
125 def say(self, message, action=False): |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
126 """Say message in the room""" |
40
faa468731d8a
Tried to get thread safety and handle disconnections in muc.py
Charly COSTE <changaco@changaco.net>
parents:
17
diff
changeset
|
127 self.xmpp_c.lock.acquire() |
213
fbe40b397f67
created Bridge.say_on_behalf in order to avoid code repetition in participant.py
Charly COSTE <changaco@changaco.net>
parents:
203
diff
changeset
|
128 if action: |
fbe40b397f67
created Bridge.say_on_behalf in order to avoid code repetition in participant.py
Charly COSTE <changaco@changaco.net>
parents:
203
diff
changeset
|
129 message = '/me '+message |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
130 s = xmpp.protocol.Message(to=self.room_jid, typ='groupchat', body=message) |
170
11717d14e22f
created muc._send(), should have been done ages ago
Charly COSTE <changaco@changaco.net>
parents:
111
diff
changeset
|
131 self._send(s) |
40
faa468731d8a
Tried to get thread safety and handle disconnections in muc.py
Charly COSTE <changaco@changaco.net>
parents:
17
diff
changeset
|
132 self.xmpp_c.lock.release() |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
133 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
134 |
229
a434b73bde51
added optional "action" argument to Participant.say_on_xmpp_to and muc.say_to
Charly COSTE <changaco@changaco.net>
parents:
217
diff
changeset
|
135 def say_to(self, to, message, action=False): |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
136 """Send a private message""" |
40
faa468731d8a
Tried to get thread safety and handle disconnections in muc.py
Charly COSTE <changaco@changaco.net>
parents:
17
diff
changeset
|
137 self.xmpp_c.lock.acquire() |
229
a434b73bde51
added optional "action" argument to Participant.say_on_xmpp_to and muc.say_to
Charly COSTE <changaco@changaco.net>
parents:
217
diff
changeset
|
138 if action: |
a434b73bde51
added optional "action" argument to Participant.say_on_xmpp_to and muc.say_to
Charly COSTE <changaco@changaco.net>
parents:
217
diff
changeset
|
139 message = '/me '+message |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
140 s = xmpp.protocol.Message(to=self.room_jid+'/'+to, typ='chat', body=message) |
170
11717d14e22f
created muc._send(), should have been done ages ago
Charly COSTE <changaco@changaco.net>
parents:
111
diff
changeset
|
141 self._send(s) |
40
faa468731d8a
Tried to get thread safety and handle disconnections in muc.py
Charly COSTE <changaco@changaco.net>
parents:
17
diff
changeset
|
142 self.xmpp_c.lock.release() |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
143 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
144 |
17
32a35f7eff70
Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents:
7
diff
changeset
|
145 def change_nick(self, nickname, status=None, callback=None): |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
146 """Change nickname""" |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
147 self.jid = self.room_jid+'/'+nickname |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
148 self.callback = callback |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
149 self.xmpp_c.RegisterHandler('presence', self._xmpp_presence_handler) |
40
faa468731d8a
Tried to get thread safety and handle disconnections in muc.py
Charly COSTE <changaco@changaco.net>
parents:
17
diff
changeset
|
150 self.xmpp_c.lock.acquire() |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
151 s = xmpp.protocol.Presence(to=self.jid, status=status) |
170
11717d14e22f
created muc._send(), should have been done ages ago
Charly COSTE <changaco@changaco.net>
parents:
111
diff
changeset
|
152 self._send(s) |
40
faa468731d8a
Tried to get thread safety and handle disconnections in muc.py
Charly COSTE <changaco@changaco.net>
parents:
17
diff
changeset
|
153 self.xmpp_c.lock.release() |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
154 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
155 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
156 def leave(self, message=''): |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
157 """Leave the room""" |
40
faa468731d8a
Tried to get thread safety and handle disconnections in muc.py
Charly COSTE <changaco@changaco.net>
parents:
17
diff
changeset
|
158 self.xmpp_c.lock.acquire() |
214
0c99d38b84b8
(muc) added "auto_reconnect" attribute (defaults to True, turns to False when "leave" is called), created NotConnected exception
Charly COSTE <changaco@changaco.net>
parents:
213
diff
changeset
|
159 self.auto_reconnect = False |
259
3b318108e9e0
(muc) created "state" attribute to replace the "connected" one
Charly COSTE <changaco@changaco.net>
parents:
257
diff
changeset
|
160 self.state = self.LEAVING |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
161 s = xmpp.protocol.Presence(to=self.jid, typ='unavailable', status=message) |
217
45065f6f674c
(muc) ignore NotConnected exception in leave method
Charly COSTE <changaco@changaco.net>
parents:
214
diff
changeset
|
162 try: |
259
3b318108e9e0
(muc) created "state" attribute to replace the "connected" one
Charly COSTE <changaco@changaco.net>
parents:
257
diff
changeset
|
163 self._send(s, force=True) |
217
45065f6f674c
(muc) ignore NotConnected exception in leave method
Charly COSTE <changaco@changaco.net>
parents:
214
diff
changeset
|
164 except self.NotConnected: |
45065f6f674c
(muc) ignore NotConnected exception in leave method
Charly COSTE <changaco@changaco.net>
parents:
214
diff
changeset
|
165 pass |
40
faa468731d8a
Tried to get thread safety and handle disconnections in muc.py
Charly COSTE <changaco@changaco.net>
parents:
17
diff
changeset
|
166 self.xmpp_c.lock.release() |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
167 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
168 |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
169 def rejoin(self, callback=None): |
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
170 """Rejoin room""" |
259
3b318108e9e0
(muc) created "state" attribute to replace the "connected" one
Charly COSTE <changaco@changaco.net>
parents:
257
diff
changeset
|
171 self.state = self.JOINING |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
172 self._join(callback=callback) |
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
173 |
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
174 |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
175 def __del__(self): |
259
3b318108e9e0
(muc) created "state" attribute to replace the "connected" one
Charly COSTE <changaco@changaco.net>
parents:
257
diff
changeset
|
176 self.leave() |
90
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
177 if self in self.xmpp_c.mucs: |
965dd6f5fcc3
Tried to improve XMPP disconnections handling
Charly COSTE <changaco@changaco.net>
parents:
81
diff
changeset
|
178 self.xmpp_c.mucs.remove(self) |
0
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
179 |
4c842d23d4ce
Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff
changeset
|
180 xmpp.muc = muc |