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