diff options
Diffstat (limited to 'modules/scripts.py')
| -rw-r--r-- | modules/scripts.py | 24 |
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: |
