diff --git a/plugins/factoids.py b/plugins/factoids.py index 9121a3a..c51915e 100755 --- a/plugins/factoids.py +++ b/plugins/factoids.py @@ -1,7 +1,7 @@ # Written by Scaevolus 2010 from util import hook, http from util.text import multiword_replace -from util.eval import execute_eval +from util.execute import eval_py import string import sqlite3 import re @@ -136,9 +136,9 @@ def factoid(inp, say=None, db=None, bot=None, me=None, conn=None, input=None): # if the factoid starts with , its a dynamic one if data.startswith(""): data = data[4:].strip() - variables = "input='%s'; nick='%s'; chan='%s'; bot_nick='%s';" % (args, + variables = "input='%s'; nick='%s'; chan='%s'; bot_nick='%s';" % (arguments, input.nick, input.chan, input.conn.nick) - result = execute_eval(variables + data) + result = eval_py(variables + data) else: result = data diff --git a/plugins/pyexec.py b/plugins/pyexec.py index dc77864..41c8016 100755 --- a/plugins/pyexec.py +++ b/plugins/pyexec.py @@ -1,23 +1,10 @@ import re from util import hook, http - - -re_lineends = re.compile(r'[\r\n]*') - +from util.execute import eval_py @hook.command def python(inp): "python -- Executes as Python code." - inp = inp.replace("~n", "\n") - - res = http.get("http://eval.appspot.com/eval", statement=inp).splitlines() - - if len(res) == 0: - return - res[0] = re_lineends.split(res[0])[0] - if not res[0] == 'Traceback (most recent call last):': - return res[0].decode('utf8', 'ignore') - else: - return res[-1].decode('utf8', 'ignore') + return eval_py(inp) diff --git a/plugins/util/execute.py b/plugins/util/execute.py new file mode 100644 index 0000000..8a9e908 --- /dev/null +++ b/plugins/util/execute.py @@ -0,0 +1,28 @@ +import http +import json, urllib2, sys + + +def haste(data): + URL = "http://paste.dmptr.com" + request = urllib2.Request(URL + "/documents", data) + response = urllib2.urlopen(request) + return("%s/%s" % (URL, json.loads(response.read())['key'])) + + +def eval_py(code, paste_multiline=True): + while True: + output = http.get("http://eval.appspot.com/eval", statement=code).rstrip('\n') + if output: + break + else: + pass + + if "Traceback (most recent call last):" in output: + status = "Python error: " + else: + status = "Code executed sucessfully: " + + if "\n" in output and paste_multiline: + return status + haste(output) + else: + return output \ No newline at end of file