From 1721e40c61afaa692515b419b62a2bdb0d4b4069 Mon Sep 17 00:00:00 2001 From: jesopo Date: Sat, 29 Sep 2018 09:45:08 +0100 Subject: [PATCH] Add scripts.py, to support basic modules in languages other than python --- modules/scripts.py | 43 +++++++++++++++++++++++++++++++++++++++++++ modules/scripts/.keep | 0 2 files changed, 43 insertions(+) create mode 100644 modules/scripts.py create mode 100644 modules/scripts/.keep diff --git a/modules/scripts.py b/modules/scripts.py new file mode 100644 index 00000000..bb9f8fb8 --- /dev/null +++ b/modules/scripts.py @@ -0,0 +1,43 @@ + +import glob, 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() + + def read(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( + lambda x: self.call(x, filename, name)) + + def call(self, event, filename, name): + env = {} + env["EVENT"] = event.name + for key, value in event.kwargs.items(): + env[key.upper()] = str(value) + + proc = subprocess.Popen([filename], stdout=subprocess.PIPE, env=env) + try: + proc.wait(5) + except subprocess.TimeoutExpired: + # execution of script expired + return + + out = proc.stdout.read().decode("utf8") + 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 new file mode 100644 index 00000000..e69de29b