From 7d86ff057c8c5ad06fdfa8749ed955b64682c060 Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Tue, 23 May 2023 23:05:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BE=A4=E8=81=8A=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=97=A0=E6=B3=95=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 + .../admin_bot_manage/_data_source.py | 6 +- basic_plugins/admin_bot_manage/switch_rule.py | 6 +- basic_plugins/broadcast/__init__.py | 2 +- basic_plugins/group_handle/__init__.py | 2 +- basic_plugins/super_cmd/manager_group.py | 4 +- plugins/epic/__init__.py | 2 +- plugins/web_ui/models/params.py | 4 +- utils/manager/group_manager.py | 85 ++++++++----------- utils/manager/models.py | 2 +- utils/manager/plugins_manager.py | 16 ++-- 11 files changed, 61 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index ddb9a629..b49d4384 100644 --- a/README.md +++ b/README.md @@ -331,6 +331,10 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能 ## 更新 +### 2023/5/23 + +* 修复群聊数据无法初始化 + ### 2023/5/22 * 群聊中B站订阅所有管理员共享增删操作 diff --git a/basic_plugins/admin_bot_manage/_data_source.py b/basic_plugins/admin_bot_manage/_data_source.py index 8e433183..b9f3a7de 100644 --- a/basic_plugins/admin_bot_manage/_data_source.py +++ b/basic_plugins/admin_bot_manage/_data_source.py @@ -28,7 +28,7 @@ ICON_PATH = IMAGE_PATH / "other" GROUP_HELP_PATH = DATA_PATH / "group_help" -async def group_current_status(group_id: int) -> str: +async def group_current_status(group_id: str) -> str: """ 说明: 获取当前群聊所有通知的开关 @@ -144,7 +144,7 @@ def change_global_task_status(cmd: str) -> str: return f"已 {status} 全局{_cmd}" -async def change_group_switch(cmd: str, group_id: int, is_super: bool = False) -> str: +async def change_group_switch(cmd: str, group_id: str, is_super: bool = False) -> str: """ 说明: 修改群功能状态 @@ -373,7 +373,7 @@ async def update_member_info( return True -def set_group_bot_status(group_id: int, status: bool) -> str: +def set_group_bot_status(group_id: str, status: bool) -> str: """ 说明: 设置群聊bot开关状态 diff --git a/basic_plugins/admin_bot_manage/switch_rule.py b/basic_plugins/admin_bot_manage/switch_rule.py index 5b3ec056..c4ae3c3c 100755 --- a/basic_plugins/admin_bot_manage/switch_rule.py +++ b/basic_plugins/admin_bot_manage/switch_rule.py @@ -130,15 +130,15 @@ async def _(): @group_task_status.handle() async def _(event: GroupMessageEvent): - await group_task_status.send(image(b64=await group_current_status(event.group_id))) + await group_task_status.send(image(b64=await group_current_status(str(event.group_id)))) @group_status.handle() async def _(event: GroupMessageEvent, reg_group: Tuple[Any, ...] = RegexGroup()): cmd = reg_group[0] if cmd == "休息吧": - msg = set_group_bot_status(event.group_id, False) + msg = set_group_bot_status(str(event.group_id), False) else: - msg = set_group_bot_status(event.group_id, True) + msg = set_group_bot_status(str(event.group_id), True) await group_status.send(msg) logger.info(f"使用总开关命令: {cmd}", cmd, event.user_id, event.group_id) diff --git a/basic_plugins/broadcast/__init__.py b/basic_plugins/broadcast/__init__.py index 7563d3d8..4f8cb9cb 100755 --- a/basic_plugins/broadcast/__init__.py +++ b/basic_plugins/broadcast/__init__.py @@ -50,7 +50,7 @@ async def _( gl = [ g["group_id"] for g in await bot.get_group_list() - if group_manager.check_group_task_status(g["group_id"], "broadcast") + if group_manager.check_group_task_status(str(g["group_id"]), "broadcast") ] g_cnt = len(gl) cnt = 0 diff --git a/basic_plugins/group_handle/__init__.py b/basic_plugins/group_handle/__init__.py index 6fd2b4bc..fbc912f8 100755 --- a/basic_plugins/group_handle/__init__.py +++ b/basic_plugins/group_handle/__init__.py @@ -95,7 +95,7 @@ async def _(bot: Bot, event: GroupIncreaseNoticeEvent): data = plugins2settings_manager.get_data() for plugin in data.keys(): if not data[plugin].default_status: - group_manager.block_plugin(plugin, event.group_id) + group_manager.block_plugin(plugin, str(event.group_id)) admin_default_auth = Config.get_config( "admin_bot_manage", "ADMIN_DEFAULT_AUTH" ) diff --git a/basic_plugins/super_cmd/manager_group.py b/basic_plugins/super_cmd/manager_group.py index ed250684..f1a1195b 100755 --- a/basic_plugins/super_cmd/manager_group.py +++ b/basic_plugins/super_cmd/manager_group.py @@ -116,7 +116,7 @@ async def _(bot: Bot, event: MessageEvent, arg: Message = CommandArg()): if len(msg) < 2: await add_group_level.finish("缺失参数...") if is_number(msg[0]) and is_number(msg[1]): - group_id = int(msg[0]) + group_id = str(msg[0]) level = int(msg[1]) else: await add_group_level.finish("参数错误...群号和等级必须是数字..") @@ -125,7 +125,7 @@ async def _(bot: Bot, event: MessageEvent, arg: Message = CommandArg()): await add_group_level.send("修改成功...", at_sender=True) if level > -1: await bot.send_group_msg( - group_id=group_id, message=f"管理员修改了此群权限:{old_level} -> {level}" + group_id=int(group_id), message=f"管理员修改了此群权限:{old_level} -> {level}" ) logger.info(f"修改群权限:{level}", "修改群权限", event.user_id, target=group_id) diff --git a/plugins/epic/__init__.py b/plugins/epic/__init__.py index e3fc54e6..e201a123 100755 --- a/plugins/epic/__init__.py +++ b/plugins/epic/__init__.py @@ -70,7 +70,7 @@ async def _(): gl = [g["group_id"] for g in gl] msg_list, code = await get_epic_free(bot, "Group") for g in gl: - if group_manager.check_task_status("epic_free_game", g): + if group_manager.check_task_status("epic_free_game", str(g)): try: if msg_list and code == 200: await bot.send_group_forward_msg(group_id=g, messages=msg_list) diff --git a/plugins/web_ui/models/params.py b/plugins/web_ui/models/params.py index 53cf0138..86a30401 100644 --- a/plugins/web_ui/models/params.py +++ b/plugins/web_ui/models/params.py @@ -41,7 +41,7 @@ class UpdateConfig(BaseModel): class UpdateGroup(BaseModel): - group_id: int + group_id: str """群号""" status: bool """状态""" @@ -57,5 +57,3 @@ class HandleRequest(BaseModel): id: int handle: str type: str - - diff --git a/utils/manager/group_manager.py b/utils/manager/group_manager.py index 18e641eb..ccc15de3 100644 --- a/utils/manager/group_manager.py +++ b/utils/manager/group_manager.py @@ -21,7 +21,7 @@ Config.add_plugin_config( True, help_="默认进群总开关状态", default_value=True, - type=bool + type=bool, ) @@ -36,8 +36,8 @@ def init_group(func: Callable): def wrapper(*args, **kwargs): self = args[0] group_id = list(filter(lambda x: is_number(x), args[1:]))[0] - if self and group_id and not self._data.group_manager.get(str(group_id)): - self._data.group_manager[str(group_id)] = BaseGroup() + if self is not None and group_id and not self._data.group_manager.get(group_id): + self._data.group_manager[group_id] = BaseGroup() return func(*args, **kwargs) return wrapper @@ -84,12 +84,14 @@ class GroupManager(StaticData[BaseData]): def __init__(self, file: Path): super().__init__(file, False) - self._data = BaseData.parse_file(file) if file.exists() else BaseData() + self._data: BaseData = ( + BaseData.parse_file(file) if file.exists() else BaseData() + ) def get_data(self) -> BaseData: return copy.deepcopy(self._data) - def block_plugin(self, module: str, group_id: int, is_save: bool = True): + def block_plugin(self, module: str, group_id: str, is_save: bool = True): """ 说明: 锁定插件 @@ -100,7 +102,7 @@ class GroupManager(StaticData[BaseData]): """ self._set_plugin_status(module, "block", group_id, is_save) - def unblock_plugin(self, module: str, group_id: int, is_save: bool = True): + def unblock_plugin(self, module: str, group_id: str, is_save: bool = True): """ 说明: 解锁插件 @@ -111,7 +113,7 @@ class GroupManager(StaticData[BaseData]): """ self._set_plugin_status(module, "unblock", group_id, is_save) - def turn_on_group_bot_status(self, group_id: int): + def turn_on_group_bot_status(self, group_id: str): """ 说明: 开启群bot开关 @@ -120,7 +122,7 @@ class GroupManager(StaticData[BaseData]): """ self._set_group_bot_status(group_id, True) - def shutdown_group_bot_status(self, group_id: int): + def shutdown_group_bot_status(self, group_id: str): """ 说明: 关闭群bot开关 @@ -130,17 +132,17 @@ class GroupManager(StaticData[BaseData]): self._set_group_bot_status(group_id, False) @init_group - def check_group_bot_status(self, group_id: int) -> bool: + def check_group_bot_status(self, group_id: str) -> bool: """ 说明: 检查群聊bot总开关状态 参数: :param group_id: 说明 """ - return self._data.group_manager[str(group_id)].status + return self._data.group_manager[group_id].status @init_group - def set_group_level(self, group_id: int, level: int): + def set_group_level(self, group_id: str, level: int): """ 说明: 设置群权限 @@ -148,11 +150,11 @@ class GroupManager(StaticData[BaseData]): :param group_id: 群组 :param level: 权限等级 """ - self._data.group_manager[str(group_id)].level = level + self._data.group_manager[group_id].level = level self.save() @init_group - def get_plugin_status(self, module: str, group_id: int) -> bool: + def get_plugin_status(self, module: str, group_id: str) -> bool: """ 说明: 获取插件状态 @@ -162,7 +164,7 @@ class GroupManager(StaticData[BaseData]): """ return module not in self._data.group_manager[str(group_id)].close_plugins - def get_plugin_super_status(self, module: str, group_id: int) -> bool: + def get_plugin_super_status(self, module: str, group_id: str) -> bool: """ 说明: 获取插件是否被超级用户关闭 @@ -170,22 +172,19 @@ class GroupManager(StaticData[BaseData]): :param module: 功能模块名 :param group_id: 群组 """ - return ( - f"{module}:super" - not in self._data.group_manager[str(group_id)].close_plugins - ) + return f"{module}:super" not in self._data.group_manager[group_id].close_plugins @init_group - def get_group_level(self, group_id: int) -> int: + def get_group_level(self, group_id: str) -> int: """ 说明: 获取群等级 参数: :param group_id: 群号 """ - return self._data.group_manager[str(group_id)].level + return self._data.group_manager[group_id].level - def check_group_is_white(self, group_id: int) -> bool: + def check_group_is_white(self, group_id: str) -> bool: """ 说明: 检测群聊是否在白名单 @@ -194,7 +193,7 @@ class GroupManager(StaticData[BaseData]): """ return group_id in self._data.white_group - def add_group_white_list(self, group_id: int): + def add_group_white_list(self, group_id: str): """ 说明: 将群聊加入白名单 @@ -204,7 +203,7 @@ class GroupManager(StaticData[BaseData]): if group_id not in self._data.white_group: self._data.white_group.append(group_id) - def delete_group_white_list(self, group_id: int): + def delete_group_white_list(self, group_id: str): """ 说明: 将群聊从白名单中删除 @@ -214,7 +213,7 @@ class GroupManager(StaticData[BaseData]): if group_id in self._data.white_group: self._data.white_group.remove(group_id) - def get_group_white_list(self) -> List[int]: + def get_group_white_list(self) -> List[str]: """ 说明: 获取所有群白名单 @@ -227,7 +226,7 @@ class GroupManager(StaticData[BaseData]): 加载被动技能 """ for matcher in get_matchers(True): - _plugin = nonebot.plugin.get_plugin(matcher.plugin_name) + _plugin = nonebot.plugin.get_plugin(matcher.plugin_name) # type: ignore try: _module = _plugin.module plugin_task = _module.__getattribute__("__plugin_task__") @@ -239,7 +238,7 @@ class GroupManager(StaticData[BaseData]): pass @init_group - def delete_group(self, group_id: int): + def delete_group(self, group_id: str): """ 说明: 删除群配置 @@ -250,7 +249,7 @@ class GroupManager(StaticData[BaseData]): self._data.white_group.remove(group_id) self.save() - def open_group_task(self, group_id: int, task: str): + def open_group_task(self, group_id: str, task: str): """ 说明: 开启群被动技能 @@ -280,7 +279,7 @@ class GroupManager(StaticData[BaseData]): if task in self._data.close_task: self._data.close_task.remove(task) - def close_group_task(self, group_id: int, task: str): + def close_group_task(self, group_id: str, task: str): """ 说明: 关闭群被动技能 @@ -290,7 +289,7 @@ class GroupManager(StaticData[BaseData]): """ self._set_group_group_task_status(group_id, task, False) - def check_task_status(self, task: str, group_id: Optional[int] = None) -> bool: + def check_task_status(self, task: str, group_id: Optional[str] = None) -> bool: """ 说明: 检查该被动状态 @@ -306,7 +305,7 @@ class GroupManager(StaticData[BaseData]): @init_group @init_task - def check_group_task_status(self, group_id: int, task: str) -> bool: + def check_group_task_status(self, group_id: str, task: str) -> bool: """ 说明: 查看群被动技能状态 @@ -314,9 +313,7 @@ class GroupManager(StaticData[BaseData]): :param group_id: 群号 :param task: 被动技能名称 """ - return self._data.group_manager[str(group_id)].group_task_status.get( - task, False - ) + return self._data.group_manager[group_id].group_task_status.get(task, False) def check_task_super_status(self, task: str) -> bool: """ @@ -336,7 +333,7 @@ class GroupManager(StaticData[BaseData]): @init_group @init_task - def group_group_task_status(self, group_id: int) -> str: + def group_group_task_status(self, group_id: str) -> str: """ 说明: 查看群被全部动技能状态 @@ -344,14 +341,13 @@ class GroupManager(StaticData[BaseData]): :param group_id: 群号 """ x = "[群被动技能]:\n" - group_id = str(group_id) for key in self._data.group_manager[group_id].group_task_status.keys(): - x += f'{self._data.task[key]}:{"√" if self.check_group_task_status(int(group_id), key) else "×"}\n' + x += f'{self._data.task[key]}:{"√" if self.check_group_task_status(group_id, key) else "×"}\n' return x[:-1] @init_group @init_task - def _set_group_group_task_status(self, group_id: int, task: str, status: bool): + def _set_group_group_task_status(self, group_id: str, task: str, status: bool): """ 说明: 管理群被动技能状态 @@ -365,7 +361,7 @@ class GroupManager(StaticData[BaseData]): @init_group def _set_plugin_status( - self, module: str, status: str, group_id: int, is_save: bool + self, module: str, status: str, group_id: str, is_save: bool ): """ 说明: @@ -404,7 +400,7 @@ class GroupManager(StaticData[BaseData]): self._data = BaseData.parse_file(self.file) self._data.task = t - def save(self, path: Union[str, Path] = None): + def save(self, path: Optional[Union[str, Path]] = None): """ 说明: 保存文件 @@ -428,14 +424,3 @@ class GroupManager(StaticData[BaseData]): def __getitem__(self, key) -> BaseGroup: return self._data.group_manager[key] - - # def get_super_old_data(self) -> Optional[dict]: - # """ - # 说明: - # 获取旧数据,平时使用请不要调用 - # """ - # if self._data["super"].get("close_plugins"): - # _x = self._data["super"].get("close_plugins") - # del self._data["super"]["close_plugins"] - # return _x - # return None diff --git a/utils/manager/models.py b/utils/manager/models.py index 1981e0d0..60b93661 100644 --- a/utils/manager/models.py +++ b/utils/manager/models.py @@ -35,7 +35,7 @@ class BaseData(BaseModel): 群基本信息 """ - white_group: List[int] = [] + white_group: List[str] = [] """白名单""" close_task: List[str] = [] """全局关闭的被动任务""" diff --git a/utils/manager/plugins_manager.py b/utils/manager/plugins_manager.py index e67b6a33..51aa725a 100644 --- a/utils/manager/plugins_manager.py +++ b/utils/manager/plugins_manager.py @@ -1,7 +1,9 @@ -from typing import Optional, Dict, Callable, Union from pathlib import Path -from utils.manager.data_class import StaticData +from typing import Callable, Dict, Optional, Union + from utils.manager import group_manager +from utils.manager.data_class import StaticData + from .models import Plugin @@ -77,7 +79,7 @@ class PluginsManager(StaticData[Plugin]): ) def block_plugin( - self, module: str, group_id: Optional[int] = None, block_type: str = "all" + self, module: str, group_id: Optional[str] = None, block_type: str = "all" ): """ 说明: @@ -89,7 +91,7 @@ class PluginsManager(StaticData[Plugin]): """ self._set_plugin_status(module, "block", group_id, block_type) - def unblock_plugin(self, module: str, group_id: Optional[int] = None): + def unblock_plugin(self, module: str, group_id: Optional[str] = None): """ 说明: 解锁插件 @@ -124,7 +126,7 @@ class PluginsManager(StaticData[Plugin]): return self._data[module].block_type @init_plugin - def get_plugin_error_status(self, module: str) -> bool: + def get_plugin_error_status(self, module: str) -> Optional[bool]: """ 说明: 插件是否成功加载 @@ -153,9 +155,9 @@ class PluginsManager(StaticData[Plugin]): if module: if group_id: if status == "block": - group_manager.block_plugin(f"{module}:super", int(group_id)) + group_manager.block_plugin(f"{module}:super", group_id) else: - group_manager.unblock_plugin(f"{module}:super", int(group_id)) + group_manager.unblock_plugin(f"{module}:super", group_id) else: if status == "block": self._data[module].status = False