From 4d7c94f6dafce704a3c60c800a537be2d7a4e63b Mon Sep 17 00:00:00 2001 From: Luke Rogers Date: Sun, 13 May 2012 17:11:59 +1200 Subject: [PATCH] Added support for dynamic python factoids :D --- plugins/factoids.py | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/plugins/factoids.py b/plugins/factoids.py index 68f3635..711369b 100755 --- a/plugins/factoids.py +++ b/plugins/factoids.py @@ -1,8 +1,9 @@ # Written by Scaevolus 2010 -from util import hook +from util import hook, http import string import re +re_lineends = re.compile(r'[\r\n]*') # some simple "shortcodes" for formatting purposes shortcodes = { @@ -119,18 +120,35 @@ def factoid(inp, say=None, db=None, bot=None, me=None, conn=None, input=None): data = get_memory(db, inp.group(1).strip()) if data: - out = multiwordReplace(data, shortcodes) # dynamic variables for factoids - out = out.replace("$nick", input.nick) - out = out.replace("$chan", input.chan) - out = out.replace("$botnick", conn.nick) + data = data.replace("$nick", input.nick) + data = data.replace("$chan", input.chan) + data = data.replace("$botnick", conn.nick) + + # if , execute python code + if data.startswith(""): + data = data[4:].strip() + res = http.get("http://eval.appspot.com/eval", statement=data).splitlines() + if len(res) == 0: + return + res[0] = re_lineends.split(res[0])[0] + if not res[0] == 'Traceback (most recent call last):': + result = res[0].decode('utf8', 'ignore') + else: + result = res[-1].decode('utf8', 'ignore') + else: + result = data + + # process formatting "shortcodes" + result = multiwordReplace(result, shortcodes) - if out.startswith(""): - out = out[5:].strip() - me(out) + # return final dataput + if result.startswith(""): + result = result[5:].strip() + me(result) else: if prefix_on: - say("\x02[%s]:\x02 %s" % (inp.group(1).strip(), out)) + say("\x02[%s]:\x02 %s" % (inp.group(1).strip(), result)) else: - say(out) + say(result)