88 lines
3.5 KiB
Python
88 lines
3.5 KiB
Python
|
|
from os import path, listdir, pardir
|
||
|
|
from importlib import import_module
|
||
|
|
from bot import loaded_modules_dict
|
||
|
|
|
||
|
|
|
||
|
|
class Widget(object):
|
||
|
|
available_widgets_dict = dict
|
||
|
|
template_render_hook = object
|
||
|
|
|
||
|
|
def __init__(self):
|
||
|
|
self.available_widgets_dict = {}
|
||
|
|
self.template_render_hook = self.template_render
|
||
|
|
|
||
|
|
def on_socket_connect(self, steamid):
|
||
|
|
if isinstance(self.available_widgets_dict, dict) and len(self.available_widgets_dict) >= 1:
|
||
|
|
for name, widget in self.available_widgets_dict.items():
|
||
|
|
if widget["main_widget"] is not None:
|
||
|
|
widget["main_widget"](self, dispatchers_steamid=steamid)
|
||
|
|
|
||
|
|
def on_socket_disconnect(self, steamid):
|
||
|
|
if isinstance(self.available_widgets_dict, dict) and len(self.available_widgets_dict) >= 1:
|
||
|
|
for name, widget in self.available_widgets_dict.items():
|
||
|
|
if widget["main_widget"] is not None:
|
||
|
|
widget["main_widget"](self, dispatchers_steamid=steamid)
|
||
|
|
|
||
|
|
def on_socket_event(self, event_data, dispatchers_steamid):
|
||
|
|
pass
|
||
|
|
|
||
|
|
@staticmethod
|
||
|
|
def template_render(*args, **kwargs):
|
||
|
|
try:
|
||
|
|
template = kwargs.get("template", None)
|
||
|
|
rendered_template = template.render(**kwargs)
|
||
|
|
except AttributeError as error:
|
||
|
|
rendered_template = ""
|
||
|
|
|
||
|
|
return rendered_template
|
||
|
|
|
||
|
|
@staticmethod
|
||
|
|
def get_all_available_widgets_dict():
|
||
|
|
all_available_widgets_dict = {}
|
||
|
|
for loaded_module_identifier, loaded_module in loaded_modules_dict.items():
|
||
|
|
if len(loaded_module.available_widgets_dict) >= 1:
|
||
|
|
all_available_widgets_dict[loaded_module_identifier] = loaded_module.available_widgets_dict
|
||
|
|
|
||
|
|
return all_available_widgets_dict
|
||
|
|
|
||
|
|
def start(self):
|
||
|
|
if isinstance(self.available_widgets_dict, dict) and len(self.available_widgets_dict) >= 1:
|
||
|
|
for name, widget in self.available_widgets_dict.items():
|
||
|
|
for trigger, handler in widget["handlers"].items():
|
||
|
|
self.dom.data.register_callback(self, trigger, handler)
|
||
|
|
|
||
|
|
def register_widget(self, identifier, widget_dict):
|
||
|
|
if widget_dict.get("enabled", True):
|
||
|
|
self.available_widgets_dict[identifier] = widget_dict
|
||
|
|
|
||
|
|
def import_widgets(self):
|
||
|
|
modules_root_dir = path.join(path.dirname(path.abspath(__file__)), pardir, "modules")
|
||
|
|
|
||
|
|
module_widgets_root_dir = path.join(modules_root_dir, self.options['module_name'], "widgets")
|
||
|
|
try:
|
||
|
|
for module_widget in listdir(module_widgets_root_dir):
|
||
|
|
if module_widget == 'common.py' or module_widget == '__init__.py' or module_widget[-3:] != '.py':
|
||
|
|
continue
|
||
|
|
import_module("bot.modules." + self.options['module_name'] + ".widgets." + module_widget[:-3])
|
||
|
|
except FileNotFoundError as error:
|
||
|
|
# module does not have widgets
|
||
|
|
pass
|
||
|
|
|
||
|
|
def get_current_view(self, dispatchers_steamid):
|
||
|
|
return (
|
||
|
|
self.dom.data
|
||
|
|
.get(self.get_module_identifier(), {})
|
||
|
|
.get("visibility", {})
|
||
|
|
.get(dispatchers_steamid, {})
|
||
|
|
.get("current_view", "frontend")
|
||
|
|
)
|
||
|
|
|
||
|
|
def set_current_view(self, dispatchers_steamid, options):
|
||
|
|
self.dom.data.upsert({
|
||
|
|
self.get_module_identifier(): {
|
||
|
|
"visibility": {
|
||
|
|
dispatchers_steamid: options
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}, dispatchers_steamid=dispatchers_steamid)
|