From 3b7f82c7a6641e06e3de1266d0acdb6c3e342eab Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Mon, 3 Mar 2025 10:15:53 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E4=BC=98=E5=8C=96=E6=88=91=E7=9A=84?= =?UTF-8?q?=E9=81=93=E5=85=B7=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/welcome_message/data_source.py | 8 ++- zhenxun/builtin_plugins/help_help.py | 40 ++++++------ zhenxun/builtin_plugins/shop/_data_source.py | 62 ++++++++++--------- zhenxun/utils/rules.py | 20 ++++++ 4 files changed, 81 insertions(+), 49 deletions(-) diff --git a/zhenxun/builtin_plugins/admin/welcome_message/data_source.py b/zhenxun/builtin_plugins/admin/welcome_message/data_source.py index 6910727a..2ccb33ee 100644 --- a/zhenxun/builtin_plugins/admin/welcome_message/data_source.py +++ b/zhenxun/builtin_plugins/admin/welcome_message/data_source.py @@ -22,8 +22,11 @@ BASE_PATH.mkdir(parents=True, exist_ok=True) driver = nonebot.get_driver() -old_file = DATA_PATH / "custom_welcome_msg" / "custom_welcome_msg.json" -if old_file.exists(): +def __migrate(): + """首次数据迁移""" + old_file = DATA_PATH / "custom_welcome_msg" / "custom_welcome_msg.json" + if not old_file.exists(): + return try: old_data: dict[str, str] = json.load(old_file.open(encoding="utf8")) for group_id, message in old_data.items(): @@ -53,6 +56,7 @@ def migrate(path: Path): 参数: path: 路径 """ + __migrate() text_file = path / "text.json" if not text_file.exists(): return diff --git a/zhenxun/builtin_plugins/help_help.py b/zhenxun/builtin_plugins/help_help.py index d6706bcb..fec04a8d 100644 --- a/zhenxun/builtin_plugins/help_help.py +++ b/zhenxun/builtin_plugins/help_help.py @@ -54,27 +54,29 @@ _path = IMAGE_PATH / "_base" / "laugh" @_matcher.handle() async def _(matcher: Matcher, message: UniMsg, session: EventSession): text = message.extract_plain_text().strip() - if plugin := await PluginInfo.get_or_none( + plugin = await PluginInfo.get_or_none( name=text, load_status=True, plugin_type=PluginType.NORMAL, block_type__isnull=True, status=True, - ): - image = None - if _path.exists(): - if files := os.listdir(_path): - image = _path / random.choice(files) - message_list = [] - if image: - message_list.append(image) - message_list.append( - "桀桀桀,预判到会有 '笨蛋' 把功能名称当命令用,特地前来嘲笑!" - f"但还是好心来帮帮你啦!\n请at我发送 '帮助{plugin.name}' 或者" - f" '帮助{plugin.id}' 来获取该功能帮助!" - ) - logger.info( - "检测到功能名称当命令使用,已发送帮助信息", "功能帮助", session=session - ) - await MessageUtils.build_message(message_list).send(reply_to=True) - matcher.stop_propagation() + ) + + if not plugin: + return + + image = None + if _path.exists(): + if files := os.listdir(_path): + image = _path / random.choice(files) + message_list = [] + if image: + message_list.append(image) + message_list.append( + "桀桀桀,预判到会有 '笨蛋' 把功能名称当命令用,特地前来嘲笑!" + f"但还是好心来帮帮你啦!\n请at我发送 '帮助{plugin.name}' 或者" + f" '帮助{plugin.id}' 来获取该功能帮助!" + ) + logger.info("检测到功能名称当命令使用,已发送帮助信息", "功能帮助", session=session) + await MessageUtils.build_message(message_list).send(reply_to=True) + matcher.stop_propagation() diff --git a/zhenxun/builtin_plugins/shop/_data_source.py b/zhenxun/builtin_plugins/shop/_data_source.py index 820bb037..2160238d 100644 --- a/zhenxun/builtin_plugins/shop/_data_source.py +++ b/zhenxun/builtin_plugins/shop/_data_source.py @@ -478,36 +478,42 @@ class ShopManage: user = await UserConsole.get_user(user_id, platform) if not user.props: return None - is_change = False - for uuid in list(user.props.keys()): - if user.props[uuid] <= 0: - is_change = True - del user.props[uuid] - if is_change: - await user.save(update_fields=["props"]) - result = await GoodsInfo.filter(uuid__in=user.props.keys()).all() - data_list = [] - uuid2goods = {item.uuid: item for item in result} - column_name = ["-", "使用ID", "名称", "数量", "简介"] - for i, p in enumerate(user.props): - if prop := uuid2goods.get(p): - icon = "" - if prop.icon: - icon_path = ICON_PATH / prop.icon - if icon_path.exists(): - icon = (icon_path, 33, 33) - data_list.append( - [ - icon, - i, - prop.goods_name, - user.props[p], - prop.goods_description, - ] - ) + user.props = {uuid: count for uuid, count in user.props.items() if count > 0} + + goods_list = await GoodsInfo.filter(uuid__in=user.props.keys()).all() + goods_by_uuid = {item.uuid: item for item in goods_list} + + table_rows = [] + for i, prop_uuid in enumerate(user.props): + prop = goods_by_uuid.get(prop_uuid) + if not prop: + continue + + icon = "" + if prop.icon: + icon_path = ICON_PATH / prop.icon + icon = (icon_path, 33, 33) if icon_path.exists() else "" + + table_rows.append( + [ + icon, + i, + prop.goods_name, + user.props[prop_uuid], + prop.goods_description, + ] + ) + + if not table_rows: + return None + + column_name = ["-", "使用ID", "名称", "数量", "简介"] return await ImageTemplate.table_page( - f"{name}的道具仓库", "", column_name, data_list + f"{name}的道具仓库", + "通过 使用道具[ID/名称] 令道具生效", + column_name, + table_rows, ) @classmethod diff --git a/zhenxun/utils/rules.py b/zhenxun/utils/rules.py index d439e3fe..9f2a4ab6 100644 --- a/zhenxun/utils/rules.py +++ b/zhenxun/utils/rules.py @@ -5,6 +5,8 @@ from nonebot_plugin_session import EventSession from nonebot_plugin_uninfo import Uninfo from zhenxun.configs.config import Config +from zhenxun.models.ban_console import BanConsole +from zhenxun.models.group_console import GroupConsole from zhenxun.models.level_user import LevelUser from zhenxun.utils.platform import PlatformUtils @@ -89,3 +91,21 @@ def notice_rule(event_type: type | list[type]) -> Rule: return False return Rule(_rule) + + +def is_allowed_call() -> Rule: + """是否允许调用插件""" + + async def _rule(session: Uninfo) -> bool: + group_id = session.group.id if session.group else None + if await BanConsole.is_ban(session.user.id, group_id): + return False + if group_id: + if await BanConsole.is_ban(None, group_id): + return False + if g := await GroupConsole.get_group(group_id): + if g.level < 0: + return False + return True + + return Rule(_rule)