From fd08e23bd46d209a0c8bae84c83ad901a4b9cc12 Mon Sep 17 00:00:00 2001 From: jesopo Date: Tue, 5 Feb 2019 16:56:21 +0000 Subject: Move scripts module to it's own directory --- modules/scripts.py | 66 ------------------------------------------ modules/scripts/.keep | 0 modules/scripts/__init__.py | 67 +++++++++++++++++++++++++++++++++++++++++++ modules/scripts/scripts/.keep | 0 4 files changed, 67 insertions(+), 66 deletions(-) delete mode 100644 modules/scripts.py delete mode 100644 modules/scripts/.keep create mode 100644 modules/scripts/__init__.py create mode 100644 modules/scripts/scripts/.keep (limited to 'modules') diff --git a/modules/scripts.py b/modules/scripts.py deleted file mode 100644 index 5b87767d..00000000 --- a/modules/scripts.py +++ /dev/null @@ -1,66 +0,0 @@ - -import glob, json, os, subprocess -from src import IRCObject, ModuleManager, utils - -class Module(ModuleManager.BaseModule): - def on_load(self): - self._directory = os.path.join(self.bot.directory, "modules", "scripts") - self._hooks = [] - self._load_scripts() - - def _load_scripts(self): - for filename in glob.glob(os.path.join(self._directory, "*")): - name = os.path.basename(filename) - for hashflag, value in utils.parse.hashflags(filename): - if hashflag == "name" and value: - name = value - elif hashflag == "hook" and value: - hook_fn = self._make_hook(filename, name) - hook = self.events.on(value).hook(hook_fn) - self._hooks.append([value, hook]) - - def _make_hook(self, filename, name): - return lambda event: self.call(event, filename, name) - - @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 = { - "HOME": os.environ["HOME"], - "PATH": os.environ["PATH"] - } - - env["EVENT"] = event.name - for key, value in event.kwargs.items(): - 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) - elif isinstance(value, (IRCObject.Object,)): - env[key.upper()] = str(value) - - proc = subprocess.Popen([filename], env=env, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - try: - proc.wait(5) - except subprocess.TimeoutExpired as e: - proc.kill() - return - - out = proc.stdout.read().decode("utf8").strip("\n") - if out: - if proc.returncode == 0: - if "stdout" in event: - event["stdout"].set_prefix(name) - event["stdout"].write(out) - else: - if "stderr" in event: - event["stderr"].set_prefix(name) - event["stderr"].write(out) diff --git a/modules/scripts/.keep b/modules/scripts/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/scripts/__init__.py b/modules/scripts/__init__.py new file mode 100644 index 00000000..6eec46b9 --- /dev/null +++ b/modules/scripts/__init__.py @@ -0,0 +1,67 @@ + +import glob, json, os, subprocess +from src import IRCObject, ModuleManager, utils + +class Module(ModuleManager.BaseModule): + def on_load(self): + our_directory = os.path.abspath(os.path.dirname(__file__)) + self._directory = os.path.join(our_directory, "scripts") + self._hooks = [] + self._load_scripts() + + def _load_scripts(self): + for filename in glob.glob(os.path.join(self._directory, "*")): + name = os.path.basename(filename) + for hashflag, value in utils.parse.hashflags(filename): + if hashflag == "name" and value: + name = value + elif hashflag == "hook" and value: + hook_fn = self._make_hook(filename, name) + hook = self.events.on(value).hook(hook_fn) + self._hooks.append([value, hook]) + + def _make_hook(self, filename, name): + return lambda event: self.call(event, filename, name) + + @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 = { + "HOME": os.environ["HOME"], + "PATH": os.environ["PATH"] + } + + env["EVENT"] = event.name + for key, value in event.kwargs.items(): + 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) + elif isinstance(value, (IRCObject.Object,)): + env[key.upper()] = str(value) + + proc = subprocess.Popen([filename], env=env, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + try: + proc.wait(5) + except subprocess.TimeoutExpired as e: + proc.kill() + return + + out = proc.stdout.read().decode("utf8").strip("\n") + if out: + if proc.returncode == 0: + if "stdout" in event: + event["stdout"].set_prefix(name) + event["stdout"].write(out) + else: + if "stderr" in event: + event["stderr"].set_prefix(name) + event["stderr"].write(out) diff --git a/modules/scripts/scripts/.keep b/modules/scripts/scripts/.keep new file mode 100644 index 00000000..e69de29b -- cgit v1.3.1-10-gc9f91