From 3ca518888e9e72f80984dccb8afb1bde31a547dd Mon Sep 17 00:00:00 2001 From: lassulus Date: Wed, 22 Jan 2014 03:02:55 +0100 Subject: news/ircasy: handle kick correctly --- Reaktor/IRC/ircasy.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 7821305f..e32179bb 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -107,6 +107,9 @@ class asybot(asychat): elif command == 'INVITE': self.on_invite(prefix, command, params, rest) + elif command == 'KICK': + self.on_kick(prefix, command, params, rest) + elif command == '433': # ERR_NICKNAMEINUSE, retry with another name _, nickname, int, _ = split('^.*[^0-9]([0-9]+)$', self.nickname) \ @@ -158,11 +161,15 @@ class asybot(asychat): def ME(self, target, text): self.PRIVMSG(target, ('ACTION ' + text + '')) - def on_privmsg(self, prefix, command, params, rest): - pass - def on_welcome(self, prefix, command, params, rest): self.push('JOIN %s' % ','.join(self.channels)) + def on_kick(self, prefix, command, params, rest): + for chan in params: + self.channels.remove(chan) + + def on_privmsg(self, prefix, command, params, rest): + pass + def on_invite(self, prefix, command, params, rest): pass -- cgit v1.2.3 From 37d5c80ab68f28b453aaf38fce8aa944e010d360 Mon Sep 17 00:00:00 2001 From: lassulus Date: Wed, 22 Jan 2014 03:14:55 +0100 Subject: ircasy: fix on_kick --- Reaktor/IRC/ircasy.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index e32179bb..150498dd 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -165,8 +165,10 @@ class asybot(asychat): self.push('JOIN %s' % ','.join(self.channels)) def on_kick(self, prefix, command, params, rest): - for chan in params: - self.channels.remove(chan) + self.log.debug(params) + if params[-1] == self.nickname: + for chan in params[:-1]: + self.channels.remove(chan) def on_privmsg(self, prefix, command, params, rest): pass -- cgit v1.2.3 From f81f2f75d7fd19680a21b7d4d2b54d1e16559ab8 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 22 Feb 2014 17:08:27 +0100 Subject: reaktor: ircasy abstraction --- Reaktor/IRC/ircasy.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 150498dd..fd261ae9 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -112,11 +112,7 @@ class asybot(asychat): elif command == '433': # ERR_NICKNAMEINUSE, retry with another name - _, nickname, int, _ = split('^.*[^0-9]([0-9]+)$', self.nickname) \ - if search('[0-9]$', self.nickname) \ - else ['', self.nickname, 0, ''] - self.nickname = nickname + str(int + 1) - self.handle_connect() + self.on_nickinuse(prefix, command, params, rest) elif command == '376': self.on_welcome(prefix, command, params, rest) @@ -175,3 +171,10 @@ class asybot(asychat): def on_invite(self, prefix, command, params, rest): pass + + def on_nickinuse(self, prefix, command, params, rest): + _, nickname, int, _ = split('^.*[^0-9]([0-9]+)$', self.nickname) \ + if search('[0-9]$', self.nickname) \ + else ['', self.nickname, 0, ''] + self.nickname = nickname + str(int + 1) + self.handle_connect() -- cgit v1.2.3 From b657927cf0b6420683c261ff32434b2b8b2cdf70 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 15 Mar 2014 01:03:52 +0100 Subject: ircasy: more debug in text decoding --- Reaktor/IRC/ircasy.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index fd261ae9..ac071013 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -85,7 +85,10 @@ class asybot(asychat): alarm(self.hammer_interval) def collect_incoming_data(self, data): - self.data += data.decode() + try: + self.data += data.decode() + except Exception as e: + print('error decoding message: ' + str(e)); def found_terminator(self): self.log.debug('<< %s' % self.data) -- cgit v1.2.3 From a9633ea16310f99c7a39dcd8c4a1c7bb05326135 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 15 Mar 2014 01:04:16 +0100 Subject: ircasy: new nickinuse function --- Reaktor/IRC/ircasy.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index ac071013..4dfff390 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -176,8 +176,9 @@ class asybot(asychat): pass def on_nickinuse(self, prefix, command, params, rest): - _, nickname, int, _ = split('^.*[^0-9]([0-9]+)$', self.nickname) \ - if search('[0-9]$', self.nickname) \ - else ['', self.nickname, 0, ''] - self.nickname = nickname + str(int + 1) - self.handle_connect() + regex = re.search('(\d+)$', self.nickname) + if regex: + theint = int(regex.group(0)) + self.nickname = self.nickname.strip(theint) + str(theint + 1) + else self.nickname = self.nickname + '0' + self.handle_connect() -- cgit v1.2.3 From 94751bf732ad1268e6885db8bd03b054a81f9a20 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 15 Mar 2014 01:17:29 +0100 Subject: ircasy: fix nickinuse --- Reaktor/IRC/ircasy.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 4dfff390..5a07e8fc 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -178,7 +178,8 @@ class asybot(asychat): def on_nickinuse(self, prefix, command, params, rest): regex = re.search('(\d+)$', self.nickname) if regex: - theint = int(regex.group(0)) - self.nickname = self.nickname.strip(theint) + str(theint + 1) - else self.nickname = self.nickname + '0' + theint = int(regex.group(0)) + self.nickname = self.nickname.strip(theint) + str(theint + 1) + else: + self.nickname = self.nickname + '0' self.handle_connect() -- cgit v1.2.3 From aed82c8e85ae193a575282123ebb808899c696f1 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 15 Mar 2014 01:18:42 +0100 Subject: ircasy: more fix(drunk) --- Reaktor/IRC/ircasy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 5a07e8fc..c62beee4 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -176,7 +176,7 @@ class asybot(asychat): pass def on_nickinuse(self, prefix, command, params, rest): - regex = re.search('(\d+)$', self.nickname) + regex = search('(\d+)$', self.nickname) if regex: theint = int(regex.group(0)) self.nickname = self.nickname.strip(theint) + str(theint + 1) -- cgit v1.2.3 From 6c1d0f30624905e2d53d2f7a09f935b91b5a2dc1 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 15 Mar 2014 01:19:42 +0100 Subject: ircasy: debugging through git is fine --- Reaktor/IRC/ircasy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index c62beee4..57ec9189 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -179,7 +179,7 @@ class asybot(asychat): regex = search('(\d+)$', self.nickname) if regex: theint = int(regex.group(0)) - self.nickname = self.nickname.strip(theint) + str(theint + 1) + self.nickname = self.nickname.strip(str(theint)) + str(theint + 1) else: self.nickname = self.nickname + '0' self.handle_connect() -- cgit v1.2.3 From dac1785de2a5f1217f6e47b765553ad3f277d0cc Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 19 Mar 2014 19:35:54 +0100 Subject: add shebang to reaktor.py --- Reaktor/IRC/reaktor.py | 1 + 1 file changed, 1 insertion(+) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 990d47e5..4fb8f75c 100644 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python import os from ircasy import asybot from asyncore import loop -- cgit v1.2.3 From d041405044765ff8da8932d613c8ac3be37dd765 Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 19 Mar 2014 20:51:52 +0100 Subject: fix reaktor systemd startup --- Reaktor/IRC/reaktor.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 Reaktor/IRC/reaktor.py (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py old mode 100644 new mode 100755 -- cgit v1.2.3 From 2d1b9414edc8aa57adbe9ac547292921936d874a Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 25 Mar 2014 09:46:43 +0100 Subject: add eloop to IRc/reaktor --- Reaktor/IRC/reaktor.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 4fb8f75c..3fcedf60 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -18,6 +18,7 @@ hdlr.setFormatter(formatter) log.addHandler(hdlr) logging.basicConfig(level = logging.DEBUG if getconf('debug') else logging.INFO) +restart_timeout = getconf('irc_restart_timeout') or 5 class Reaktor(asybot): def __init__(self): @@ -68,5 +69,14 @@ class Reaktor(asybot): self.ME(target, 'mimimi') if __name__ == "__main__": - Reaktor() - loop() + while True: + try: + Reaktor() + loop() + except Exception as e: + from time import sleep + log.error("Something went wrong when running Reaktor, \ + waiting for %d seconds" % restart_timeout) + log.debug("Exception: %s" % str(e)) + sleep(restart_timeout) + -- cgit v1.2.3 From 5d778bfb0fadd073e1e5ff324f00a2ea460ba843 Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 25 Mar 2014 14:46:14 +0100 Subject: Reaktor: answer to user on /query --- Reaktor/IRC/reaktor.py | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 3fcedf60..7ef8d70d 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -44,6 +44,11 @@ class Reaktor(asybot): env = {} env['_from'] = prefix.split('!', 1)[0] + log.debug('self:' +self.nickname) + if self.nickname in target: + target.remove(self.nickname) + target.append(env['_from']) + log.debug('target:' +str(target)) env['config_filename'] = os.path.abspath(config_filename) start = time() try: -- cgit v1.2.3 From c5accb6ea72ac9612dddf37541661fa544d5b872 Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 25 Mar 2014 15:35:52 +0100 Subject: add authentication to Reaktor using /query identify configuration contains commands and public_commands --- Reaktor/IRC/reaktor.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 7ef8d70d..e73a3d79 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -20,6 +20,16 @@ logging.basicConfig(level = logging.DEBUG if getconf('debug') else logging.INFO) restart_timeout = getconf('irc_restart_timeout') or 5 +def is_admin(prefix): + try: + with open(getconf('auth_file')) as f: + for line in f: + if line.strip() == prefix: + return True + except Exception as e: + log.info(e) + return False + class Reaktor(asybot): def __init__(self): asybot.__init__(self, getconf('irc_server'), getconf('irc_port'), getconf('irc_nickname'), getconf('irc_channels'), hammer_interval=getconf('irc_hammer_interval'), alarm_timeout=getconf('irc_alarm_timeout'), kill_timeout=getconf('irc_kill_timeout')) @@ -28,8 +38,16 @@ class Reaktor(asybot): for command in getconf('commands'): y = match(command['pattern'], rest) if y: - self.execute_command(command, y, prefix, params) - break + if not is_admin(prefix): + self.PRIVMSG(params,'unauthorized!') + else: + return self.execute_command(command, y, prefix, params) + + for command in getconf('public_commands'): + y = match(command['pattern'], rest) + if y: + return self.execute_command(command, y, prefix, params) + def execute_command(self, command, match, prefix, target): from os.path import realpath, dirname, join @@ -43,12 +61,16 @@ class Reaktor(asybot): myargv += shlex.split(match.groupdict()['args']) env = {} + env['_prefix'] = prefix env['_from'] = prefix.split('!', 1)[0] + log.debug('self:' +self.nickname) + # when receiving /query, answer to the user, not to self if self.nickname in target: target.remove(self.nickname) target.append(env['_from']) log.debug('target:' +str(target)) + env['config_filename'] = os.path.abspath(config_filename) start = time() try: @@ -84,4 +106,3 @@ if __name__ == "__main__": waiting for %d seconds" % restart_timeout) log.debug("Exception: %s" % str(e)) sleep(restart_timeout) - -- cgit v1.2.3 From 91ccf3c53b4186c2e30495047a3cd7a2113843db Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 25 Mar 2014 21:08:20 +0100 Subject: ircasy: fix retry, because you always want retry --- Reaktor/IRC/ircasy.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 57ec9189..068cd467 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -22,10 +22,10 @@ class asybot(asychat): asychat.__init__(self) #logger magic self.log = logging.getLogger('asybot_' + nickname) - hdlr = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON) - formatter = logging.Formatter( '%(filename)s: %(levelname)s: %(message)s') - hdlr.setFormatter(formatter) - self.log.addHandler(hdlr) + #hdlr = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON) + #formatter = logging.Formatter( '%(filename)s: %(levelname)s: %(message)s') + #hdlr.setFormatter(formatter) + #self.log.addHandler(hdlr) logging.basicConfig(level = loglevel) self.nickname = nickname @@ -45,7 +45,7 @@ class asybot(asychat): else: self.hostname = nickname - self.retry = False + self.retry = True self.server = server self.port = port self.channels = channels -- cgit v1.2.3 From b49c3b339c34984b5408b18ba558e6a91fddf243 Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 25 Mar 2014 23:08:35 +0100 Subject: Reaktor: remove e-loop --- Reaktor/IRC/reaktor.py | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index e73a3d79..830e6a93 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -12,10 +12,10 @@ getconf = make_getconf(config_filename) import logging,logging.handlers log = logging.getLogger('asybot') -hdlr = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON) -formatter = logging.Formatter( '%(filename)s: %(levelname)s: %(message)s') -hdlr.setFormatter(formatter) -log.addHandler(hdlr) +#hdlr = logging.handlers.SysLogHandler(address='/dev/log', facility=logging.handlers.SysLogHandler.LOG_DAEMON) +#formatter = logging.Formatter( '%(filename)s: %(levelname)s: %(message)s') +#hdlr.setFormatter(formatter) +#log.addHandler(hdlr) logging.basicConfig(level = logging.DEBUG if getconf('debug') else logging.INFO) restart_timeout = getconf('irc_restart_timeout') or 5 @@ -96,13 +96,5 @@ class Reaktor(asybot): self.ME(target, 'mimimi') if __name__ == "__main__": - while True: - try: - Reaktor() - loop() - except Exception as e: - from time import sleep - log.error("Something went wrong when running Reaktor, \ - waiting for %d seconds" % restart_timeout) - log.debug("Exception: %s" % str(e)) - sleep(restart_timeout) + Reaktor() + loop() -- cgit v1.2.3 From b9d60ee1a0eedc17c2dc16c73f8ed0f6809de5a0 Mon Sep 17 00:00:00 2001 From: juhulian Date: Wed, 9 Apr 2014 10:30:03 +0200 Subject: add on_join --- Reaktor/IRC/ircasy.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 068cd467..b40913ce 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -113,6 +113,9 @@ class asybot(asychat): elif command == 'KICK': self.on_kick(prefix, command, params, rest) + elif command == 'JOIN': + self.on_join(prefix, command, params, rest)) + elif command == '433': # ERR_NICKNAMEINUSE, retry with another name self.on_nickinuse(prefix, command, params, rest) @@ -169,6 +172,9 @@ class asybot(asychat): for chan in params[:-1]: self.channels.remove(chan) + def on_join(self, prefix, command, params, rest): + pass + def on_privmsg(self, prefix, command, params, rest): pass -- cgit v1.2.3 From a2de1edca2b3bdfb437c295a446817ef3a42a123 Mon Sep 17 00:00:00 2001 From: juhulian Date: Wed, 9 Apr 2014 10:37:59 +0200 Subject: fix bracket by on_join --- Reaktor/IRC/ircasy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index b40913ce..9a7f44f3 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -114,7 +114,7 @@ class asybot(asychat): self.on_kick(prefix, command, params, rest) elif command == 'JOIN': - self.on_join(prefix, command, params, rest)) + self.on_join(prefix, command, params, rest) elif command == '433': # ERR_NICKNAMEINUSE, retry with another name -- cgit v1.2.3 From 01d8f1f70a889519fd181f889e070450b8e62c97 Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 20 Apr 2014 12:13:33 +0200 Subject: reaktor.py: set cwd --- Reaktor/IRC/reaktor.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 830e6a93..b8200398 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -60,6 +60,8 @@ class Reaktor(asybot): if match.groupdict().get('args',None): myargv += shlex.split(match.groupdict()['args']) + cwd = getconf('workdir') + env = {} env['_prefix'] = prefix env['_from'] = prefix.split('!', 1)[0] @@ -74,7 +76,7 @@ class Reaktor(asybot): env['config_filename'] = os.path.abspath(config_filename) start = time() try: - p = popen(myargv, bufsize=1, stdout=PIPE, stderr=PIPE, env=env) + p = popen(myargv, bufsize=1, stdout=PIPE, stderr=PIPE, env=env, cwd=cwd) except (OSError, Exception) as error: self.ME(target, 'brain damaged') log.error('OSError@%s: %s' % (myargv, error)) -- cgit v1.2.3 From 2fe69bee8a4207cb83e3e6ce3de74069a6e5f3b1 Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 20 Apr 2014 12:24:45 +0200 Subject: reaktor.py: allow per-command environment --- Reaktor/IRC/reaktor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index b8200398..0b285a3f 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -62,7 +62,7 @@ class Reaktor(asybot): cwd = getconf('workdir') - env = {} + env = command.get('env', {}) env['_prefix'] = prefix env['_from'] = prefix.split('!', 1)[0] -- cgit v1.2.3 From 231c6e68078ea86f48d91ed065794fce52c25ac6 Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 20 Apr 2014 12:30:17 +0200 Subject: reaktor.py: add on_join hook: tell NICK MSG... --- Reaktor/IRC/reaktor.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 0b285a3f..5e5156ad 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -34,6 +34,10 @@ class Reaktor(asybot): def __init__(self): asybot.__init__(self, getconf('irc_server'), getconf('irc_port'), getconf('irc_nickname'), getconf('irc_channels'), hammer_interval=getconf('irc_hammer_interval'), alarm_timeout=getconf('irc_alarm_timeout'), kill_timeout=getconf('irc_kill_timeout')) + def on_join(self, prefix, command, params, rest): + for command in getconf('on_join'): + self.execute_command(command, None, prefix, params) + def on_privmsg(self, prefix, command, params, rest): for command in getconf('commands'): y = match(command['pattern'], rest) @@ -57,7 +61,8 @@ class Reaktor(asybot): #TODO: allow only commands below ./commands/ exe = join(dirname(realpath(dirname(__file__))), command['argv'][0]) myargv = [exe] + command['argv'][1:] - if match.groupdict().get('args',None): + + if match and match.groupdict().get('args', None): myargv += shlex.split(match.groupdict()['args']) cwd = getconf('workdir') -- cgit v1.2.3 From 9bdee602a30f715c9ba2583d3948c360448c670b Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 25 Apr 2014 12:02:03 +0200 Subject: make config file a parameter --- Reaktor/IRC/ircasy.py | 5 ++++- Reaktor/IRC/reaktor.py | 47 +++++++++++++++++++++++++++-------------------- 2 files changed, 31 insertions(+), 21 deletions(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 9a7f44f3..259ea98c 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -114,7 +114,10 @@ class asybot(asychat): self.on_kick(prefix, command, params, rest) elif command == 'JOIN': - self.on_join(prefix, command, params, rest) + try: + self.on_join(prefix, command, params, rest) + except: + pass elif command == '433': # ERR_NICKNAMEINUSE, retry with another name diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 5e5156ad..b53ef651 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -6,9 +6,9 @@ from translate_colors import translate_colors import shlex from re import split, search, match -config_filename = './config.py' +default_config = './config.py' from getconf import make_getconf -getconf = make_getconf(config_filename) +getconf = None import logging,logging.handlers log = logging.getLogger('asybot') @@ -16,24 +16,25 @@ log = logging.getLogger('asybot') #formatter = logging.Formatter( '%(filename)s: %(levelname)s: %(message)s') #hdlr.setFormatter(formatter) #log.addHandler(hdlr) -logging.basicConfig(level = logging.DEBUG if getconf('debug') else logging.INFO) -restart_timeout = getconf('irc_restart_timeout') or 5 -def is_admin(prefix): - try: - with open(getconf('auth_file')) as f: - for line in f: - if line.strip() == prefix: - return True - except Exception as e: - log.info(e) - return False class Reaktor(asybot): - def __init__(self): + def __init__(self,config=default_config): + self.config = config + log.info("using config file %s"%(config)) asybot.__init__(self, getconf('irc_server'), getconf('irc_port'), getconf('irc_nickname'), getconf('irc_channels'), hammer_interval=getconf('irc_hammer_interval'), alarm_timeout=getconf('irc_alarm_timeout'), kill_timeout=getconf('irc_kill_timeout')) + def is_admin(self,prefix): + try: + with open(getconf('auth_file')) as f: + for line in f: + if line.strip() == prefix: + return True + except Exception as e: + log.info(e) + return False + def on_join(self, prefix, command, params, rest): for command in getconf('on_join'): self.execute_command(command, None, prefix, params) @@ -42,7 +43,7 @@ class Reaktor(asybot): for command in getconf('commands'): y = match(command['pattern'], rest) if y: - if not is_admin(prefix): + if not self.is_admin(prefix): self.PRIVMSG(params,'unauthorized!') else: return self.execute_command(command, y, prefix, params) @@ -61,9 +62,11 @@ class Reaktor(asybot): #TODO: allow only commands below ./commands/ exe = join(dirname(realpath(dirname(__file__))), command['argv'][0]) myargv = [exe] + command['argv'][1:] - - if match and match.groupdict().get('args', None): - myargv += shlex.split(match.groupdict()['args']) + try: + if match and match.groupdict().get('args', None): + myargv += shlex.split(match.groupdict()['args']) + except: + log.info("cannot parse args!") cwd = getconf('workdir') @@ -78,7 +81,7 @@ class Reaktor(asybot): target.append(env['_from']) log.debug('target:' +str(target)) - env['config_filename'] = os.path.abspath(config_filename) + env['config_filename'] = os.path.abspath(self.config) start = time() try: p = popen(myargv, bufsize=1, stdout=PIPE, stderr=PIPE, env=env, cwd=cwd) @@ -103,5 +106,9 @@ class Reaktor(asybot): self.ME(target, 'mimimi') if __name__ == "__main__": - Reaktor() + import sys + conf = sys.argv[1] if len(sys.argv) == 2 else default_config + getconf = make_getconf(conf) + logging.basicConfig(level = logging.DEBUG if getconf('debug') else logging.INFO) + Reaktor(conf) loop() -- cgit v1.2.3 From 5efd6c0b11ce5b0ab3ec5975bfe6125af7eb6ea4 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 25 Apr 2014 12:52:05 +0200 Subject: reaktor getconf: allow default_value --- Reaktor/IRC/getconf.py | 7 +++++-- Reaktor/IRC/ircasy.py | 5 +---- Reaktor/IRC/reaktor.py | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/getconf.py b/Reaktor/IRC/getconf.py index f9cd4404..168c908c 100644 --- a/Reaktor/IRC/getconf.py +++ b/Reaktor/IRC/getconf.py @@ -9,14 +9,17 @@ import os def make_getconf(filename): - def getconf(prop): + def getconf(prop, default_value=None): prop_split = prop.split('.') string = '' config = load_config(filename) #imp.reload(config) tmp = config.__dict__ for pr in prop_split: - tmp = tmp[pr] + if pr in tmp: + tmp = tmp[pr] + else: + return default_value return tmp return getconf diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 259ea98c..9a7f44f3 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -114,10 +114,7 @@ class asybot(asychat): self.on_kick(prefix, command, params, rest) elif command == 'JOIN': - try: - self.on_join(prefix, command, params, rest) - except: - pass + self.on_join(prefix, command, params, rest) elif command == '433': # ERR_NICKNAMEINUSE, retry with another name diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index b53ef651..54091c5d 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -36,7 +36,7 @@ class Reaktor(asybot): return False def on_join(self, prefix, command, params, rest): - for command in getconf('on_join'): + for command in getconf('on_join', []): self.execute_command(command, None, prefix, params) def on_privmsg(self, prefix, command, params, rest): -- cgit v1.2.3 From 7bf0b790b95d97d33e57a4e52cf7681bc6366d98 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 25 Apr 2014 13:34:04 +0200 Subject: reaktor: move config_filename to config --- Reaktor/IRC/reaktor.py | 1 - 1 file changed, 1 deletion(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 54091c5d..bfd08d9f 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -81,7 +81,6 @@ class Reaktor(asybot): target.append(env['_from']) log.debug('target:' +str(target)) - env['config_filename'] = os.path.abspath(self.config) start = time() try: p = popen(myargv, bufsize=1, stdout=PIPE, stderr=PIPE, env=env, cwd=cwd) -- cgit v1.2.3 From 6df0fa8c961dd9884826488986892db3b2574ce8 Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 25 Apr 2014 15:22:51 +0200 Subject: add fallback for non existing directory --- Reaktor/IRC/reaktor.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index bfd08d9f..ec306e7c 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import os from ircasy import asybot from asyncore import loop @@ -69,6 +69,9 @@ class Reaktor(asybot): log.info("cannot parse args!") cwd = getconf('workdir') + if not os.access(cwd,os.W_OK): + log.error("Workdir '%s' is not Writable! Falling back to root dir"%cwd) + cwd = "/" env = command.get('env', {}) env['_prefix'] = prefix -- cgit v1.2.3 From 92fe3350fe6e3da26fa1ad0522aabaa0f146d575 Mon Sep 17 00:00:00 2001 From: makefu Date: Mon, 5 May 2014 09:53:32 +0200 Subject: Merge all the shits --- Reaktor/IRC/reaktor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Reaktor/IRC') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index ec306e7c..f9f25e57 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -86,8 +86,9 @@ class Reaktor(asybot): start = time() try: + print(myargv) p = popen(myargv, bufsize=1, stdout=PIPE, stderr=PIPE, env=env, cwd=cwd) - except (OSError, Exception) as error: + except Exception as error: self.ME(target, 'brain damaged') log.error('OSError@%s: %s' % (myargv, error)) return -- cgit v1.2.3