From 2a49d86d9ff358da80c0fbd001c70b68671b9ddc Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Wed, 31 Jul 2024 18:34:22 +0800 Subject: [PATCH] =?UTF-8?q?feat=E2=9C=A8:=20=E6=96=B0=E5=A2=9E=E5=8A=9F?= =?UTF-8?q?=E8=83=BDID=E6=90=9C=E7=B4=A2=E5=8F=8A=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zhenxun/builtin_plugins/help/_data_source.py | 10 +++++++--- zhenxun/builtin_plugins/help/_utils.py | 15 +++++++++------ zhenxun/builtin_plugins/init/init_plugin.py | 3 +++ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/zhenxun/builtin_plugins/help/_data_source.py b/zhenxun/builtin_plugins/help/_data_source.py index 68da9f41..72467b2e 100644 --- a/zhenxun/builtin_plugins/help/_data_source.py +++ b/zhenxun/builtin_plugins/help/_data_source.py @@ -25,10 +25,14 @@ async def get_plugin_help(name: str, is_superuser: bool) -> str | BuildImage: """获取功能的帮助信息 参数: - name: 插件名称 + name: 插件名称或id is_superuser: 是否为超级用户 """ - if plugin := await PluginInfo.get_or_none(name__iexact=name): + if name.isdigit(): + plugin = await PluginInfo.get_or_none(id=int(name), load_status=True) + else: + plugin = await PluginInfo.get_or_none(name__iexact=name, load_status=True) + if plugin: _plugin = nonebot.get_plugin_by_module_name(plugin.module_path) if _plugin and _plugin.metadata: items = None @@ -45,6 +49,6 @@ async def get_plugin_help(name: str, is_superuser: bool) -> str | BuildImage: "用法": _plugin.metadata.usage, } if items: - return await ImageTemplate.hl_page(name, items) + return await ImageTemplate.hl_page(plugin.name, items) return "糟糕! 该功能没有帮助喔..." return "没有查找到这个功能噢..." diff --git a/zhenxun/builtin_plugins/help/_utils.py b/zhenxun/builtin_plugins/help/_utils.py index 9b2e783d..4e5c6247 100644 --- a/zhenxun/builtin_plugins/help/_utils.py +++ b/zhenxun/builtin_plugins/help/_utils.py @@ -46,7 +46,9 @@ class HelpImageBuild: 对插件按照菜单类型分类 """ if not self._data: - self._data = await PluginInfo.filter(plugin_type=PluginType.NORMAL) + self._data = await PluginInfo.filter( + plugin_type=PluginType.NORMAL, load_status=True + ) if not self._sort_data: for plugin in self._data: menu_type = plugin.menu_type or "normal" @@ -143,18 +145,19 @@ class HelpImageBuild: await self.sort_type() font_size = 24 build_type = Config.get_config("help", "TYPE") - _image = BuildImage.build_text_image("1", size=font_size) font = BuildImage.load_font("HYWenHei-85W.ttf", 20) for idx, menu_type in enumerate(self._sort_data.keys()): plugin_list = self._sort_data[menu_type] - wh_list = [BuildImage.get_text_size(x.name, font) for x in plugin_list] + wh_list = [ + BuildImage.get_text_size(f"{x.id}.{x.name}", font) for x in plugin_list + ] wh_list.append(BuildImage.get_text_size(menu_type, font)) # sum_height = sum([x[1] for x in wh_list]) if build_type == "VV": sum_height = 50 * len(plugin_list) + 10 else: sum_height = (font_size + 6) * len(plugin_list) + 10 - max_width = max([x[0] for x in wh_list]) + 20 + max_width = max([x[0] for x in wh_list]) + 30 bk = BuildImage( max_width + 40, sum_height + 50, @@ -199,7 +202,7 @@ class HelpImageBuild: await B.paste(name_image, (0, curr_h), center_type="width") curr_h += name_image.h + 5 else: - await B.text((10, curr_h), f"{i + 1}.{plugin.name}", text_color) + await B.text((10, curr_h), f"{plugin.id}.{plugin.name}", text_color) if pos: await B.line(pos, (236, 66, 7), 3) curr_h += font_size + 5 @@ -221,7 +224,7 @@ class HelpImageBuild: h = 10 for msg in [ "目前支持的功能列表:", - "可以通过 ‘帮助[功能名称]’ 来获取对应功能的使用方法", + "可以通过 ‘帮助 [功能名称或功能Id]’ 来获取对应功能的使用方法", ]: text = await BuildImage.build_text_image(msg, "HYWenHei-85W.ttf", 24) await B.paste(text, (w, h)) diff --git a/zhenxun/builtin_plugins/init/init_plugin.py b/zhenxun/builtin_plugins/init/init_plugin.py index 3e77471d..a74a72ba 100644 --- a/zhenxun/builtin_plugins/init/init_plugin.py +++ b/zhenxun/builtin_plugins/init/init_plugin.py @@ -101,9 +101,11 @@ async def _(): limit_list: list[PluginLimit] = [] task_list: list[TaskInfo] = [] module2id = {} + load_plugin = [] if module_list := await PluginInfo.all().values("id", "module_path"): module2id = {m["module_path"]: m["id"] for m in module_list} for plugin in get_loaded_plugins(): + load_plugin.append(plugin.name) if plugin.metadata: await _handle_setting(plugin, plugin_list, limit_list, task_list) create_list = [] @@ -160,6 +162,7 @@ async def _(): 10, ) await data_migration() + await PluginInfo.filter(module__not_in=load_plugin).update(load_status=False) async def data_migration():