63 lines
2.6 KiB
Python
63 lines
2.6 KiB
Python
from bot import loaded_modules_dict
|
|
from os import path, listdir, pardir
|
|
from importlib import import_module
|
|
import re
|
|
|
|
|
|
class Trigger(object):
|
|
available_triggers_dict = dict
|
|
|
|
def __init__(self):
|
|
self.available_triggers_dict = {}
|
|
|
|
def start(self):
|
|
try:
|
|
for name, triggers in self.available_triggers_dict.items():
|
|
try:
|
|
for trigger, handler in triggers["handlers"].items():
|
|
self.dom.data.register_callback(self, trigger, handler)
|
|
except KeyError:
|
|
pass
|
|
except KeyError as error:
|
|
pass
|
|
|
|
def register_trigger(self, identifier, trigger_dict):
|
|
self.available_triggers_dict[identifier] = trigger_dict
|
|
|
|
def import_triggers(self):
|
|
modules_root_dir = path.join(path.dirname(path.abspath(__file__)), pardir, "modules")
|
|
|
|
module_triggers_root_dir = path.join(modules_root_dir, self.options['module_name'])
|
|
try:
|
|
for module_trigger in listdir(path.join(module_triggers_root_dir, "triggers")):
|
|
if module_trigger == 'common.py' or module_trigger == '__init__.py' or module_trigger[-3:] != '.py':
|
|
continue
|
|
import_module("bot.modules." + self.options['module_name'] + ".triggers." + module_trigger[:-3])
|
|
|
|
for module_trigger in listdir(path.join(module_triggers_root_dir, "commands")):
|
|
if module_trigger == 'common.py' or module_trigger == '__init__.py' or module_trigger[-3:] != '.py':
|
|
continue
|
|
import_module("bot.modules." + self.options['module_name'] + ".commands." + module_trigger[:-3])
|
|
|
|
except FileNotFoundError:
|
|
pass
|
|
|
|
except ModuleNotFoundError:
|
|
pass
|
|
|
|
def execute_telnet_triggers(self):
|
|
telnet_lines_to_process = self.telnet.get_a_bunch_of_lines_from_queue(25)
|
|
|
|
for telnet_line in telnet_lines_to_process:
|
|
for loaded_module in loaded_modules_dict.values():
|
|
for trigger_name, trigger_group in loaded_module.available_triggers_dict.items():
|
|
try:
|
|
for trigger in trigger_group["triggers"]:
|
|
regex_results = re.search(trigger["regex"], telnet_line)
|
|
if regex_results:
|
|
trigger["callback"](loaded_module, self, regex_results)
|
|
# TODO: add method to append log, or create a new one
|
|
# TODO: this needs to weed out triggers being called too often
|
|
except KeyError:
|
|
pass
|