diff --git a/src/modules/PluginsLoader/__init__.py b/src/modules/PluginsLoader/__init__.py new file mode 100644 index 0000000..f1cb068 --- /dev/null +++ b/src/modules/PluginsLoader/__init__.py @@ -0,0 +1 @@ +from .plugins_loader import PluginsLoader diff --git a/src/modules/PluginsLoader/plugins-builtins.pyi b/src/modules/PluginsLoader/plugins-builtins.pyi new file mode 100644 index 0000000..e69de29 diff --git a/src/modules/PluginsLoader/plugins_loader.py b/src/modules/PluginsLoader/plugins_loader.py new file mode 100644 index 0000000..2c65974 --- /dev/null +++ b/src/modules/PluginsLoader/plugins_loader.py @@ -0,0 +1,52 @@ +import os +import types + +from core import get_logger + + +class BEAMP: + + def __init__(self, name=None): + if name is None: + raise Exception("BEAMP: Name is required") + self.log = get_logger(f"BEAMP({name})") + self.name = name + + def set_name(self, name): + self.name = name + + @staticmethod + def register_event(event_name, event_func): + ev.register_event(event_name, event_func) + + @staticmethod + def call_event(event_name, *data): + ev.call_event(event_name, *data) + + + +class PluginsLoader: + + def __init__(self, plugins_dir): + self.__plugins = {} + self.__plugins_dir = plugins_dir + self.log = get_logger("PluginsLoader") + + def load_plugins(self): + self.log.debug("Loading plugins...") + files = os.listdir(self.__plugins_dir) + for file in files: + if file.endswith(".py"): + try: + self.log.debug(f"Loading plugin: {file}") + plugin = types.ModuleType('plugin') + plugin.BEAMP = BEAMP + file = os.path.join(self.__plugins_dir, file) + with open(f'{file}', 'r') as f: + code = f.read().replace("import BEAMP\n", "") + exec(code, plugin.__dict__) + plugin.load() + self.__plugins.update({file[:-3]: plugin}) + self.log.debug(f"Plugin loaded: {file}") + except Exception as e: + self.log.error(f"Error loading plugin: {file}; Error: {e}") diff --git a/src/modules/__init__.py b/src/modules/__init__.py index d637e02..86a4f9c 100644 --- a/src/modules/__init__.py +++ b/src/modules/__init__.py @@ -7,6 +7,7 @@ # Licence: FPA # (c) kuitoi.su 2023 from .console import Console -from .config_provider import ConfigProvider, Config +from .ConfigProvider import ConfigProvider, Config from .i18n import MultiLanguage from .EventsSystem import EventsSystem +from .PluginsLoader import PluginsLoader