diff options
Diffstat (limited to 'Reaktor/IRC')
| -rwxr-xr-x | Reaktor/IRC/asybot.py | 50 | ||||
| -rwxr-xr-x | Reaktor/IRC/index | 3 | 
2 files changed, 30 insertions, 23 deletions
| diff --git a/Reaktor/IRC/asybot.py b/Reaktor/IRC/asybot.py index 657cee40..df758ed6 100755 --- a/Reaktor/IRC/asybot.py +++ b/Reaktor/IRC/asybot.py @@ -9,12 +9,14 @@ def is_executable(x):  from asynchat import async_chat as asychat  from asyncore import loop -from socket import AF_INET, SOCK_STREAM +from socket import AF_INET, SOCK_STREAM,gethostname  from signal import SIGALRM, signal, alarm  from datetime import datetime as date, timedelta +import shlex +from time import sleep  from sys import exit  from re import split, search - +from textwrap import TextWrapper  import logging,logging.handlers  log = logging.getLogger('asybot')  hdlr = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON) @@ -37,6 +39,7 @@ class asybot(asychat):      self.set_terminator('\r\n')      self.create_socket(AF_INET, SOCK_STREAM)      self.connect((self.server, self.port)) +    self.wrapper = TextWrapper(subsequent_indent=" ",width=400)      # When we don't receive data for alarm_timeout seconds then issue a      # PING every hammer_interval seconds until kill_timeout seconds have @@ -105,8 +108,10 @@ class asybot(asychat):    def on_privmsg(self, prefix, command, params, rest):      def PRIVMSG(text): -      msg = 'PRIVMSG %s :%s' % (','.join(params), text) -      self.push(msg) +      for line in self.wrapper.wrap(text): +        msg = 'PRIVMSG %s :%s' % (','.join(params), line) +        self.push(msg) +        sleep(1)      def ME(text):        PRIVMSG('ACTION ' + text + '') @@ -125,7 +130,7 @@ class asybot(asychat):        from os.path import realpath, dirname, join        from subprocess import Popen as popen, PIPE - +      from time import time        Reaktor_dir = dirname(realpath(dirname(__file__)))        public_commands = join(Reaktor_dir, 'public_commands')        command = join(public_commands, _command) @@ -133,29 +138,28 @@ class asybot(asychat):        if is_executable(command):          env = {} +        args = [] +        start = time()          if _argument != None:            env['argument'] = _argument - +          args = shlex.split(_argument)          try: -          p = popen([command], stdin=PIPE, stdout=PIPE, stderr=PIPE, env=env) +          p = popen([command] + args,bufsize=1, stdout=PIPE, stderr=PIPE, env=env)          except OSError, error:            ME('brain damaged')            log.error('OSError@%s: %s' % (command, error))            return - -        stdout, stderr = [ x[:len(x)-1] for x in -            [ x.split('\n') for x in p.communicate()]] -        code = p.returncode          pid = p.pid +        for line in iter(p.stdout.readline,""): +          PRIVMSG(line) +          log.debug('%s stdout: %s' % (pid, line))  +        p.wait() +        elapsed = time() - start +        code = p.returncode +        log.info('command: %s -> %s in %d seconds' % (command, code,elapsed)) +        [log.debug('%s stderr: %s' % (pid, x)) for x in p.stderr.readlines()] -        log.info('command: %s -> %s' % (command, code)) -        [log.debug('%s stdout: %s' % (pid, x)) for x in stdout] -        [log.debug('%s stderr: %s' % (pid, x)) for x in stderr] - -        if code == 0: -          [PRIVMSG(x) for x in stdout] -          [PRIVMSG(x) for x in stderr] -        else: +        if code != 0:            ME('mimimi')        else: @@ -181,8 +185,12 @@ if __name__ == "__main__":    lol = logging.DEBUG if env.get('debug',False) else logging.INFO    logging.basicConfig(level=lol) -  name = getconf1('Name', '/etc/tinc/retiolum/tinc.conf') -  hostname = '%s.retiolum' % name +  try:  +    name = getconf1('Name', '/etc/tinc/retiolum/tinc.conf') +    hostname = '%s.retiolum' % name +  except: +    name = gethostname() +    hostname = name    nick = str(env.get('nick', name))    host = str(env.get('host', 'supernode'))    port = int(env.get('port', 6667)) diff --git a/Reaktor/IRC/index b/Reaktor/IRC/index index 24982c76..50022ec9 100755 --- a/Reaktor/IRC/index +++ b/Reaktor/IRC/index @@ -3,5 +3,4 @@ set -xeuf  # cd //Reaktor  cd $(dirname $(readlink -f $0))/.. - -exec python IRC/asybot.py "$@" +host=irc.freenode.net target='#krebsco' python IRC/asybot.py "$@" | 
