From ff57f1049804e40b95874c63894e31d414308b98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wuyi=E6=97=A0=E7=96=91?= <444835641@qq.com> Date: Wed, 1 Mar 2023 22:42:46 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E6=94=AF=E6=8C=81`nest`=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E6=8F=92=E4=BB=B6=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gsuid_core/server.py | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/gsuid_core/server.py b/gsuid_core/server.py index 9458717..c363798 100644 --- a/gsuid_core/server.py +++ b/gsuid_core/server.py @@ -39,22 +39,15 @@ class GsServer: if plugin.is_dir(): plugin_path = plugin / '__init__.py' plugins_path = plugin / '__full__.py' + nest_path = plugin / '__nest__.py' # 如果文件夹内有__full_.py,则视为插件包合集 sys.path.append(str(plugin_path.parents)) if plugins_path.exists(): - importlib.import_module( - f'plugins.{plugin.name}.__full__' - ) - for sub_plugin in plugin.iterdir(): - if sub_plugin.is_dir(): - plugin_path = sub_plugin / '__init__.py' - if plugin_path.exists(): - sys.path.append(str(plugin_path.parents)) - _p = ( - f'plugins.{plugin.name}.' - f'{sub_plugin.name}' - ) - importlib.import_module(f'{_p}.__init__') + self.load_dir_plugins(plugin) + elif nest_path.exists(): + path = nest_path.parent / plugin.name + if path.exists(): + self.load_dir_plugins(path, True) # 如果文件夹内有__init_.py,则视为单个插件包 elif plugin_path.exists(): importlib.import_module( @@ -63,9 +56,23 @@ class GsServer: # 如果发现单文件,则视为单文件插件 if plugin.suffix == '.py': importlib.import_module(f'plugins.{plugin.name[:-3]}') - except: # noqa + except Exception as e: # noqa + logger.exception(e) logger.warning(f'插件{plugin.name}加载失败') + def load_dir_plugins(self, plugin: Path, nest: bool = False): + for sub_plugin in plugin.iterdir(): + if sub_plugin.is_dir(): + plugin_path = sub_plugin / '__init__.py' + if plugin_path.exists(): + sys.path.append(str(plugin_path.parents)) + name = plugin.name + if nest: + _p = f'plugins.{name}.{name}.{sub_plugin.name}' + else: + _p = f'plugins.{name}.{sub_plugin.name}' + importlib.import_module(f'{_p}.__init__') + async def connect(self, websocket: WebSocket, bot_id: str) -> _Bot: await websocket.accept() self.active_ws[bot_id] = websocket