From 82902e0cdebf603e509c0bfcac12dcac329ef4ce Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Sat, 21 May 2022 22:40:05 +0800 Subject: [PATCH] update invite_manager --- README.md | 1 + .../admin_bot_manage/_data_source.py | 6 ++--- .../update_group_member_info.py | 1 + basic_plugins/group_handle/__init__.py | 22 +++++++++++++--- basic_plugins/help/data_source.py | 3 +++ basic_plugins/invite_manager/__init__.py | 4 +-- basic_plugins/shop/shop_handle/data_source.py | 1 + models/level_user.py | 25 +++++++++++-------- 8 files changed, 44 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index a32bcaed..8fc9b103 100644 --- a/README.md +++ b/README.md @@ -253,6 +253,7 @@ __Docker 最新版本由 [Sakuracio](https://github.com/Sakuracio) 提供__ * 优化刷屏显示设置禁言时长显示,并改为分钟 * 修复了多连开箱无法指定武器箱 * 修复识番链接无法正确获取 +* 新增真寻入群时即刻刷新权限 ### 2022/5/19 diff --git a/basic_plugins/admin_bot_manage/_data_source.py b/basic_plugins/admin_bot_manage/_data_source.py index f2fb183c..5d01cbcd 100644 --- a/basic_plugins/admin_bot_manage/_data_source.py +++ b/basic_plugins/admin_bot_manage/_data_source.py @@ -232,10 +232,7 @@ async def update_member_info(group_id: int, remind_superuser: bool = False) -> b _exist_member_list = [] # try: for user_info in _group_user_list: - if user_info["card"] == "": - nickname = user_info["nickname"] - else: - nickname = user_info["card"] + nickname = user_info["card"] or user_info["nickname"] async with db.transaction(): # 更新权限 if ( @@ -321,3 +318,4 @@ def set_group_bot_status(group_id: int, status: bool) -> str: # for x in group_manager.get_task_data(): # group_manager.close_group_task(group_id, x) return "那我先睡觉了..." + diff --git a/basic_plugins/admin_bot_manage/update_group_member_info.py b/basic_plugins/admin_bot_manage/update_group_member_info.py index b5a71c94..a00bd8a8 100755 --- a/basic_plugins/admin_bot_manage/update_group_member_info.py +++ b/basic_plugins/admin_bot_manage/update_group_member_info.py @@ -2,6 +2,7 @@ from nonebot import on_command, on_notice from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, GROUP, GroupIncreaseNoticeEvent from ._data_source import update_member_info + __zx_plugin_name__ = "更新群组成员列表 [Admin]" __plugin_usage__ = """ usage: diff --git a/basic_plugins/group_handle/__init__.py b/basic_plugins/group_handle/__init__.py index da3dd75c..61f8b252 100755 --- a/basic_plugins/group_handle/__init__.py +++ b/basic_plugins/group_handle/__init__.py @@ -1,5 +1,6 @@ from nonebot import on_notice, on_request from configs.path_config import IMAGE_PATH, DATA_PATH +from models.level_user import LevelUser from utils.message_builder import image from models.group_member_info import GroupInfoUser from datetime import datetime @@ -96,6 +97,23 @@ async def _(bot: Bot, event: GroupIncreaseNoticeEvent): for plugin in data.keys(): if not data[plugin]["default_status"]: group_manager.block_plugin(plugin, event.group_id) + # 即刻刷新权限 + for user_info in await bot.get_group_member_list(group_id=event.group_id): + if user_info["role"] in [ + "owner", + "admin", + ] and not await LevelUser.is_group_flag( + user_info["user_id"], event.group_id + ): + await LevelUser.set_level( + user_info["user_id"], + user_info["group_id"], + Config.get_config("admin_bot_manage", "ADMIN_DEFAULT_AUTH"), + ) + if str(user_info["user_id"]) in bot.config.superusers: + await LevelUser.set_level( + user_info["user_id"], user_info["group_id"], 9 + ) else: join_time = datetime.now() user_info = await bot.get_group_member_info( @@ -128,9 +146,7 @@ async def _(bot: Bot, event: GroupIncreaseNoticeEvent): msg = msg.replace("[at]", "") at_flag = True if (DATA_PATH / "custom_welcome_msg" / f"{event.group_id}.jpg").exists(): - img = image( - DATA_PATH / "custom_welcome_msg" / f"{event.group_id}.jpg" - ) + img = image(DATA_PATH / "custom_welcome_msg" / f"{event.group_id}.jpg") if msg or img: msg = msg.strip() + img msg = "\n" + msg if at_flag else msg diff --git a/basic_plugins/help/data_source.py b/basic_plugins/help/data_source.py index 923de5a2..2e4b867c 100755 --- a/basic_plugins/help/data_source.py +++ b/basic_plugins/help/data_source.py @@ -56,6 +56,9 @@ def _create_help_img( for matcher in _matchers: plugin_name = None _plugin = nonebot.plugin.get_plugin(matcher.plugin_name) + if not _plugin: + logger.warning(f"获取 功能:{matcher.plugin_name} 失败...") + continue _module = _plugin.module try: plugin_name = _module.__getattribute__("__zx_plugin_name__") diff --git a/basic_plugins/invite_manager/__init__.py b/basic_plugins/invite_manager/__init__.py index e38f0217..9aaaacdd 100755 --- a/basic_plugins/invite_manager/__init__.py +++ b/basic_plugins/invite_manager/__init__.py @@ -1,4 +1,4 @@ -from nonebot import on_request, on_command +from nonebot import on_request, on_message from nonebot.adapters.onebot.v11 import ( Bot, FriendRequestEvent, @@ -25,7 +25,7 @@ __plugin_configs__ = { friend_req = on_request(priority=5, block=True) group_req = on_request(priority=5, block=True) -x = on_command("[[test_invite_manager]]", priority=999, block=False) +x = on_message(priority=999, block=False) exists_data = {"private": {}, "group": {}} diff --git a/basic_plugins/shop/shop_handle/data_source.py b/basic_plugins/shop/shop_handle/data_source.py index f5153650..9d911b61 100644 --- a/basic_plugins/shop/shop_handle/data_source.py +++ b/basic_plugins/shop/shop_handle/data_source.py @@ -13,6 +13,7 @@ import time driver: Driver = nonebot.get_driver() + use = require("use") diff --git a/models/level_user.py b/models/level_user.py index 720c55cd..12b6a03c 100755 --- a/models/level_user.py +++ b/models/level_user.py @@ -1,3 +1,5 @@ +from asyncpg import UniqueViolationError + from services.db_context import db @@ -44,16 +46,19 @@ class LevelUser(db.Model): query = cls.query.where((cls.user_qq == user_qq) & (cls.group_id == group_id)) query = query.with_for_update() user = await query.gino.first() - if user is None: - await cls.create( - user_qq=user_qq, - group_id=group_id, - user_level=level, - group_flag=group_flag, - ) - return True - else: - await user.update(user_level=level, group_flag=group_flag).apply() + try: + if not user: + await cls.create( + user_qq=user_qq, + group_id=group_id, + user_level=level, + group_flag=group_flag, + ) + return True + else: + await user.update(user_level=level, group_flag=group_flag).apply() + return False + except UniqueViolationError: return False @classmethod