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)
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)
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)
import irssi log = open('/tmp/irssilog', 'a') def irssi_print(dest, text, stripped): log.write(`dest.window, dest.server, dest.target, dest.level, text, stripped` + '\n') irssi.signal_add('print text', irssi_print)
# -*- coding: iso-8859-2 -*- # enforces a ban on a given channel if the unbanner matches regex import irssi, re def mode(server, channel, who, host): if channel.split(' ')[0] == "#owl" and re.match(r"^\[.*\]$", who.split(' ')[0]) and re.match(r"-b", channel.split(' ')[1]): server.command("MODE %s +b %s" % (channel.split(' ')[0], channel.split(' ')[2])) irssi.signal_add("event mode", mode)
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)
might_beep = True def beep_overflow_timeout(): global might_beep might_beep = True return False def sig_beep(): global might_beep beep_cmd = irssi.settings_get_str('beep_cmd') if not beep_cmd: return beep_flood = irssi.settings_get_int('beep_flood') if beep_flood <= 0: beep_flood = 1000 if might_beep: os.system(beep_cmd) might_beep = False irssi.timeout_add(beep_flood, beep_overflow_timeout) irssi.signal_stop() irssi.settings_add_str("lookandfeel", "beep_cmd", "play ~/.irssi/scripts/beep_beep.wav 2>&1 > /dev/null &") irssi.settings_add_int("lookandfeel", "beep_flood", 250) irssi.signal_add("beep", sig_beep)
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)
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 os from os import path import shutil def sig_dcc_closed(dcc): if not isinstance(dcc, irssi.DccGet) or not path.isfile(dcc.file): return dir = path.dirname(dcc.file) dir = path.join(dir, 'done') file = path.basename(dcc.file) if dcc.transfd < dcc.size: remain = 0 if dcc.size: remain = 100 - dcc.transfd / dcc.size * 100 print '%%gDCC aborted %%_%s%%_, %%R%d%%%%%%g remaining%%n' % \ (file, remain) return if not path.isdir(dir): os.mkdir(dir, 0755) shutil.move(dcc.file, dir) print '%%gDCC moved %%_%s%%_ to %%_%s%%_%%n' % (file, dir) irssi.signal_add('dcc closed', sig_dcc_closed)
import irssi import logging import graypy import re log = logging.getLogger() log.setLevel(logging.DEBUG) handler = graypy.GELFHandler('localhost', 12201, debugging_fields=False) #handler.setFormatter(logging.Formatter('%(asctime)s %(message)s')) log.addHandler(handler) def stripColors(msg): pattern = re.compile("\x1f|\x02|\x12|\x0f|\x16|\x03(?:\d{1,2}(?:,\d{1,2})?)?", re.UNICODE) return re.sub(pattern,'',msg) def testlog(server, data, nick, mask, target): log.info("%s %s %s %s %s" % (server.tag, target, nick, mask, stripColors(data))) irssi.signal_add('message public',testlog)
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)
choice = re.sub("(babe)l(bot)", lambda x: x.group(1) + x.group(2), choice, flags=re.I) bot.say("{} selects: {}".format(trigger.nick, choice)) @willie.module.commands("draw") def williedraw(bot, trigger): try: args = trigger.group(2).split() except: return n = None try: if args[0] == 'card': n = 1 elif args[0].isnumeric() and args[1] in ['card', 'cards']: n = int(args[0]) except: return if n: try: bot.say("{} drew: {}".format(trigger.nick, ', '.join(draw_cards(n)))) except ValueError: bot.say("Yes, you're very clever.") if irssi: irssi.signal_add("message public", message) irssi.signal_add("message private", query) irssi.signal_add("ctcp action", action) else: if __name__=="__main__": main()
@willie.module.commands("draw") def williedraw(bot, trigger): try: args = trigger.group(2).split() except: return n = None try: if args[0] == 'card': n = 1 elif args[0].isnumeric() and args[1] in ['card', 'cards']: n = int(args[0]) except: return if n: try: bot.say("{} drew: {}".format(trigger.nick, ', '.join(draw_cards(n)))) except ValueError: bot.say("Yes, you're very clever.") if irssi: irssi.signal_add("message public", message) irssi.signal_add("message private", query) irssi.signal_add("ctcp action", action) else: if __name__ == "__main__": main()
# -*- coding: utf-8 -*- import irssi log = open('/tmp/irssilog', 'a') def irssi_privmsg(server, msg, nick, address): if not msg.endswith(' \t \t\t\t\t \t \t \t \t \t \t \t\t \t '): return witem = server.window_find_item(nick) witem.command('say ?OTR?') irssi.signal_add('message private', irssi_privmsg)