From 42a250ab98108fe793c6672171bb1afffd623cf8 Mon Sep 17 00:00:00 2001 From: CMHopeSunshine <277073121@qq.com> Date: Mon, 14 Nov 2022 19:03:12 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E7=AE=A1=E7=90=86=E5=99=A8=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LittlePaimon/config/plugin/manage.py | 40 ++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/LittlePaimon/config/plugin/manage.py b/LittlePaimon/config/plugin/manage.py index 50f5b32..cf49f67 100644 --- a/LittlePaimon/config/plugin/manage.py +++ b/LittlePaimon/config/plugin/manage.py @@ -49,13 +49,37 @@ class PluginManager: if plugin.name not in HIDDEN_PLUGINS: # 将所有PluginPermission相同的,只保留一个 if group_list: - await asyncio.gather( - *[PluginPermission.update_or_create(name=plugin.name, session_id=group['group_id'], - session_type='group') for group in group_list]) + for group in group_list: + count = await PluginPermission.filter( + name=plugin.name, session_id=group['group_id'], session_type='group' + ).count() + if count > 1: + first = await PluginPermission.filter( + name=plugin.name, session_id=group['group_id'], session_type='group' + ).order_by('id').first() + await PluginPermission.filter( + name=plugin.name, session_id=group['group_id'], session_type='group' + ).delete() + await first.delete() + await asyncio.gather( + *[PluginPermission.update_or_create(name=plugin.name, session_id=group['group_id'], + session_type='group') for group in group_list]) if user_list: - await asyncio.gather( - *[PluginPermission.update_or_create(name=plugin.name, session_id=user['user_id'], - session_type='user') for user in user_list]) + for user in user_list: + count = await PluginPermission.filter( + name=plugin.name, session_id=user['user_id'], session_type='user' + ).count() + if count > 1: + first = await PluginPermission.filter( + name=plugin.name, session_id=user['user_id'], session_type='user' + ).order_by('id').first() + await PluginPermission.filter( + name=plugin.name, session_id=user['user_id'], session_type='user' + ).delete() + await first.delete() + await asyncio.gather( + *[PluginPermission.update_or_create(name=plugin.name, session_id=user['user_id'], + session_type='user') for user in user_list]) if plugin.name not in HIDDEN_PLUGINS: if plugin.name not in cls.plugins: if metadata := plugin.metadata: @@ -143,8 +167,8 @@ async def _(event: MessageEvent, matcher: Matcher): return # 权限检查 - perm = await PluginPermission.filter(name=matcher.plugin_name, session_id=session_id, - session_type=session_type).first() + perm = await PluginPermission.get_or_none(name=matcher.plugin_name, session_id=session_id, + session_type=session_type) if not perm: await PluginPermission.create(name=matcher.plugin_name, session_id=session_id, session_type=session_type) return