def __init__(self, debug=False): self.debug = debug self.lasts = {} self.create_settings() self.load_settings() self.create_socket() if self.debug: irssi.prnt("RStatus loaded. Windows:") irssi.prnt(pprint.pformat(self.window_all())) irssi.signal_add("setup changed", self.load_settings) irssi.signal_add("setup reread", self.load_settings) irssi.signal_add("window hilight", self.windowhilight) irssi.signal_add("message private", self.privmsg) irssi.signal_add("message public", self.pubmsg) irssi.signal_add("channel destroyed", self.channeldestroyed) irssi.signal_add("query destroyed", self.querydestroyed) irssi.command_bind("rstatus", self.status)
for i in s: if i in fro: ret.append(to[fro.index(i)]) else: ret.append(i) return "".join(ret) def send(msg, server, witem): global stripped_out if stripped_out: return signal = irssi.signal_get_emitted() if msg.startswith("/nounaccent"): msg = msg[len("/nounaccent") + 1 :] elif not msg.startswith("/dict") and not msg.startswith("/spell"): msg = unaccent(msg) stripped_out = True irssi.signal_stop() irssi.signal_emit(signal, msg, server, witem) stripped_out = False def nounaccent(msg, server, witem): irssi.signal_emit("send command", "/ /nounaccent" + msg, server, witem) irssi.signal_add("send command", send) irssi.command_bind("nounaccent", nounaccent)
if len(i): tmp.append(i) argv = tmp del tmp if len(argv) > 1: lang = argv[0] word = argv[1] else: lang = "en" if server.tag in server_langs.keys(): lang = server_langs[server.tag] if witem: if witem.name in channel_langs.keys(): lang = channel_langs[witem.name] word = argv[0] if lang in aliases.keys(): lang = aliases[lang] pout, pin = popen2.popen2('hunspell -a -d %s' % lang) pin.write("%s\n" % word) pin.close() ret = pout.readlines() pout.close() if ret[1].startswith("&"): print ret[1].split(":")[1].strip() else: print "OK" irssi.command_bind('spell', cmd_spell)
for i in irssi.windows(): print 'window refnum', i.refnum, 'window name', i.name print f0 = irssi.window_find_name('melbo') f1 = irssi.window_find_name('(status)') print 'irssi.window_find_name(melbo)', f0 print 'irssi.window_find_name(status)', f1 def cmd_opentest(data, server, witem): global win0, win1 win0 = irssi.window_create(automatic=True) print 'window_create(automatic=True) ->', win0 win1 = irssi.window_create(automatic=False) print 'window_create(automatic=False) ->', win1 def cmd_closetest(data, server, witem): print 'destroy win0 && win1' win0.destroy() win1.destroy() def cmd_postclose(*args): print 'post-close access' print win0.items() print win1.items() irssi.command_bind('wintest', cmd_wintest) irssi.command_bind('closetest', cmd_closetest) irssi.command_bind('postclose', cmd_postclose) irssi.command_bind('opentest', cmd_opentest)
def cmd_iinfo(data, server, witem): global idles labels = ('Server', 'Channel', 'Idle') servers = [] for i in irssi.servers(): for j in i.channels(): if i.tag not in idles.keys() or j.name not in idles[i.tag].keys(): init_idles() idle = how_old(idles[i.tag][j.name]) servers.append([i.tag, j.name, idle, str(idles[i.tag][j.name])]) servers.sort(lambda x, y: int(float(x[3])-float(y[3]))) servers = map(lambda x: x[:-1], servers) print print indent([labels]+servers).strip() print def send(server, msg, witem): global idles if not server or not witem: return if server.tag not in idles.keys(): idles[server.tag] = {witem: time.time()} else: idles[server.tag][witem] = time.time() init_idles() irssi.command_bind('iinfo', cmd_iinfo) irssi.signal_add("message own_public", send)
# -*- coding: utf-8 -*- import random NOTES = u'♩♪♫♬' MODIFIERS = u'♭♮♯' def picknote(): ret = random.choice(NOTES) if not random.randrange(4): ret = random.choice(MODIFIERS) + ret return ret def notesay(s): return u'%s %s %s' % (picknote(), s, picknote()) def irssi_notesay(data, server, witem): data = data.decode('utf-8') witem.command('say %s' % (notesay(data).encode('utf-8'),)) if __name__ == '__main__': import sys print notesay(' '.join(sys.argv[1:]).decode('utf-8')).encode('utf-8') else: import irssi irssi.command_bind('notesay', irssi_notesay)
print 'printing to channel' server.send_message('#booh', 'test msg chan', 0) server.send_message('#booh', 'test msg chan ER', 1) print 'printing to nick' server.send_message('melbo', 'test msg nick', 1) server.send_message('melbo', 'test msg nick ER', 0) """ witem.prnt("hello there") global __last_witem __last_witem = witem global __last_server __last_server = server # new = irssi.IrssiChatBase() # print 'New', new.type_id def cmd_crashme(data, server, witem): __last_server.prnt("#booh", "what up??") __last_witem.prnt("imma crash mebbe?") print dir(_script) print _script.module print _script.argv irssi.command_bind("pydumper", cmd_pydumper) irssi.command_bind("crashme", cmd_crashme)
return(chr(string.atoi(match.group()[2:-1]))) def cmd_dict(data, server, witem): """data - contains the parameters for /dict server - the active server in window witem - the active window item (eg. channel, query) or None if the window is empty""" argv = data.split(' ') tmp = [] for i in argv: if len(i): tmp.append(i) argv = tmp del tmp if len(argv) > 1: lang = argv[0] word = " ".join(argv[1:]) else: lang = "en" word = " ".join(argv) try: ret = sztakidict.helper(lang, word) except IOError, str: print "problem: %s" % str return print unicode(ret, "utf8").encode("latin2") irssi.command_bind('dict', cmd_dict)
# -*- coding: utf-8 -*- import random NOTES = u'♩♪♫♬' MODIFIERS = u'♭♮♯' def picknote(): ret = random.choice(NOTES) if not random.randrange(4): ret = random.choice(MODIFIERS) + ret return ret def notesay(s): return u'%s %s %s' % (picknote(), s, picknote()) def irssi_notesay(data, server, witem): data = data.decode('utf-8') witem.command('say %s' % (notesay(data).encode('utf-8'), )) if __name__ == '__main__': import sys print notesay(' '.join(sys.argv[1:]).decode('utf-8')).encode('utf-8') else: import irssi irssi.command_bind('notesay', irssi_notesay)
elif nick not in keys: return 0 send_msg(server, nick, msg, command=command) irssi.signal_stop() return 1 def command_out(command, server, query): return privmsg_out(command, server, query, True) load_keys() irssi.get_script().theme_register([ ('own_msg', irssi.current_theme().get_format('fe-common/core', 'own_msg')), ('own_action', irssi.current_theme().get_format('fe-common/irc', 'own_action')), ('pubmsg', irssi.current_theme().get_format('fe-common/core', 'pubmsg')), ('action_public', irssi.current_theme().get_format('fe-common/irc', 'action_public')) ]) irssi.command_bind('setkey', setkey) irssi.command_bind('listkeys', listkeys) irssi.command_bind('keyx', keyx) irssi.signal_add('message private', privmsg_in) irssi.signal_add('send text', privmsg_out) irssi.signal_add('send command', command_out)
import irssi import re def command_go(command, server, channel): if len ( command ) == 0: return for win in irssi.windows(): if win.get_active_name(): name = re.sub(r'[^a-zA-Z0-9]+', '', win.get_active_name()) if len ( name ) > 0: if re.search(r'^%s' %(command), name, re.IGNORECASE ): win.set_active() return True return None irssi.command_bind('g', command_go)
ret = [] fro = "??????????????????" to = "AEIOOOUUUaeiooouuu" for i in s: if i in fro: ret.append(to[fro.index(i)]) else: ret.append(i) return "".join(ret) def send(msg, server, witem): global stripped_out if stripped_out: return signal = irssi.signal_get_emitted() if msg.startswith("/nounaccent"): msg = msg[len("/nounaccent")+1:] elif not msg.startswith("/dict") and not msg.startswith("/spell"): msg = unaccent(msg) stripped_out = True irssi.signal_stop() irssi.signal_emit(signal, msg, server, witem) stripped_out = False def nounaccent(msg, server, witem): irssi.signal_emit("send command", "/ /nounaccent" + msg, server, witem) irssi.signal_add("send command", send) irssi.command_bind('nounaccent', nounaccent)
def cmd_whois(data, server, witem): """data - contains the parameters for /dict server - the active server in window witem - the active window item (eg. channel, query) or None if the window is empty""" argv = data.split(' ') # get the ip if this is a hostname ip = argv[0] try: socket.inet_aton(ip) except socket.error: ip = socket.gethostbyname(ip) sock = urllib.urlopen("http://www.completewhois.com/cgi2/whois.cgi?query=%s" % ip) descr = None country = None for i in sock.readlines(): if i.startswith("descr: "): if not descr: descr = i.split(":")[1].strip() if i.startswith("country: "): if not country: country = i.split(":")[1].strip() sock.close() print "%s, %s" % (descr, country) irssi.command_bind('pywhois', cmd_whois)
f0 = irssi.window_find_name("melbo") f1 = irssi.window_find_name("(status)") print "irssi.window_find_name(melbo)", f0 print "irssi.window_find_name(status)", f1 def cmd_opentest(data, server, witem): global win0, win1 win0 = irssi.window_create(automatic=True) print "window_create(automatic=True) ->", win0 win1 = irssi.window_create(automatic=False) print "window_create(automatic=False) ->", win1 def cmd_closetest(data, server, witem): print "destroy win0 && win1" win0.destroy() win1.destroy() def cmd_postclose(*args): print "post-close access" print win0.items() print win1.items() irssi.command_bind("wintest", cmd_wintest) irssi.command_bind("closetest", cmd_closetest) irssi.command_bind("postclose", cmd_postclose) irssi.command_bind("opentest", cmd_opentest)
chans[chan] += 1 sorted = [] for k, v in chans.items(): sorted.append([k, v]) sorted.sort(chancmp, reverse=True) if nick[-1] == 's': s = "'" else: s = "'s" dstr = "%s%s day: %s" % (s, datestr, " ".join(["%s [%sm]" % (i, j) for i, j in sorted])) if witem: witem.command("/me %s" % dstr) else: print "* %s %s" % (nick, dstr) def timer(): win = irssi.active_win() if win.active and win.active_server: sock = open(statfile, "a") sock.write("%s%s %s\n" % (int(time.time()), win.active_server.tag, win.active.name)) sock.close() irssi.timeout_add(1000*60, timer) timer() irssi.command_bind('chanstat', cmd_chanstat)
add_mute_rule(commands[2]) def add_mute_rule(rule): with open(settings, 'a+') as f: f.write(rule + '\n') mutes = get_mute_rules() def get_mute_rules(): if os.path.exists(settings): with open(settings, 'r+') as f: return f.read().splitlines() return [] def is_valid_msg(msg): import re for mute in mutes: if re.search(r'%s' % (mute), msg, re.IGNORECASE): return False return True mutes = get_mute_rules() irssi.command_bind('aggregate', command_agregate) irssi.signal_add('print text', print_to_aggregate)
self.row.append(text) def cmd_cia(data, server, witem): """data - contains the parameters for /dict server - the active server in window witem - the active window item (eg. channel, query) or None if the window is empty""" timeoutsocket.setDefaultSocketTimeout(20) try: sock = urllib.urlopen("http://cia.vc/stats/author/Miklos%20Vajna%20%3Cvmiklos%40frugalware.org%3E") data = sock.read() sock.close() except timeoutsocket.Timeout, s: print s return except IOError, s: print s return parser = HTMLParser() parser.reset() parser.feed(data) parser.close() for i in parser.rows: if "so far today" in i: print i irssi.command_bind('cia', cmd_cia)
# type /pyload hello import irssi # data - contains the parameters for /HELLO # server - the active server in window # witem - the active window item (eg. channel, query) # or None if the window is empty def cmd_hello(data, server, witem): if not server or not server.connected: irssi.prnt("Not connected to server") if data: server.command("MSG %s Hello!" % data) elif isinstance(witem, irssi.Channel) or isinstance(witem, irssi.Query): witem.command("MSG %s Hello!" % witem.name) else: irssi.prnt("Nick not given, and no active channel/query in window") irssi.command_bind('hello', cmd_hello)
print >> output, rowSeparator for physicalRows in logicalRows: for row in physicalRows: print >> output, prefix + delim.join( [justify(str(item), width) for (item, width) in zip(row, maxWidths)] ) + postfix if separateRows or hasHeader: print >> output, rowSeparator hasHeader = False return output.getvalue() def cmd_sinfo(data, server, witem): labels = ("Server", "Port", "Network", "Settings", "Status", "Nick") online = [] servers = [] for i in irssi.servers(): if i.connect.use_ssl: ssl = "ssl" else: ssl = "" servers.append([i.connect.address, str(i.connect.port), i.tag, ssl, "connected", i.nick]) online.append(i.tag) for i in irssi.chatnets(): if i.name not in online: servers.append(["", "", i.name, "", "disconnected", ""]) print indent([labels] + servers).strip() irssi.command_bind("sinfo", cmd_sinfo)
import irssi, urllib from xml.dom import minidom """interface to last.fm type /py load lastfm to use it""" __author__ = "Miklos Vajna <*****@*****.**>" __version__ = "0.1" __date__ = "Thu, 21 Jun 2007 04:42:58 +0200" __copyright__ = "Copyright (c) 2007 Miklos Vajna" __license__ = "GPL" def rec(match): return(chr(string.atoi(match.group()[2:-1]))) def cmd_lastfm(data, server, witem): """data - contains the parameters for /dict server - the active server in window witem - the active window item (eg. channel, query) or None if the window is empty""" sock = urllib.urlopen("http://ws.audioscrobbler.com/1.0/user/EDITME/recenttracks.xml") xmldoc = minidom.parseString(sock.read()) artist = xmldoc.getElementsByTagName('artist')[0].firstChild.toxml().encode("latin2") name = xmldoc.getElementsByTagName('name')[0].firstChild.toxml().encode("latin2") witem.command("/action %s is now playing %s - %s" % (witem.name, artist, name)) irssi.command_bind('lastfm', cmd_lastfm)
print 'printing to channel' server.send_message('#booh', 'test msg chan', 0) server.send_message('#booh', 'test msg chan ER', 1) print 'printing to nick' server.send_message('melbo', 'test msg nick', 1) server.send_message('melbo', 'test msg nick ER', 0) """ witem.prnt('hello there') global __last_witem __last_witem = witem global __last_server __last_server = server #new = irssi.IrssiChatBase() #print 'New', new.type_id def cmd_crashme(data, server, witem): __last_server.prnt('#booh', 'what up??') __last_witem.prnt('imma crash mebbe?') print dir(_script) print _script.module print _script.argv irssi.command_bind('pydumper', cmd_pydumper) irssi.command_bind('crashme', cmd_crashme)
stdout, stderr = proc.stdout.read(), proc.stderr.read() if os.WEXITSTATUS(status): irssi.prnt(stderr.rstrip()) elif irssi.settings_get_bool('lastfm_use_action'): witem.command('me %s' % stdout.rstrip()) else: witem.command('say %s' % stdout.rstrip()) username = data or irssi.settings_get_str('lastfm_user') irssi_encoding = irssi.settings_get_str('term_charset') lastfm_strftime = irssi.settings_get_str('lastfm_strftime') lastfm_output = irssi.settings_get_str('lastfm_output') proc = subprocess.Popen([ sys.executable, __file__, username, irssi_encoding, lastfm_strftime, lastfm_output], stdin=open(os.devnull), stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) glib.child_watch_add(proc.pid, on_result) if __name__ == '__main__': lastfm_lookup() else: import irssi irssi.settings_add_str('lastfm', 'lastfm_user', '') irssi.settings_add_str('lastfm', 'lastfm_output', 'np: %(artist)s-%(name)s') irssi.settings_add_str('lastfm', 'lastfm_output_tab_complete', '') irssi.settings_add_str('lastfm', 'lastfm_strftime', 'scrobbled at: %R %Z') irssi.settings_add_bool('lastfm', 'lastfm_use_action', 0) irssi.settings_add_bool('lastfm', 'lastfm_get_player', 0) irssi.command_bind('np', do_now_playing)
'unchin-snouted', 'weather-bitten' ] # second column... c3 = [ 'apple-john', 'baggage', 'barnacle', 'bladder', 'boar-pig', 'bugbear', 'bum-bailey', 'canker-blossom', 'clack-dish', 'clotpole', 'coxcomb', 'codpiece', 'death-token', 'dewberry', 'flap-dragon', 'flax-wench', 'flirt-gill', 'foot-licker', 'fustilarian', 'giglet', 'gudgeon', 'haggard', 'harpy', 'hedge-pig', 'horn-beast', 'hugger-mugger', 'joithead', 'lewdster', 'lout', 'maggot-pie', 'malt-worm', 'mammet', 'measle', 'minnow', 'miscreant', 'moldwarp', 'mumble-news', 'nut-hook', 'pidgeon-egg', 'pignut', 'puttock', 'pumpion', 'ratsbane', 'scut', 'skainsmate', 'strumpet', 'varlot', 'vassal', 'whey-face', 'wagtail' ] # third column def cmd_insult(data, server, witem): if not server or not server.connected: irssi.prnt("Not connected to server") insult = "thou %s %s %s!" % (random.choice(c1), random.choice(c2), random.choice(c3)) if data: server.command("MSG %s %s %s" % (witem.name, data, insult)) elif isinstance(witem, irssi.Channel) or isinstance(witem, irssi.Query): witem.command("MSG %s %s" % (witem.name, insult)) else: irssi.prnt("Nick not given, and no active channel/query in window") irssi.command_bind('shakespeare', cmd_insult)
global child_pid rs, ws = os.pipe() re, we = os.pipe() pid = os.fork() if pid > 0: #parent child_pid = pid irssi.pidwait_add(pid) print 'forked off', pid irssi.signal_add('pidwait', sig_pidwait) #redirect child output irssi.io_add_watch(rs, read_child, sys.stdout) irssi.io_add_watch(re, read_child, sys.stderr) else: #child sys.stdout = os.fdopen(ws, 'w', 0) sys.stderr = os.fdopen(we, 'w', 0) childfunc() sys.stdout.close() sys.stderr.close() os._exit(5) irssi.command_bind('forkoff', cmd_forkoff)
import irssi, socket """hex2ip converter type /py load hex2ip to load it usage: /hex2ip aabbccdd""" __author__ = "Miklos Vajna <*****@*****.**>" __version__ = "0.1" __date__ = "Thu, 21 Jun 2007 14:00:00 +0200" __copyright__ = "Copyright (c) 2007 Miklos Vajna" __license__ = "GPL" def hex2ip(s): return ".".join(["%d"%int(n, 16) for n in (s[0:2],s[2:4],s[4:6],s[6:8])]) def cmd_hex2ip(data, server, witem): """data - contains the parameters for /dict server - the active server in window witem - the active window item (eg. channel, query) or None if the window is empty""" argv = data.split(' ') try: host = socket.gethostbyaddr(hex2ip(argv[0])) except socket.error, str: print str[1] return print host[0] irssi.command_bind('hex2ip', cmd_hex2ip)
def cmd_forkoff(data, server, witem): global child_pid rs, ws = os.pipe() re, we = os.pipe() pid = os.fork() if pid > 0: #parent child_pid = pid irssi.pidwait_add(pid) print 'forked off',pid irssi.signal_add('pidwait', sig_pidwait) #redirect child output irssi.io_add_watch(rs, read_child, sys.stdout) irssi.io_add_watch(re, read_child, sys.stderr) else: #child sys.stdout = os.fdopen(ws, 'w', 0) sys.stderr = os.fdopen(we, 'w', 0) childfunc() sys.stdout.close() sys.stderr.close() os._exit(5) irssi.command_bind('forkoff', cmd_forkoff)