From ee272ec07bd286364bd449415b3b60db8be5be4e Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Mon, 18 Nov 2024 13:34:11 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E5=88=9D=E5=A7=8B=E5=8C=96Bot?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superuser/bot_manage/__init__.py | 44 ++++++++++++++++++- zhenxun/models/bot_console.py | 40 ++++++++--------- 2 files changed, 63 insertions(+), 21 deletions(-) diff --git a/zhenxun/builtin_plugins/superuser/bot_manage/__init__.py b/zhenxun/builtin_plugins/superuser/bot_manage/__init__.py index 7b9fdffc..70f14b9e 100644 --- a/zhenxun/builtin_plugins/superuser/bot_manage/__init__.py +++ b/zhenxun/builtin_plugins/superuser/bot_manage/__init__.py @@ -1,10 +1,17 @@ from pathlib import Path import nonebot +from nonebot.adapters import Bot from nonebot.plugin import PluginMetadata from zhenxun.utils.enum import PluginType +from zhenxun.models.task_info import TaskInfo +from zhenxun.utils.platform import PlatformUtils from zhenxun.configs.utils import PluginExtraData +from zhenxun.models.bot_console import BotConsole +from zhenxun.models.plugin_info import PluginInfo + +driver = nonebot.get_driver() _sub_plugins = set() _sub_plugins |= nonebot.load_plugins(str(Path(__file__).parent.resolve())) @@ -17,6 +24,41 @@ __plugin_meta__ = PluginMetadata( extra=PluginExtraData( author="", version="0.1", - plugin_type=PluginType.SUPERUSER, + plugin_type=PluginType.PARENT, ).dict(), ) + + +@driver.on_bot_connect +async def _(bot: Bot): + """初始化Bot管理 + + 参数: + bot: Bot + """ + plugin_list = await PluginInfo.get_plugins( + plugin_type__in=[PluginType.NORMAL, PluginType.DEPENDANT, PluginType.ADMIN] + ) + available_tasks: list[str] = await TaskInfo.filter(status=True).values_list( + "module", flat=True + ) # type: ignore + available_plugins = [p.module for p in plugin_list] + # for _, bot in nonebot.get_bots().items(): + platform = PlatformUtils.get_platform(bot) + bot_data, is_create = await BotConsole.get_or_create( + bot_id=bot.self_id, platform=platform + ) + if not is_create: + block_plugins = await bot_data.get_plugins(bot.self_id, False) + block_plugins = BotConsole._convert_module_format(block_plugins) + for module in available_plugins.copy(): + if module in block_plugins: + available_plugins.remove(module) + block_tasks = await bot_data.get_tasks(bot.self_id, False) + block_tasks = BotConsole._convert_module_format(block_tasks) + for module in available_tasks.copy(): + if module in block_plugins: + available_tasks.remove(module) + bot_data.available_plugins = BotConsole._convert_module_format(available_plugins) + bot_data.available_tasks = BotConsole._convert_module_format(available_tasks) + await bot_data.save(update_fields=["available_plugins", "available_tasks"]) diff --git a/zhenxun/models/bot_console.py b/zhenxun/models/bot_console.py index d7a8d20a..e94c2523 100644 --- a/zhenxun/models/bot_console.py +++ b/zhenxun/models/bot_console.py @@ -50,10 +50,10 @@ class BotConsole(Model): """ 获取bot状态 - Args: + 参数: bot_id (str, optional): bot_id. Defaults to None. - Returns: + 返回: list[tuple[str, bool]] | bool: bot状态 """ if not bot_id: @@ -82,11 +82,11 @@ class BotConsole(Model): """ 获取bot被动技能 - Args: + 参数: bot_id (str | None, optional): bot_id. Defaults to None. status (bool | None, optional): 被动状态. Defaults to True. - Returns: + 返回: list[tuple[str, str]] | str: 被动技能 """ if not bot_id: @@ -119,11 +119,11 @@ class BotConsole(Model): """ 获取bot插件 - Args: + 参数: bot_id (str | None, optional): bot_id. Defaults to None. status (bool, optional): 插件状态. Defaults to True. - Returns: + 返回: list[tuple[str, str]] | str: 插件 """ if not bot_id: @@ -140,7 +140,7 @@ class BotConsole(Model): """ 设置bot状态 - Args: + 参数: status (bool): 状态 bot_id (str, optional): bot_id. Defaults to None. @@ -167,10 +167,10 @@ class BotConsole(Model): """ 在 `