Files
chrani-bot-tng/bot/mixins/trigger.py

63 lines
2.6 KiB
Python
Raw Normal View History

2025-11-21 07:26:02 +01:00
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