From 3741d76a38dc4b412780eb2a4ad79467a01f884b Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 17 Apr 2012 23:30:41 +0200 Subject: add clean arguments to bot --- Reaktor/IRC/asybot.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'Reaktor/IRC/asybot.py') diff --git a/Reaktor/IRC/asybot.py b/Reaktor/IRC/asybot.py index 657cee40..17f9cb3a 100755 --- a/Reaktor/IRC/asybot.py +++ b/Reaktor/IRC/asybot.py @@ -12,6 +12,8 @@ from asyncore import loop from socket import AF_INET, SOCK_STREAM 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 @@ -107,6 +109,7 @@ class asybot(asychat): def PRIVMSG(text): msg = 'PRIVMSG %s :%s' % (','.join(params), text) self.push(msg) + sleep(2) def ME(text): PRIVMSG('ACTION ' + text + '') @@ -133,11 +136,12 @@ class asybot(asychat): if is_executable(command): env = {} + args = [] 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, stdin=PIPE, stdout=PIPE, stderr=PIPE, env=env) except OSError, error: ME('brain damaged') log.error('OSError@%s: %s' % (command, error)) @@ -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 = socket.gethostname() + hostname = name nick = str(env.get('nick', name)) host = str(env.get('host', 'supernode')) port = int(env.get('port', 6667)) -- cgit v1.2.3 From 9b6cf277da29f7d36d7262a8c3dea2f7bab017fc Mon Sep 17 00:00:00 2001 From: EUcancER Date: Wed, 18 Apr 2012 23:11:33 +0200 Subject: live feedback from subprocess, shorter timeout --- Reaktor/IRC/asybot.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) (limited to 'Reaktor/IRC/asybot.py') diff --git a/Reaktor/IRC/asybot.py b/Reaktor/IRC/asybot.py index 17f9cb3a..6edc13ba 100755 --- a/Reaktor/IRC/asybot.py +++ b/Reaktor/IRC/asybot.py @@ -109,7 +109,7 @@ class asybot(asychat): def PRIVMSG(text): msg = 'PRIVMSG %s :%s' % (','.join(params), text) self.push(msg) - sleep(2) + sleep(1) def ME(text): PRIVMSG('ACTION ' + text + '') @@ -128,7 +128,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) @@ -137,29 +137,27 @@ class asybot(asychat): env = {} args = [] + start = time() if _argument != None: env['argument'] = _argument args = shlex.split(_argument) try: - p = popen([command] + args, 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: -- cgit v1.2.3 From 4ea18af3e838f31afb2e5bb794652dde0a4ef127 Mon Sep 17 00:00:00 2001 From: EUcancER Date: Wed, 2 May 2012 14:41:50 +0200 Subject: add line wrapping as it seems to lose characters between 400 and 500 characters... --- Reaktor/IRC/asybot.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'Reaktor/IRC/asybot.py') diff --git a/Reaktor/IRC/asybot.py b/Reaktor/IRC/asybot.py index 6edc13ba..bf0c396f 100755 --- a/Reaktor/IRC/asybot.py +++ b/Reaktor/IRC/asybot.py @@ -16,7 +16,7 @@ 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) @@ -39,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 @@ -107,9 +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) - sleep(1) + 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 + '') -- cgit v1.2.3 From f35944ef891981436f6a5656521872057c9b84f8 Mon Sep 17 00:00:00 2001 From: EUcancER Date: Wed, 2 May 2012 14:47:11 +0200 Subject: Reaktor: fix socket import for hostname --- Reaktor/IRC/asybot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Reaktor/IRC/asybot.py') diff --git a/Reaktor/IRC/asybot.py b/Reaktor/IRC/asybot.py index bf0c396f..df758ed6 100755 --- a/Reaktor/IRC/asybot.py +++ b/Reaktor/IRC/asybot.py @@ -9,7 +9,7 @@ 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 @@ -189,7 +189,7 @@ if __name__ == "__main__": name = getconf1('Name', '/etc/tinc/retiolum/tinc.conf') hostname = '%s.retiolum' % name except: - name = socket.gethostname() + name = gethostname() hostname = name nick = str(env.get('nick', name)) host = str(env.get('host', 'supernode')) -- cgit v1.2.3