annotate bot.py @ 52:5aabf124c78d

Fixed XMPP connection closing and the XMPP loop Signed-off-by: Charly COSTE <changaco@changaco.net>
author Charly COSTE <changaco@changaco.net>
date Wed, 26 Aug 2009 16:36:18 +0200
parents 2737ed5b9003
children a2258a705a17
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 # *** Versioning ***
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
19 # Major will pass to 1 when xib will be considered fault-tolerant
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
20 # After that major will only be changed if the new version is not retro-compatible (e.g. requires changes in config file)
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 version = 0, 1
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
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
25 import irclib
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
26 import xmppony as xmpp
24
4e1f27ea527b First hack at locks for thread safety. Some other minor changes.
Charly COSTE <changaco@changaco.net>
parents: 23
diff changeset
27 import threading
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
28 from bridge import *
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
29 from time import sleep
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
30 import re
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
31 import sys
20
08cde283621a Fixed a little bug in exception handling.
Charly COSTE <changaco@changaco.net>
parents: 19
diff changeset
32 import xml.parsers.expat
51
2737ed5b9003 Tried to improve the XMPP loop, again.
Charly COSTE <changaco@changaco.net>
parents: 50
diff changeset
33 import traceback
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
34
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
35
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
36 class bot(Thread):
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
37
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
38 def __init__(self, jid, password, nickname, error_fd=sys.stderr, debug=False):
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
39 Thread.__init__(self)
18
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
40 self.commands = ['!xmpp_participants', '!irc_participants']
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
41 self.bare_jid = xmpp.protocol.JID(jid=jid)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
42 self.bare_jid.setResource('')
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
43 self.nickname = nickname
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
44 self.password = password
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
45 self.error_fd = error_fd
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
46 self.debug = debug
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
47 self.bridges = []
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
48 self.xmpp_connections = {}
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
49 self.irc = irclib.IRC()
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
50 self.irc.bot = self
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
51 self.irc.add_global_handler('all_events', self._irc_event_handler)
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
52 self.irc_thread = Thread(target=self.irc.process_forever)
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
53 self.irc_thread.start()
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
54 # Open connection with XMPP server
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
55 try:
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
56 self.xmpp_c = self.get_xmpp_connection(self.nickname)
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
57 except:
19
c1b84196c100 Changed format of non-debug error messages, fixed IRC namreply handling, prevented crash when receiving bad XMPP stanza.
Charly COSTE <changaco@changaco.net>
parents: 18
diff changeset
58 self.error('[Error] XMPP Connection failed')
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
59 raise
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
60 self.xmpp_thread = Thread(target=self._xmpp_loop)
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
61 self.xmpp_thread.start()
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
62
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
63
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
64 def error(self, s, debug=False):
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
65 """Output an error message."""
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
66 if not debug or debug and self.debug:
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
67 try:
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
68 self.error_fd.write(auto_encode(s)+"\n")
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
69 except EncodingException:
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
70 self.error_fd.write('Error message cannot be transcoded.\n')
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
71
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
72
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
73 def _xmpp_loop(self):
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
74 """[Internal] XMPP infinite loop."""
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
75 while True:
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
76 try:
51
2737ed5b9003 Tried to improve the XMPP loop, again.
Charly COSTE <changaco@changaco.net>
parents: 50
diff changeset
77 if len(self.xmpp_connections) == 1:
2737ed5b9003 Tried to improve the XMPP loop, again.
Charly COSTE <changaco@changaco.net>
parents: 50
diff changeset
78 sleep(0.5) # avoid bot connection being locked all the time
2737ed5b9003 Tried to improve the XMPP loop, again.
Charly COSTE <changaco@changaco.net>
parents: 50
diff changeset
79 for c in self.xmpp_connections.itervalues():
2737ed5b9003 Tried to improve the XMPP loop, again.
Charly COSTE <changaco@changaco.net>
parents: 50
diff changeset
80 if hasattr(c, 'lock'):
49
714e78fb912e Tried to improve thread-safety during XMPP connection closing.
Charly COSTE <changaco@changaco.net>
parents: 48
diff changeset
81 c.lock.acquire()
52
5aabf124c78d Fixed XMPP connection closing and the XMPP loop
Charly COSTE <changaco@changaco.net>
parents: 51
diff changeset
82 if hasattr(c, 'Process'):
5aabf124c78d Fixed XMPP connection closing and the XMPP loop
Charly COSTE <changaco@changaco.net>
parents: 51
diff changeset
83 c.Process(0.01)
5aabf124c78d Fixed XMPP connection closing and the XMPP loop
Charly COSTE <changaco@changaco.net>
parents: 51
diff changeset
84 c.lock.release()
51
2737ed5b9003 Tried to improve the XMPP loop, again.
Charly COSTE <changaco@changaco.net>
parents: 50
diff changeset
85 except RuntimeError:
2737ed5b9003 Tried to improve the XMPP loop, again.
Charly COSTE <changaco@changaco.net>
parents: 50
diff changeset
86 pass
24
4e1f27ea527b First hack at locks for thread safety. Some other minor changes.
Charly COSTE <changaco@changaco.net>
parents: 23
diff changeset
87 except (xml.parsers.expat.ExpatError, xmpp.protocol.XMLNotWellFormed):
19
c1b84196c100 Changed format of non-debug error messages, fixed IRC namreply handling, prevented crash when receiving bad XMPP stanza.
Charly COSTE <changaco@changaco.net>
parents: 18
diff changeset
88 self.error('=> Debug: received invalid stanza', debug=True)
c1b84196c100 Changed format of non-debug error messages, fixed IRC namreply handling, prevented crash when receiving bad XMPP stanza.
Charly COSTE <changaco@changaco.net>
parents: 18
diff changeset
89 continue
51
2737ed5b9003 Tried to improve the XMPP loop, again.
Charly COSTE <changaco@changaco.net>
parents: 50
diff changeset
90 except:
2737ed5b9003 Tried to improve the XMPP loop, again.
Charly COSTE <changaco@changaco.net>
parents: 50
diff changeset
91 self.error('[Error] Unkonwn exception on XMPP thread:')
2737ed5b9003 Tried to improve the XMPP loop, again.
Charly COSTE <changaco@changaco.net>
parents: 50
diff changeset
92 traceback.print_exc()
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
93
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
94
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
95 def _xmpp_presence_handler(self, dispatcher, presence):
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
96 """[Internal] Manage XMPP presence."""
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
97
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
98 xmpp_c = dispatcher._owner
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
99
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
100 if xmpp_c.nickname != self.nickname:
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
101 self.error('=> Debug: Skipping XMPP presence not received on bot connection.', debug=True)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
102 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
103
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
104 self.error('==> Debug: Received XMPP presence.', debug=True)
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
105 self.error(presence.__str__(fancy=1), debug=True)
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
106
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
107 from_ = xmpp.protocol.JID(presence.getFrom())
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
108 bare_jid = unicode(from_.getNode()+'@'+from_.getDomain())
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
109 for bridge in self.bridges:
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
110 if bare_jid == bridge.xmpp_room.room_jid:
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
111 # presence comes from a muc
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
112 resource = unicode(from_.getResource())
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
113
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
114 if resource == '':
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
115 # presence comes from the muc itself
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
116 # TODO: handle room deletion and muc server reboot
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
117 pass
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
118
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
119 else:
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
120 # presence comes from a participant of the muc
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
121 try:
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
122 p = bridge.getParticipant(resource)
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
123
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
124 except NoSuchParticipantException:
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
125 if presence.getType() != 'unavailable' and resource != bridge.bot.nickname:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
126 bridge.addParticipant('xmpp', resource)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
127 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
128
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
129
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
130 if p.protocol == 'xmpp' and presence.getType() == 'unavailable':
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
131 x = presence.getTag('x', namespace='http://jabber.org/protocol/muc#user')
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
132 if x and x.getTag('status', attrs={'code': '303'}):
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
133 # participant changed its nickname
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
134 item = x.getTag('item')
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
135 if not item:
19
c1b84196c100 Changed format of non-debug error messages, fixed IRC namreply handling, prevented crash when receiving bad XMPP stanza.
Charly COSTE <changaco@changaco.net>
parents: 18
diff changeset
136 self.error('=> Debug: bad stanza, no item element', debug=True)
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
137 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
138 new_nick = item.getAttr('nick')
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
139 if not new_nick:
19
c1b84196c100 Changed format of non-debug error messages, fixed IRC namreply handling, prevented crash when receiving bad XMPP stanza.
Charly COSTE <changaco@changaco.net>
parents: 18
diff changeset
140 self.error('=> Debug: bad stanza, new nick is not given', debug=True)
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
141 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
142 p.changeNickname(new_nick, 'irc')
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
143
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
144 else:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
145 # participant left
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
146 bridge.removeParticipant('xmpp', resource, presence.getStatus())
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
147
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
148 return
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
149
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
150
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
151 def _xmpp_iq_handler(self, dispatcher, iq):
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
152 """[Internal] Manage XMPP IQs."""
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
153 self.error('=> Debug: Received XMPP iq.', debug=True)
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
154 self.error(iq.__str__(fancy=1), debug=True)
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
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
157 def _xmpp_message_handler(self, dispatcher, message):
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
158 """[Internal] Manage XMPP messages."""
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
159
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
160 xmpp_c = dispatcher._owner
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
161
34
57d0e66378b0 Fixed XMPP message handling and removed disconnect handler.
Charly COSTE <changaco@changaco.net>
parents: 33
diff changeset
162 if message.getBody() == None:
57d0e66378b0 Fixed XMPP message handling and removed disconnect handler.
Charly COSTE <changaco@changaco.net>
parents: 33
diff changeset
163 return
57d0e66378b0 Fixed XMPP message handling and removed disconnect handler.
Charly COSTE <changaco@changaco.net>
parents: 33
diff changeset
164
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
165 if message.getType() == 'chat':
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
166 self.error('==> Debug: Received XMPP chat message.', debug=True)
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
167 self.error(message.__str__(fancy=1), debug=True)
11
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
168 from_bare_jid = unicode(message.getFrom().getNode()+'@'+message.getFrom().getDomain())
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
169 for bridge in self.bridges:
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
170 if from_bare_jid == bridge.xmpp_room.room_jid:
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
171 # message comes from a room participant
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
172
11
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
173 try:
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
174 from_ = bridge.getParticipant(message.getFrom().getResource())
27
9b7a628ca612 Fixed XMPP message handling, again.
Charly COSTE <changaco@changaco.net>
parents: 25
diff changeset
175 to_ = bridge.getParticipant(xmpp_c.nickname)
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
176
34
57d0e66378b0 Fixed XMPP message handling and removed disconnect handler.
Charly COSTE <changaco@changaco.net>
parents: 33
diff changeset
177 from_.sayOnIRCTo(to_.nickname, message.getBody())
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
178
11
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
179 except NoSuchParticipantException:
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
180 if xmpp_c.nickname == self.nickname:
18
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
181 xmpp_c.send(xmpp.protocol.Message(to=message.getFrom(), body=self.respond(message.getBody(), participant=from_), typ='chat'))
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
182 return
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
183 self.error('=> Debug: XMPP chat message not relayed', debug=True)
11
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
184 return
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
185
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
186 elif message.getType() == 'groupchat':
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
187 # message comes from a room
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
188
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
189 for child in message.getChildren():
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
190 if child.getName() == 'delay':
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
191 # MUC delayed message
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
192 return
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
193
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
194 if xmpp_c.nickname != self.nickname:
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
195 self.error('=> Debug: Ignoring XMPP MUC message not received on bot connection.', debug=True)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
196 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
197
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
198
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
199 from_ = xmpp.protocol.JID(message.getFrom())
23
abdb7a2b6c6d Minor fixes.
Charly COSTE <changaco@changaco.net>
parents: 22
diff changeset
200
abdb7a2b6c6d Minor fixes.
Charly COSTE <changaco@changaco.net>
parents: 22
diff changeset
201 if unicode(from_.getResource()) == self.nickname:
abdb7a2b6c6d Minor fixes.
Charly COSTE <changaco@changaco.net>
parents: 22
diff changeset
202 self.error('=> Debug: Ignoring XMPP MUC message sent by self.', debug=True)
abdb7a2b6c6d Minor fixes.
Charly COSTE <changaco@changaco.net>
parents: 22
diff changeset
203 return
abdb7a2b6c6d Minor fixes.
Charly COSTE <changaco@changaco.net>
parents: 22
diff changeset
204
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
205 room_jid = unicode(from_.getNode()+'@'+from_.getDomain())
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
206 for bridge in self.bridges:
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
207 if room_jid == bridge.xmpp_room.room_jid:
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
208 resource = unicode(from_.getResource())
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
209 if resource == '':
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
210 # message comes from the room itself
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
211 self.error('=> Debug: Ignoring XMPP groupchat message sent by the room.', debug=True)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
212 return
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
213 else:
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
214 # message comes from a participant of the room
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
215 self.error('==> Debug: Received XMPP groupchat message.', debug=True)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
216 self.error(message.__str__(fancy=1), debug=True)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
217
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
218 try:
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
219 participant_ = bridge.getParticipant(resource)
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
220 except NoSuchParticipantException:
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
221 if resource != self.nickname:
37
7e500d4064fb Cosmetics.
Charly COSTE <changaco@changaco.net>
parents: 35
diff changeset
222 self.error('=> Debug: NoSuchParticipantException "'+resource+'" on "'+str(bridge)+'", WTF ?', debug=True)
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
223 return
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
224
25
a9066c416533 Added an XMPP disconnect handler, fixed XMPP message handling.
Charly COSTE <changaco@changaco.net>
parents: 24
diff changeset
225 participant_.sayOnIRC(message.getBody())
37
7e500d4064fb Cosmetics.
Charly COSTE <changaco@changaco.net>
parents: 35
diff changeset
226 return
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
227
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
228 else:
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
229 self.error('==> Debug: Received XMPP message of unknown type "'+message.getType()+'".', debug=True)
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
230 self.error(message.__str__(fancy=1), debug=True)
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
231
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
232
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
233 def _irc_event_handler(self, connection, event):
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
234 """[Internal] Manage IRC events"""
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
235
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
236 # Answer ping
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
237 if event.eventtype() == 'ping':
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
238 connection.pong(connection.get_server_name())
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
239 return
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
240
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
241
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
242 # Events we always want to ignore
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
243 if 'all' in event.eventtype() or 'motd' in event.eventtype():
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
244 return
23
abdb7a2b6c6d Minor fixes.
Charly COSTE <changaco@changaco.net>
parents: 22
diff changeset
245 if event.eventtype() in ['pong', 'privnotice', 'ctcp', 'nochanmodes', 'notexttosend', 'currenttopic', 'topicinfo']:
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
246 self.error('=> Debug: ignoring '+event.eventtype(), debug=True)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
247 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
248
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
249
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
250 nickname = None
24
4e1f27ea527b First hack at locks for thread safety. Some other minor changes.
Charly COSTE <changaco@changaco.net>
parents: 23
diff changeset
251 if event.source() != None:
4e1f27ea527b First hack at locks for thread safety. Some other minor changes.
Charly COSTE <changaco@changaco.net>
parents: 23
diff changeset
252 if '!' in event.source():
4e1f27ea527b First hack at locks for thread safety. Some other minor changes.
Charly COSTE <changaco@changaco.net>
parents: 23
diff changeset
253 nickname = event.source().split('!')[0]
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
254
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
255
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
256 # Events that we want to ignore only in some cases
14
1a1f2a0d35c7 Fixed bug that prevented the bot from connecting to freenode and all other servers that don't send "umode"
Charly COSTE <changaco@changaco.net>
parents: 11
diff changeset
257 if event.eventtype() in ['umode', 'welcome', 'yourhost', 'created', 'myinfo', 'featurelist', 'luserclient', 'luserop', 'luserchannels', 'luserme', 'n_local', 'n_global', 'endofnames', 'luserunknown', 'luserconns']:
1a1f2a0d35c7 Fixed bug that prevented the bot from connecting to freenode and all other servers that don't send "umode"
Charly COSTE <changaco@changaco.net>
parents: 11
diff changeset
258 if connection.really_connected == False:
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
259 if event.target() == connection.nickname:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
260 connection.really_connected = True
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
261 connection._call_nick_callbacks(None)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
262 elif len(connection.nick_callbacks) > 0:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
263 self.error('===> Debug: event target ('+event.target()+') and connection nickname ('+connection.nickname+') don\'t match')
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
264 connection._call_nick_callbacks('nicknametoolong', arguments=[len(event.target())])
14
1a1f2a0d35c7 Fixed bug that prevented the bot from connecting to freenode and all other servers that don't send "umode"
Charly COSTE <changaco@changaco.net>
parents: 11
diff changeset
265 self.error('=> Debug: ignoring '+event.eventtype(), debug=True)
1a1f2a0d35c7 Fixed bug that prevented the bot from connecting to freenode and all other servers that don't send "umode"
Charly COSTE <changaco@changaco.net>
parents: 11
diff changeset
266 return
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
267
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
268
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
269 # A string representation of the event
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
270 event_str = '==> Debug: Received IRC event.\nconnection='+str(connection)+'\neventtype='+event.eventtype()+'\nsource='+str(event.source())+'\ntarget='+str(event.target())+'\narguments='+str(event.arguments())
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
271
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
272
32
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
273 if event.eventtype() in ['pubmsg', 'action', 'privmsg', 'quit', 'part', 'nick']:
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
274 if nickname == None:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
275 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
276
39
3b06450d60cd Improved debug output.
Charly COSTE <changaco@changaco.net>
parents: 37
diff changeset
277 handled = False
3b06450d60cd Improved debug output.
Charly COSTE <changaco@changaco.net>
parents: 37
diff changeset
278
3b06450d60cd Improved debug output.
Charly COSTE <changaco@changaco.net>
parents: 37
diff changeset
279 if event.eventtype() in ['quit', 'part', 'nick']:
3b06450d60cd Improved debug output.
Charly COSTE <changaco@changaco.net>
parents: 37
diff changeset
280 self.error(event_str, debug=True)
3b06450d60cd Improved debug output.
Charly COSTE <changaco@changaco.net>
parents: 37
diff changeset
281
50
dbb7c29a71e2 Ignore messages sent by self
Charly COSTE <changaco@changaco.net>
parents: 49
diff changeset
282 if event.eventtype() in ['pubmsg', 'action'] and nickname == self.nickname:
dbb7c29a71e2 Ignore messages sent by self
Charly COSTE <changaco@changaco.net>
parents: 49
diff changeset
283 self.error('=> Debug: ignoring IRC '+event.eventtype()+' sent by self', debug=True)
dbb7c29a71e2 Ignore messages sent by self
Charly COSTE <changaco@changaco.net>
parents: 49
diff changeset
284 return
dbb7c29a71e2 Ignore messages sent by self
Charly COSTE <changaco@changaco.net>
parents: 49
diff changeset
285
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
286 # TODO: lock self.bridges for thread safety
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
287 for bridge in self.bridges:
32
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
288 if connection.server != bridge.irc_server:
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
289 continue
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
290
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
291 try:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
292 from_ = bridge.getParticipant(nickname)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
293
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
294 except NoSuchParticipantException:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
295 continue
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
296
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
297
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
298 # Private message
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
299 if event.eventtype() == 'privmsg':
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
300 if event.target() == None:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
301 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
302
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
303 try:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
304 to_ = bridge.getParticipant(event.target().split('!')[0])
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
305 self.error(event_str, debug=True)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
306 from_.sayOnXMPPTo(to_.nickname, event.arguments()[0])
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
307 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
308
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
309 except NoSuchParticipantException:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
310 if event.target().split('!')[0] == self.nickname:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
311 # Message is for the bot
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
312 self.error(event_str, debug=True)
18
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
313 connection.privmsg(from_.nickname, self.respond(event.arguments()[0]))
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
314 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
315 else:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
316 continue
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
317
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
318
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
319 # From here we skip if the event was not received on bot connection
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
320 if connection.get_nickname() != self.nickname:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
321 self.error('=> Debug: ignoring IRC '+event.eventtype()+' not received on bridge connection', debug=True)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
322 continue
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
323
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
324 # Leaving events
45
41394ddb3aff Lower before comparing strings.
Charly COSTE <changaco@changaco.net>
parents: 44
diff changeset
325 if event.eventtype() == 'quit' or event.eventtype() == 'part' and event.target().lower() == bridge.irc_room:
30
c0fb916cb0a0 Fixed IRC leaving events handling.
Charly COSTE <changaco@changaco.net>
parents: 29
diff changeset
326 if len(event.arguments()) > 0:
c0fb916cb0a0 Fixed IRC leaving events handling.
Charly COSTE <changaco@changaco.net>
parents: 29
diff changeset
327 leave_message = event.arguments()[0]
c0fb916cb0a0 Fixed IRC leaving events handling.
Charly COSTE <changaco@changaco.net>
parents: 29
diff changeset
328 elif event.eventtype() == 'quit':
c0fb916cb0a0 Fixed IRC leaving events handling.
Charly COSTE <changaco@changaco.net>
parents: 29
diff changeset
329 leave_message = 'Left server.'
c0fb916cb0a0 Fixed IRC leaving events handling.
Charly COSTE <changaco@changaco.net>
parents: 29
diff changeset
330 elif event.eventtype() == 'part':
c0fb916cb0a0 Fixed IRC leaving events handling.
Charly COSTE <changaco@changaco.net>
parents: 29
diff changeset
331 leave_message = 'Left channel.'
c0fb916cb0a0 Fixed IRC leaving events handling.
Charly COSTE <changaco@changaco.net>
parents: 29
diff changeset
332 else:
c0fb916cb0a0 Fixed IRC leaving events handling.
Charly COSTE <changaco@changaco.net>
parents: 29
diff changeset
333 leave_message = ''
c0fb916cb0a0 Fixed IRC leaving events handling.
Charly COSTE <changaco@changaco.net>
parents: 29
diff changeset
334 bridge.removeParticipant('irc', from_.nickname, leave_message)
39
3b06450d60cd Improved debug output.
Charly COSTE <changaco@changaco.net>
parents: 37
diff changeset
335 handled = True
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
336 continue
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
337
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
338
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
339 # Nickname change
41
4c4f4ee72e17 Fixed IRC "nick" event handling. Fixed bot's XMPP infinite loop.
Charly COSTE <changaco@changaco.net>
parents: 39
diff changeset
340 if event.eventtype() == 'nick':
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
341 from_.changeNickname(event.target(), 'xmpp')
39
3b06450d60cd Improved debug output.
Charly COSTE <changaco@changaco.net>
parents: 37
diff changeset
342 handled = True
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
343 continue
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
344
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
345
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
346 # Chan message
32
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
347 if event.eventtype() in ['pubmsg', 'action']:
45
41394ddb3aff Lower before comparing strings.
Charly COSTE <changaco@changaco.net>
parents: 44
diff changeset
348 if bridge.irc_room == event.target().lower() and bridge.irc_server == connection.server:
39
3b06450d60cd Improved debug output.
Charly COSTE <changaco@changaco.net>
parents: 37
diff changeset
349 self.error(event_str, debug=True)
32
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
350 message = event.arguments()[0]
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
351 if event.eventtype() == 'action':
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
352 message = '/me '+message
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
353 from_.sayOnXMPP(message)
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
354 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
355 else:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
356 continue
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
357
39
3b06450d60cd Improved debug output.
Charly COSTE <changaco@changaco.net>
parents: 37
diff changeset
358 if handled == False:
3b06450d60cd Improved debug output.
Charly COSTE <changaco@changaco.net>
parents: 37
diff changeset
359 if not event.eventtype() in ['quit', 'part', 'nick']:
3b06450d60cd Improved debug output.
Charly COSTE <changaco@changaco.net>
parents: 37
diff changeset
360 self.error(event_str, debug=True)
44
3d964ca1cf89 Fixed XMPP infinite loop and a debug message that wasn't flagged as a debug one.
Charly COSTE <changaco@changaco.net>
parents: 42
diff changeset
361 self.error('=> Debug: event was not handled', debug=True)
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
362 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
363
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
364
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
365 if event.eventtype() in ['namreply', 'join']:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
366 if connection.get_nickname() != self.nickname:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
367 self.error('=> Debug: ignoring IRC '+event.eventtype()+' not received on bridge connection', debug=True)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
368 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
369
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
370 if event.eventtype() == 'namreply':
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
371 # TODO: lock self.bridges for thread safety
48
cb08ea878db9 lower() for "join" and "namreply" IRC events
Charly COSTE <changaco@changaco.net>
parents: 47
diff changeset
372 for bridge in self.getBridges(irc_room=event.arguments()[1].lower(), irc_server=connection.server):
19
c1b84196c100 Changed format of non-debug error messages, fixed IRC namreply handling, prevented crash when receiving bad XMPP stanza.
Charly COSTE <changaco@changaco.net>
parents: 18
diff changeset
373 for nickname in re.split('(?:^[&@\+]?|(?: [&@\+]?)*)', event.arguments()[2].strip()):
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
374 if nickname == '' or nickname == self.nickname:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
375 continue
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
376 bridge.addParticipant('irc', nickname)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
377 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
378 elif event.eventtype() == 'join':
48
cb08ea878db9 lower() for "join" and "namreply" IRC events
Charly COSTE <changaco@changaco.net>
parents: 47
diff changeset
379 bridges = self.getBridges(irc_room=event.target().lower(), irc_server=connection.server)
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
380 if len(bridges) == 0:
48
cb08ea878db9 lower() for "join" and "namreply" IRC events
Charly COSTE <changaco@changaco.net>
parents: 47
diff changeset
381 self.error('===> Debug: no bridge found for "'+event.target().lower()+' at '+connection.server+'"', debug=True)
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
382 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
383 for bridge in bridges:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
384 bridge.addParticipant('irc', nickname)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
385 return
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
386
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
387
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
388 # From here the event is shown
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
389 self.error(event_str, debug=True)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
390
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
391 if event.eventtype() == 'disconnect':
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
392 # TODO: lock self.bridges for thread safety
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
393 for bridge in self.bridges:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
394 try:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
395 bridge.getParticipant(connection.get_nickname())
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
396 if bridge.mode == 'normal':
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
397 bridge.switchFromNormalToLimitedMode()
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
398 except NoSuchParticipantException:
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
399 pass
5
cb0daec4b778 Added support for IRC "nick" event, fixed participant.changeNickname(), fixed handling of IRC "namreply" event, removed muc._check() because waiting does not solve the problem if it is blocking incoming messages handling
Charly COSTE <changaco@changaco.net>
parents: 3
diff changeset
400 return
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
401 elif event.eventtype() == 'nicknameinuse':
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
402 connection._call_nick_callbacks('nicknameinuse')
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
403 return
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
404 elif event.eventtype() == 'erroneusnickname':
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
405 connection._call_nick_callbacks('erroneusnickname')
5
cb0daec4b778 Added support for IRC "nick" event, fixed participant.changeNickname(), fixed handling of IRC "namreply" event, removed muc._check() because waiting does not solve the problem if it is blocking incoming messages handling
Charly COSTE <changaco@changaco.net>
parents: 3
diff changeset
406 return
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
407
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
408
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
409 # Unhandled events
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
410 self.error('=> Debug: event not handled', debug=True)
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
411
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
412
21
801160b4136f Introduced a bridge's "say" attribute to offer more flexibility in what the bot says.
Charly COSTE <changaco@changaco.net>
parents: 20
diff changeset
413 def new_bridge(self, xmpp_room, irc_room, irc_server, mode, say_level, irc_port=6667):
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
414 """Create a bridge between xmpp_room and irc_room at irc_server."""
21
801160b4136f Introduced a bridge's "say" attribute to offer more flexibility in what the bot says.
Charly COSTE <changaco@changaco.net>
parents: 20
diff changeset
415 b = bridge(self, xmpp_room, irc_room, irc_server, mode, say_level, irc_port=irc_port)
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
416 self.bridges.append(b)
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
417 return b
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
418
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
419
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
420 def getBridges(self, irc_room=None, irc_server=None, xmpp_room_jid=None):
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
421 bridges = [b for b in self.bridges]
32
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
422 for bridge in [b for b in bridges]:
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
423 if irc_room != None and bridge.irc_room != irc_room:
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
424 bridges.remove(bridge)
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
425 continue
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
426 if irc_server != None and bridge.irc_server != irc_server:
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
427 bridges.remove(bridge)
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
428 continue
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
429 if xmpp_room_jid != None and bridge.xmpp_room.room_jid != xmpp_room_jid:
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
430 bridges.remove(bridge)
8aa261545662 Implemented "/me" in the IRC->XMPP way (ie "action" event is now handled). Re-written bot.getBridges because the old one didn't always work and was slow.
Charly COSTE <changaco@changaco.net>
parents: 30
diff changeset
431 continue
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
432 return bridges
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
433
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
434
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
435 def get_xmpp_connection(self, nickname):
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
436 if self.xmpp_connections.has_key(nickname):
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
437 c = self.xmpp_connections[nickname]
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
438 c.used_by += 1
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
439 self.error('===> Debug: using existing XMPP connection for "'+nickname+'", now used by '+str(c.used_by)+' bridges', debug=True)
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
440 return c
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
441 self.error('===> Debug: opening new XMPP connection for "'+nickname+'"', debug=True)
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
442 c = xmpp.client.Client(self.bare_jid.getDomain(), debug=[])
35
ebf516b2e5c9 Switched from Lock() to RLock().
Charly COSTE <changaco@changaco.net>
parents: 34
diff changeset
443 c.lock = threading.RLock()
24
4e1f27ea527b First hack at locks for thread safety. Some other minor changes.
Charly COSTE <changaco@changaco.net>
parents: 23
diff changeset
444 c.lock.acquire()
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
445 self.xmpp_connections[nickname] = c
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
446 c.used_by = 1
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
447 c.nickname = nickname
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
448 c.connect()
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
449 c.auth(self.bare_jid.getNode(), self.password)
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
450 c.RegisterHandler('presence', self._xmpp_presence_handler)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
451 c.RegisterHandler('iq', self._xmpp_iq_handler)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
452 c.RegisterHandler('message', self._xmpp_message_handler)
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
453 c.sendInitPresence()
24
4e1f27ea527b First hack at locks for thread safety. Some other minor changes.
Charly COSTE <changaco@changaco.net>
parents: 23
diff changeset
454 c.lock.release()
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
455 return c
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
456
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
457
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
458 def close_xmpp_connection(self, nickname):
29
a694ffe6a973 Fixed nickname change.
Charly COSTE <changaco@changaco.net>
parents: 27
diff changeset
459 if not self.xmpp_connections.has_key(nickname):
a694ffe6a973 Fixed nickname change.
Charly COSTE <changaco@changaco.net>
parents: 27
diff changeset
460 return
37
7e500d4064fb Cosmetics.
Charly COSTE <changaco@changaco.net>
parents: 35
diff changeset
461 c = self.xmpp_connections[nickname]
42
b8c9ddf320f8 Thread safety for bot.close_xmpp_connection().
Charly COSTE <changaco@changaco.net>
parents: 41
diff changeset
462 c.lock.acquire()
37
7e500d4064fb Cosmetics.
Charly COSTE <changaco@changaco.net>
parents: 35
diff changeset
463 c.used_by -= 1
7e500d4064fb Cosmetics.
Charly COSTE <changaco@changaco.net>
parents: 35
diff changeset
464 if c.used_by < 1:
22
e2bd4de698e5 Solved an XMPP resource conflict that would have happened when someone on IRC changed its nickname and later its old nickname would be used again. In other words, the bot no longer uses nicknames as XMPP resources.
Charly COSTE <changaco@changaco.net>
parents: 21
diff changeset
465 self.error('===> Debug: closing XMPP connection for "'+nickname+'"', debug=True)
37
7e500d4064fb Cosmetics.
Charly COSTE <changaco@changaco.net>
parents: 35
diff changeset
466 self.xmpp_connections.pop(nickname)
52
5aabf124c78d Fixed XMPP connection closing and the XMPP loop
Charly COSTE <changaco@changaco.net>
parents: 51
diff changeset
467 c.send(xmpp.protocol.Presence(typ='unavailable'))
49
714e78fb912e Tried to improve thread-safety during XMPP connection closing.
Charly COSTE <changaco@changaco.net>
parents: 48
diff changeset
468 c.lock.release()
37
7e500d4064fb Cosmetics.
Charly COSTE <changaco@changaco.net>
parents: 35
diff changeset
469 del c
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
470 else:
42
b8c9ddf320f8 Thread safety for bot.close_xmpp_connection().
Charly COSTE <changaco@changaco.net>
parents: 41
diff changeset
471 c.lock.release()
37
7e500d4064fb Cosmetics.
Charly COSTE <changaco@changaco.net>
parents: 35
diff changeset
472 self.error('===> Debug: XMPP connection for "'+nickname+'" is now used by '+str(c.used_by)+' bridges', debug=True)
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
473
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
474
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
475 def removeBridge(self, bridge):
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
476 self.bridges.remove(bridge)
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
477 del bridge
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
478
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
479
18
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
480 def respond(self, message, participant=None):
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
481 ret = ''
11
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
482 if message.strip() == '!xmpp_participants':
18
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
483 if participant == None:
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
484 for bridge in self.bridges:
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
485 xmpp_participants_nicknames = bridge.get_participants_nicknames_list(protocols=['xmpp'])
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
486 ret += '\nparticipants on '+bridge.xmpp_room.room_jid+': '+' '.join(xmpp_participants_nicknames)
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
487 return ret
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
488 else:
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
489 xmpp_participants_nicknames = participant.bridge.get_participants_nicknames_list(protocols=['xmpp'])
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
490 return 'participants on '+participant.bridge.xmpp_room.room_jid+': '+' '.join(xmpp_participants_nicknames)
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
491 elif message.strip() == '!irc_participants':
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
492 if participant == None:
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
493 for bridge in self.bridges:
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
494 irc_participants_nicknames = bridge.get_participants_nicknames_list(protocols=['irc'])
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
495 ret += '\nparticipants on '+bridge.irc_room+' at '+bridge.irc_server+': '+' '.join(irc_participants_nicknames)
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
496 return ret
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
497 else:
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
498 irc_participants_nicknames = participant.bridge.get_participants_nicknames_list(protocols=['irc'])
3cdf7bb580da Fixed bot.respond(), boosted XMPP thread to lower latency, fixed mode notice.
Charly COSTE <changaco@changaco.net>
parents: 17
diff changeset
499 return 'participants on '+participant.bridge.irc_room+' at '+participant.bridge.irc_server+': '+' '.join(irc_participants_nicknames)
11
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
500 else:
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
501 return 'commands: '+' '.join(self.commands)
79b0a7f48a3e Introduced the command mechanism and fixed a bug
Charly COSTE <changaco@changaco.net>
parents: 10
diff changeset
502
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
503
0
4c842d23d4ce Initial commit, version 0.1
Charly COSTE <changaco@changaco.net>
parents:
diff changeset
504 def __del__(self):
17
32a35f7eff70 Rewrote/modified many things, multiple bridges should now work and are preferred over multiple bots.
Charly COSTE <changaco@changaco.net>
parents: 14
diff changeset
505 for bridge in self.bridges:
52
5aabf124c78d Fixed XMPP connection closing and the XMPP loop
Charly COSTE <changaco@changaco.net>
parents: 51
diff changeset
506 self.removeBridge(bridge)