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