diff options
author | NEMESIS13cz <seke94@seznam.cz> | 2015-08-10 20:40:03 +0200 |
---|---|---|
committer | NEMESIS13cz <seke94@seznam.cz> | 2015-08-10 20:40:03 +0200 |
commit | 69fe651dc1fca438cf8e69aefb30f7d1aca72fc2 (patch) | |
tree | 985aeb38b6c5989cfbf05a97b9592003637f9670 /calc.py | |
parent | 41d2f3104838f7661da2a4bd42903c7b35e6a733 (diff) |
Changed calc to run on a separate thread
Diffstat (limited to 'calc.py')
-rw-r--r-- | calc.py | 47 |
1 files changed, 13 insertions, 34 deletions
@@ -1,48 +1,27 @@ from helpers import * +import threading -calc_users = open_json_file("calc", []) -math_operators = ["+", "-", "*", "/", "&", "|"] -ignore_operators = ["**", "&&", "||"] # ** may be too intensive, the others cause syntax errors +calc_users = open_json_file("calc", []) calc_perm = "utils.calc" +def calculate(text): + pass -def calc(text): - """ - extracts a mathematical expression from `text` - returns (expression, result) or None - """ - expression = "" - should_calc = False - for char in text: - if char.isdigit() or (expression and char == ".") or (should_calc and char == " "): - expression += char - elif char in math_operators: - # calculation must include at least 1 operator - should_calc = True - expression += char - elif should_calc and char.isalpha(): - # don't include any more text in the calculation - break - if should_calc and not any(op in expression for op in ignore_operators): - try: - result = str(eval(expression)) # pylint: disable = W0123 - except: # pylint: disable = W0702 - # we can run into all kinds of errors here - # most probably SyntaxError - return None - return (expression, result) - return None - +def calc(text, sender): + try: + result = calculate(text) + msg(sender, "&2=== Calc:&6 %s" % result) + except: + msg(sender, "&2=== Calc:&c Something went wrong while calculating - calulation aborted") @hook.event("player.AsyncPlayerChatEvent", "monitor") def on_calc_chat(event): sender = event.getPlayer() message = event.getMessage() if not event.isCancelled() and uid(sender) in calc_users and sender.hasPermission(calc_perm): - output = calc(message) - if output: - msg(sender, "&2=== Calc: &e" + output[0] + " &2= &c" + output[1]) - + thread = threading.Thread(target=calc, args=(message, sender)) + thread.daemon = True + thread.start() @hook.command("calc", description="Toggles chat calculations") def on_calc_command(sender, command, label, args): |