aboutsummaryrefslogtreecommitdiff
path: root/modules/scripts.py
diff options
context:
space:
mode:
Diffstat (limited to 'modules/scripts.py')
-rw-r--r--modules/scripts.py24
1 files changed, 19 insertions, 5 deletions
diff --git a/modules/scripts.py b/modules/scripts.py
index 2025f067..c9965cd8 100644
--- a/modules/scripts.py
+++ b/modules/scripts.py
@@ -1,28 +1,42 @@
-import glob, os, subprocess
+import glob, json, os, subprocess
from src import Utils
class Module(object):
def __init__(self, bot, events, exports):
self.events = events
self._directory = os.path.join(bot.directory, "modules", "scripts")
- self.read()
+ self._hooks = []
+ self._load_scripts()
- def read(self):
+ def _load_scripts(self):
for filename in glob.glob(os.path.join(self._directory, "*")):
name = os.path.basename(filename)
for hashflag, value in Utils.get_hashflags(filename):
if hashflag == "name" and value:
name = value
elif hashflag == "hook" and value:
- self.events.on(value).hook(
+ hook = self.events.on(value).hook(
lambda x: self.call(x, filename, name))
+ self._hooks.append([value, hook])
+
+ @Utils.hook("received.command.reloadscripts", permission="reloadscripts")
+ def reload(self, event):
+ for event_name, hook in self._hooks:
+ self.events.on(event_name).unhook(hook)
+ self._load_scripts()
+ event["stdout"].write("Reloaded all scripts")
def call(self, event, filename, name):
env = {}
env["EVENT"] = event.name
for key, value in event.kwargs.items():
- env[key.upper()] = str(value)
+ if isinstance(value, (str,)):
+ env[key.upper()] = value
+ elif isinstance(value, (bool,)):
+ env[key.upper()] = str(int(value))
+ elif isinstance(value, (list, dict)):
+ env[key.upper()] = json.dumps(value)
proc = subprocess.Popen([filename], stdout=subprocess.PIPE, env=env)
try: