summaryrefslogtreecommitdiff
path: root/calc.py
diff options
context:
space:
mode:
authorNEMESIS13cz <seke94@seznam.cz>2015-08-10 20:40:03 +0200
committerNEMESIS13cz <seke94@seznam.cz>2015-08-10 20:40:03 +0200
commit69fe651dc1fca438cf8e69aefb30f7d1aca72fc2 (patch)
tree985aeb38b6c5989cfbf05a97b9592003637f9670 /calc.py
parent41d2f3104838f7661da2a4bd42903c7b35e6a733 (diff)
Changed calc to run on a separate thread
Diffstat (limited to 'calc.py')
-rw-r--r--calc.py47
1 files changed, 13 insertions, 34 deletions
diff --git a/calc.py b/calc.py
index 7c752e7..e9e79fc 100644
--- a/calc.py
+++ b/calc.py
@@ -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):