def on_connect(self, result, error): if error: self.disconnect(error=error[1]) # we should immediately retry if we failed to open the socket and # there are hosts left if self.status == DISCONNECTED and not self.failedlasthost: windows.get_default( self, self.core.manager).write("* Retrying with next available host") self.connect() else: self.source = source = ui.Source() self.status = INITIALIZING self.failedhosts[:] = () self.events.trigger('SocketConnect', network=self) if source.enabled: self.source = ui.fork(self.on_read, self.socket.recv, 8192) # Auto join channels on connect for channel in self.core.channels: self.core.run_command("/join %s" % channel) for channelother in self.core.channels: self.core.run_command("/join %s" % channelother)
def server(server=None, port=6667, network=None, connect=True): network_info = {} if server: network_info["name"] = server network_info["server"] = server if port: network_info["port"] = port get_network_info(server, network_info) if not network: network = irc.Network(**network_info) windows.new(windows.StatusWindow, network, "status").activate() else: if "server" in network_info: network.name = network_info['name'] network.server = network_info['server'] if not network.status: window = windows.get_default(network, core.manager) if window: window.update() if "port" in network_info: network.port = network_info["port"] if network.status: network.quit() if connect: network.connect() #core.window.write("* Connecting to %s on port %s" % (network.server, network.port)) windows.get_default(network, core.manager).write( "* Connecting to %s on port %s" % (network.server, network.port) ) return network
def do_announce_reconnect(): if not e.network.status: windows.get_default( e.network).write( "* Will reconnect in %s seconds.." % delay) e.network._reconnect_source = ui.register_timer( delay * 1000, do_reconnect)
def notice(self, target, msg): self.raw("NOTICE %s :%s" % (target, msg)) if len(msg) > 1 and msg[0:1] == "\x01": self.events.trigger( 'OwnCtcpReply', source=self.me, target=str(target), text=msg[1:-1], network=self, window=windows.get_default(self, self.manager) ) else: self.events.trigger( 'OwnNotice', source=self.me, target=str(target), text=msg, network=self, window=windows.get_default(self) )
def notice(self, target, msg): self.raw("NOTICE %s :%s" % (target, msg)) events.trigger( 'OwnNotice', source=self.me, target=str(target), text=msg, network=self, window=windows.get_default(self) )
def got_msg(self, msg): pmsg = parse_irc(msg, self.server) e_data = self.events.data(raw=msg, msg=pmsg, text=pmsg[-1], network=self, window=windows.get_default( self, self.core.manager)) if "!" in pmsg[0]: e_data.source, e_data.address = pmsg[0].split('!', 1) else: e_data.source, e_data.address = pmsg[0], '' if len(pmsg) > 2: e_data.target = pmsg[2] else: e_data.target = pmsg[-1] if len(pmsg) >= 4: channel = pmsg[2] msg = pmsg[3] if self.me in msg and not self.activity.has_toplevel_focus(): self.activity.notify_user(e_data.source + _(" on ") + channel, msg) if _HAS_SOUND: SOUNDS_PATH = os.path.join(get_bundle_path(), 'sounds') SOUND = os.path.join(SOUNDS_PATH, 'alert.wav') PLAYER.set_state(Gst.State.NULL) PLAYER.set_property('uri', 'file://%s' % SOUND) PLAYER.set_state(Gst.State.PLAYING) self.events.trigger('Raw', e_data)
def disconnect(self, error=None): if self.socket: self.socket.close() if self.source: self.source.unregister() self.source = None self.socket = None self.status = DISCONNECTED #note: connecting from onDisconnect is probably a Bad Thing self.events.trigger('Disconnect', network=self, error=error) #trigger a nick change if the nick we want is different from the one we # had. if self.me != self.nicks[0]: self.events.trigger('Nick', network=self, window=windows.get_default(self), source=self.me, target=self.nicks[0], address='', text=self.nicks[0]) self.me = self.nicks[0]
def msg(self, target, msg): self.raw("PRIVMSG %s :%s" % (target, msg)) events.trigger( 'OwnText', source=self.me, target=str(target), text=msg, network=self, window=windows.get_default(self) )
def onCtcpReply(e): color = getsourcecolor(e) to_write = "%s%s--- %s reply from %s:\x0F %s" % (prefix(e), color, e.name.capitalize(), format_source(e), ' '.join(e.args)) window = windows.manager.get_active() if window.network != e.network: window = windows.get_default(e.network) window.write(to_write, widgets.TEXT)
def notice(self, target, msg): self.raw("NOTICE %s :%s" % (target, msg)) if len(msg) > 1 and msg[0:1] == "\x01": self.events.trigger('OwnCtcpReply', source=self.me, target=str(target), text=msg[1:-1], network=self, window=windows.get_default(self, self.manager)) else: self.events.trigger('OwnNotice', source=self.me, target=str(target), text=msg, network=self, window=windows.get_default(self))
def onOwnNotice(e): window = windows.manager.get_active() if window.network != e.network: window = windows.get_default(e.network) f = log_file(e.network, window.id) f.write('-%s- %s' % (e.source, e.text))
def onCtcpReply(e): window = windows.manager.get_active() if window.network != e.network: window = windows.get_default(e.network) f = log_file(e.network, window.id) f.write('--- %s reply from %s: %s' % (e.name.capitalize(), e.source, ' '.join(e.args)))
def msg(self, target, msg): self.raw("PRIVMSG %s :%s" % (target, msg)) self.events.trigger('OwnText', source=self.me, target=str(target), text=msg, network=self, window=windows.get_default(self, self.manager))
def notice(self, target, msg): self.raw("NOTICE %s :%s" % (target, msg)) self.events.trigger('OwnNotice', source=self.me, target=str(target), text=msg, network=self, window=windows.get_default(self))
def onOwnCtcpReply(e): color = getsourcecolor(e) to_write = "%s-> %s--- %s reply from %s:\x0F %s" % ( prefix(e), color, e.name.capitalize(), format_source(e), ' '.join(e.args)) window = windows.manager.get_active() if window.network != e.network: window = windows.get_default(e.network) window.write(to_write, widgets.TEXT)
def msg(self, target, msg): self.raw("PRIVMSG %s :%s" % (target, msg)) if len(msg) > 8 and msg[0:7] == "\x01ACTION": self.events.trigger( 'OwnAction', source=self.me, target=str(target), text=msg[8:-1], network=self, window=windows.get_default(self, self.manager) ) elif len(msg) > 1 and msg[0:1] == "\x01": self.events.trigger( 'OwnCtcp', source=self.me, target=str(target), text=msg[1:-1], network=self, window=windows.get_default(self, self.manager) ) else: self.events.trigger( 'OwnText', source=self.me, target=str(target), text=msg, network=self, window=windows.get_default(self, self.manager) )
def change_nick(network, nick): if not network.status: core.events.trigger( 'Nick', network=network, window=windows.get_default(network, core.manager), source=network.me, target=nick, address='', text=nick ) network.nicks[0] = nick network.me = nick else: network.raw('NICK :%s' % nick)
def on_connect(self, result, error): if error: self.disconnect(error=error[1]) #we should immediately retry if we failed to open the socket and there are hosts left if self.status == DISCONNECTED and not self.failedlasthost: windows.get_default(self, self.core.manager).write( "* Retrying with next available host") self.connect() else: self.source = source = ui.Source() self.status = INITIALIZING self.failedhosts[:] = () self.events.trigger('SocketConnect', network=self) if source.enabled: self.source = ui.fork(self.on_read, self.socket.recv, 8192) # Auto join channels on connect for channel in self.core.channels: self.core.run_command("/join %s" % channel)
def onCommandIrcurl(e): url = e.args[0] if url.startswith('irc://'): url = url[6:] if not url.startswith('/'): host, target = url.rsplit('/', 1) if ':' in host: host, port = host.rsplit(':', 1) else: port = 6667 else: host = None port = 6667 target = url if host: if e.network and e.network.server == host: network = e.network else: for w in list(windows.manager): if w.network and w.network.server == host: network = w.network break else: for w in list(windows.manager): if w.network and w.network.server == 'irc.default.org': network = server(host, port, w.network) break else: network = server(host, port) if ',' in target: target, modifiers = target.split(',', 1) action = '' else: target = unquote(target) if target[0] not in '#&+': target = '#' + target action = 'join %s' % target if network.status == irc.CONNECTED: core.events.run(action, windows.get_default(network), network) else: if not hasattr(network, 'temp_perform'): network.temp_perform = [action] else: network.temp_perform.append(action)
def msg(self, target, msg): self.raw("PRIVMSG %s :%s" % (target, msg)) if len(msg) > 8 and msg[0:7] == "\x01ACTION": self.events.trigger('OwnAction', source=self.me, target=str(target), text=msg[8:-1], network=self, window=windows.get_default(self, self.manager)) elif len(msg) > 1 and msg[0:1] == "\x01": self.events.trigger('OwnCtcp', source=self.me, target=str(target), text=msg[1:-1], network=self, window=windows.get_default(self, self.manager)) else: self.events.trigger('OwnText', source=self.me, target=str(target), text=msg, network=self, window=windows.get_default(self, self.manager))
def got_msg(self, msg): pmsg = parse_irc(msg, self.server) e_data = self.events.data( raw=msg, msg=pmsg, text=pmsg[-1], network=self, window=windows.get_default(self, self.core.manager) ) if "!" in pmsg[0]: e_data.source, e_data.address = pmsg[0].split('!', 1) else: e_data.source, e_data.address = pmsg[0], '' if len(pmsg) > 2: e_data.target = pmsg[2] else: e_data.target = pmsg[-1] if len(pmsg) >= 4: channel = pmsg[2] msg = pmsg[3] if self.me in msg and not self.activity.has_toplevel_focus(): self.activity.notify_user( e_data.source + _(" on ") + channel, msg) if _HAS_SOUND: SOUNDS_PATH = os.path.join(get_bundle_path(), 'sounds') SOUND = os.path.join(SOUNDS_PATH, 'alert.wav') PLAYER.set_state(Gst.State.NULL) PLAYER.set_property('uri', 'file://%s' % SOUND) PLAYER.set_state(Gst.State.PLAYING) self.events.trigger('Raw', e_data)
def got_msg(self, msg): pmsg = parse_irc(msg, self.server) e_data = self.events.data(raw=msg, msg=pmsg, text=pmsg[-1], network=self, window=windows.get_default( self, self.core.manager)) if "!" in pmsg[0]: e_data.source, e_data.address = pmsg[0].split('!', 1) else: e_data.source, e_data.address = pmsg[0], '' if len(pmsg) > 2: e_data.target = pmsg[2] else: e_data.target = pmsg[-1] self.events.trigger('Raw', e_data)
def got_msg(self, msg): pmsg = parse_irc(msg, self.server) e_data = self.events.data( raw=msg, msg=pmsg, text=pmsg[-1], network=self, window=windows.get_default(self, self.core.manager) ) if "!" in pmsg[0]: e_data.source, e_data.address = pmsg[0].split('!', 1) else: e_data.source, e_data.address = pmsg[0], '' if len(pmsg) > 2: e_data.target = pmsg[2] else: e_data.target = pmsg[-1] self.events.trigger('Raw', e_data)
def disconnect(self, error=None): if self.socket: self.socket.close() if self.source: self.source.unregister() self.source = None self.socket = None self.status = DISCONNECTED # note: connecting from onDisconnect is probably a Bad Thing self.events.trigger('Disconnect', network=self, error=error) # trigger a nick change if the nick we want is different from the one we # had. if self.me != self.nicks[0]: self.events.trigger( 'Nick', network=self, window=windows.get_default(self), source=self.me, target=self.nicks[0], address='', text=self.nicks[0] ) self.me = self.nicks[0]
def emote(network, user, msg): network.raw("PRIVMSG %s :\x01ACTION %s\x01" % (user, msg)) events.trigger( 'OwnAction', network=network, window=windows.get_default(network), source=network.me, target=str(user), text=msg )
def onConnecting(e): window = windows.get_default(e.network) if window: window.update()
def onConnecting(e): return window = windows.get_default(e.network) if window: window.update()