diff options
| author | makefu <github@syntax-fehler.de> | 2015-08-28 11:05:44 +0200 | 
|---|---|---|
| committer | makefu <github@syntax-fehler.de> | 2015-08-28 11:05:44 +0200 | 
| commit | f2dd476172dedcc788332cbceb853cc0615ba6ff (patch) | |
| tree | e5644b21e1d87a74b09afb436d779272476f5589 /Reaktor/IRC/reaktor.py | |
| parent | 31dd24af3e6721d1763b85ace640517024de39f2 (diff) | |
Reaktor: IRC -> reaktor
Remove Obsolete README, remove obsolete index
Diffstat (limited to 'Reaktor/IRC/reaktor.py')
| -rwxr-xr-x | Reaktor/IRC/reaktor.py | 125 | 
1 files changed, 0 insertions, 125 deletions
| diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py deleted file mode 100755 index 124fa017..00000000 --- a/Reaktor/IRC/reaktor.py +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/env python3 -import os -from ircasy import asybot -from asyncore import loop -from translate_colors import translate_colors -import shlex -from re import split, search, match - -default_config = './config.py' -from getconf import make_getconf -getconf = None - -import logging,logging.handlers -log = logging.getLogger('asybot') -#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) - - - -class Reaktor(asybot): -  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) - -  def on_ping(self, prefix, command, params, rest): -    for command in getconf('on_ping', []): -      prefix = '!' # => env = { _prefix: '!', _from: '' } -      params = command.get('targets') # TODO why don't we get a list here and use ','.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) -      if y: -        if not self.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 -    from subprocess import Popen as popen, PIPE -    from time import time - -    #TODO: allow only commands below ./commands/ -    exe = join(dirname(realpath(dirname(__file__))), command['argv'][0]) -    myargv = [exe] + command['argv'][1:] -    try: -      if match and match.groupdict().get('args', None): -        myargv += shlex.split(match.groupdict()['args']) -    except: -        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 -    env['_from'] = prefix.split('!', 1)[0] - -    env.update(os.environ) -    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)) - -    start = time() -    try: -      log.debug("Running : %s"%str(myargv)) -      log.debug("Environ : %s"%(str(env))) -      p = popen(myargv, bufsize=1, stdout=PIPE, stderr=PIPE, env=env, cwd=cwd) -    except Exception as error: -      self.ME(target, 'brain damaged') -      log.error('OSError@%s: %s' % (myargv, error)) -      return -    pid = p.pid -    for line in iter(p.stdout.readline, ''.encode()): -      try: -        self.PRIVMSG(target, translate_colors(line.decode())) -      except Exception as error: -        log.error('no send: %s' % error) -      log.debug('%s stdout: %s' % (pid, line)) -    p.wait() -    elapsed = time() - start -    code = p.returncode -    log.info('command: %s -> %s in %d seconds' % (myargv, code, elapsed)) -    [log.debug('%s stderr: %s' % (pid, x)) for x in p.stderr.readlines()] - -    if code != 0: -      self.ME(target, 'mimimi') - -if __name__ == "__main__": -  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() | 
