Release 0.9.0
This commit is contained in:
62
bot/mixins/trigger.py
Normal file
62
bot/mixins/trigger.py
Normal file
@@ -0,0 +1,62 @@
|
||||
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
|
||||
Reference in New Issue
Block a user