Skip to content

Commit 440d683

Browse files
重构插件 (#7)
* 重构插件 * Add pydantic dependency version 2.0.0 * Update Python version requirement in pyproject.toml
1 parent 1ecb147 commit 440d683

File tree

12 files changed

+133
-193
lines changed

12 files changed

+133
-193
lines changed

pyproject.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "nonebot_plugin_liteperm"
3-
version = "0.0.2"
3+
version = "0.1.0"
44
description = "基于权限节点/权限组/特殊权限的Nonebot权限管理插件。"
55
authors = [
66
{ name = "JohnRichard4096", email = "[email protected]" },
@@ -13,8 +13,9 @@ dependencies = [
1313
"typing-extensions>=4.13.2",
1414
"tomli>=2.2.1",
1515
"tomli-w>=1.2.0",
16+
"pydantic>=2.0.0",
1617
]
17-
requires-python = ">=3.10, <4.0"
18+
requires-python = ">=3.10, <3.14"
1819
readme = "README.md"
1920
license = { text = "GPL-3.0-or-later" }
2021
keywords = ['nonebot']

src/nonebot_plugin_liteperm/API/node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
__all__ = [
44
"nodelib",
5-
]
5+
]
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
11
from nonebot.plugin.on import CommandGroup
2-
from nonebot.rule import to_me
32

4-
command = CommandGroup(
5-
("lp", "LP", "LitePerm"), priority=10, block=True, rule=to_me(), prefix_aliases=True
6-
)
3+
command = CommandGroup(("lp"), priority=10, block=True, prefix_aliases=True)

src/nonebot_plugin_liteperm/commands/cmd_utils.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ async def parse_command(
1010
args_list = args.extract_plain_text().strip().split(maxsplit=5)
1111

1212
# 参数校验
13-
if len(args_list) < 2:
13+
if len(args_list) < 1:
1414
await matcher.finish("❌ 缺少ID")
15-
if len(args_list) < 4:
16-
await matcher.finish("❌ 参数不足,需要至少4个参数")
15+
if len(args_list) < 3:
16+
await matcher.finish("❌ 参数不足,需要至少3个参数")
1717

18-
user_id = args_list[1]
19-
action_type = args_list[2]
20-
operation = args_list[3]
21-
target = args_list[4] if len(args_list) >= 5 else ""
22-
value = args_list[5] if len(args_list) == 6 else ""
18+
id = args_list[0]
19+
action_type = args_list[1]
20+
operation = args_list[2]
21+
target = args_list[3] if len(args_list) >= 4 else ""
22+
value = args_list[4] if len(args_list) == 5 else ""
2323

24-
return user_id, action_type, operation, target, value
24+
return id, action_type, operation, target, value

src/nonebot_plugin_liteperm/commands/lp_chat_group.py

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
from typing import Any, override
1+
from typing import Any
22

33
from nonebot.adapters.onebot.v11 import MessageEvent
44
from nonebot.matcher import Matcher
55
from nonebot.params import Depends
6+
from typing_extensions import override
67

78
from ..API.admin import is_lp_admin
89
from ..command_manager import command
@@ -15,24 +16,24 @@
1516
class PermissionOperation(PermissionHandler):
1617
@override
1718
async def execute(
18-
self, group_id: str, operation: str, node: str, value: str
19+
self, id: str, operation: str, target: str, value: str
1920
) -> tuple[str, dict[str, Any]]:
20-
group_data = data_manager.get_group_data(group_id)
21+
group_data = data_manager.get_group_data(id)
2122
group_perm = Permissions(group_data.permissions)
2223
msg_str = ""
2324
match operation:
2425
case "del":
25-
group_perm.del_permission(node)
26-
msg_str = f"✅ 已删除权限节点 {node}"
26+
group_perm.del_permission(target)
27+
msg_str = f"✅ 已删除权限节点 {target}"
2728
case "set":
2829
if value.lower() not in ("true", "false"):
2930
return "❌ 值必须是 true/false", group_data.model_dump()
30-
group_perm.set_permission(node, value == "true", False)
31-
msg_str = f"✅ 已设置 {node} : {value}"
31+
group_perm.set_permission(target, value == "true", False)
32+
msg_str = f"✅ 已设置 {target} : {value}"
3233
case "check":
3334
msg_str = (
3435
"✅ 持有该权限"
35-
if group_perm.check_permission(node)
36+
if group_perm.check_permission(target)
3637
else "❌ 未持有该权限"
3738
)
3839
case "list":
@@ -45,23 +46,25 @@ async def execute(
4546
class ParentGroupHandler(PermissionHandler):
4647
@override
4748
async def execute(
48-
self, group_id: str, operation: str, perm_group: str, _: str
49+
self, id: str, operation: str, target: str, value: str
4950
) -> tuple[str, dict[str, Any]]:
50-
group_data = data_manager.get_group_data(group_id)
51-
perm_perm_group_data = data_manager.get_permission_group_data(perm_group, False)
52-
if perm_perm_group_data is None:
51+
group_data = data_manager.get_group_data(id)
52+
perm_target_data = data_manager.get_permission_group_data(target, False)
53+
if perm_target_data is None:
5354
return "❌ 权限组不存在", group_data.model_dump()
5455
string_msg = ""
55-
if not perm_perm_group_data:
56-
string_msg = f"❌ 权限组 {perm_group} 不存在"
56+
if not perm_target_data:
57+
string_msg = f"❌ 权限组 {target} 不存在"
5758

5859
match operation:
5960
case "add" | "del":
60-
self._modify_inheritance(group_data, perm_perm_group_data, operation)
61-
string_msg = f"✅ 已{'添加' if operation == 'add' else '移除'}继承组 {perm_group}"
61+
self._modify_inheritance(group_data, perm_target_data, operation)
62+
string_msg = (
63+
f"✅ 已{'添加' if operation == 'add' else '移除'}继承组 {target}"
64+
)
6265
case "set":
63-
group_data.permissions = perm_perm_group_data.permissions.copy()
64-
string_msg = f"✅ 已覆盖为组 {perm_group} 的权限"
66+
group_data.permissions = perm_target_data.permissions.copy()
67+
string_msg = f"✅ 已覆盖为组 {target} 的权限"
6568
case _:
6669
string_msg = "❌ 不支持的操作类型"
6770
return string_msg, group_data.model_dump()
@@ -85,9 +88,9 @@ def _modify_inheritance(
8588
class PermissionGroupHandler(PermissionHandler):
8689
@override
8790
async def execute(
88-
self, group_id: str, operation: str, target: str, value: str
91+
self, id: str, operation: str, target: str, value: str
8992
) -> tuple[str, dict[str, Any]]:
90-
group_data = data_manager.get_group_data(group_id)
93+
group_data = data_manager.get_group_data(id)
9194
msg_str = ""
9295
if operation == "add":
9396
if target not in group_data.permission_groups:
@@ -117,21 +120,24 @@ def get_handler(
117120

118121

119122
# 运行进入点
120-
@command.command("group", permission=is_lp_admin).handle()
123+
@command.command(
124+
"chat_group",
125+
permission=is_lp_admin,
126+
).handle()
121127
async def lp_group(
122128
event: MessageEvent,
123129
matcher: Matcher,
124130
params: tuple[str, str, str, str, str] = Depends(parse_command),
125131
):
126-
group_id, action_type, operation, target, value = params
132+
id, action_type, operation, target, value = params
127133
handler = get_handler(action_type)
128134
if handler is None:
129135
await matcher.finish("❌ 未知操作类型")
130136
try:
131-
result, data = await handler.execute(group_id, operation, target, value)
137+
result, data = await handler.execute(id, operation, target, value)
132138
except ValueError as e:
133139
result = f"❌ 操作失败:{e!s}"
134-
finally:
135-
data_manager.save_group_data(group_id, data)
140+
else:
141+
data_manager.save_group_data(id, data)
136142

137143
await matcher.finish(result)

src/nonebot_plugin_liteperm/commands/lp_perm_group.py

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
from typing import Any, override
1+
from typing import Any
22

33
from nonebot.adapters.onebot.v11 import MessageEvent
44
from nonebot.matcher import Matcher
55
from nonebot.params import Depends
6+
from typing_extensions import override
67

78
from ..API.admin import is_lp_admin
89
from ..command_manager import command
@@ -15,26 +16,26 @@
1516
class PermissionOperation(PermissionHandler):
1617
@override
1718
async def execute(
18-
self, group: str, operation: str, node: str, value: str
19+
self, id: str, operation: str, target: str, value: str
1920
) -> tuple[str, dict[str, Any]]:
20-
permission_group_data = data_manager.get_permission_group_data(group, new=True)
21+
permission_group_data = data_manager.get_permission_group_data(id, new=True)
2122
if permission_group_data is None:
22-
return f"❌ 权限组{group}不存在", {}
23+
return f"❌ 权限组{id}不存在", {}
2324
user_perm = Permissions(permission_group_data.permissions)
2425
msg_str = ""
2526
match operation:
2627
case "del":
27-
user_perm.del_permission(node)
28-
msg_str = f"✅ 已删除权限节点 {node}"
28+
user_perm.del_permission(target)
29+
msg_str = f"✅ 已删除权限节点 {target}"
2930
case "set":
3031
if value.lower() not in ("true", "false"):
3132
return "❌ 值必须是 true/false", permission_group_data.model_dump()
32-
user_perm.set_permission(node, value == "true", False)
33-
msg_str = f"✅ 已设置 {node} : {value}"
33+
user_perm.set_permission(target, value == "true", False)
34+
msg_str = f"✅ 已设置 {target} : {value}"
3435
case "check":
3536
msg_str = (
3637
"✅ 持有该权限"
37-
if user_perm.check_permission(node)
38+
if user_perm.check_permission(target)
3839
else "❌ 未持有该权限"
3940
)
4041
case "list":
@@ -47,10 +48,10 @@ async def execute(
4748
class ParentGroupHandler(PermissionHandler):
4849
@override
4950
async def execute(
50-
self, group: str, operation: str, target_group: str, _: str
51+
self, id: str, operation: str, target: str, value: str
5152
) -> tuple[str, dict[str, Any]]:
52-
permission_group_data = data_manager.get_permission_group_data(group)
53-
perm_group_data = data_manager.get_permission_group_data(target_group, False)
53+
permission_group_data = data_manager.get_permission_group_data(id)
54+
perm_group_data = data_manager.get_permission_group_data(target, False)
5455
if perm_group_data is None:
5556
return "❌ 权限组不存在", {}
5657
string_msg = "❌ 操作失败"
@@ -62,10 +63,12 @@ async def execute(
6263
self._modify_inheritance(
6364
permission_group_data, perm_group_data, operation
6465
)
65-
string_msg = f"✅ 已{'添加' if operation == 'add' else '移除'}继承组 {target_group}"
66+
string_msg = (
67+
f"✅ 已{'添加' if operation == 'add' else '移除'}继承组 {target}"
68+
)
6669
case "set":
6770
permission_group_data.permissions = perm_group_data.permissions.copy()
68-
string_msg = f"✅ 已覆盖为组 {target_group} 的权限"
71+
string_msg = f"✅ 已覆盖为组 {target} 的权限"
6972
case _:
7073
string_msg = "❌ 不支持的操作类型"
7174
return string_msg, permission_group_data.model_dump()
@@ -85,42 +88,48 @@ def _modify_inheritance(
8588
elif operation == "del" and user_perms.check_permission(node):
8689
user_perms.del_permission(node)
8790

91+
8892
class PermissionGroupHandler(PermissionHandler):
8993
async def execute(
90-
self, group:str, operation: str, *_
94+
self, id: str, operation: str, target: str, value: str
9195
) -> tuple[str, dict[str, Any]]:
9296
if operation == "create":
93-
if data_manager.get_permission_group_data(group) is not None:
97+
if data_manager.get_permission_group_data(id) is not None:
9498
return "❌ 权限组已存在", {}
95-
data_manager.get_permission_group_data(group, True)
99+
data_manager.get_permission_group_data(id, True)
96100
return "✅ 权限组创建成功", {}
97101
elif operation == "remove":
98-
if data_manager.get_permission_group_data(group) is None:
102+
if data_manager.get_permission_group_data(id) is None:
99103
return "❌ 权限组不存在", {}
100-
data_manager.remove_permission_group(group)
104+
data_manager.remove_permission_group(id)
101105
return "✅ 权限组删除成功", {}
102106
return "❌ 操作错误", {}
103107

108+
104109
def get_handler(
105110
action_type: str,
106111
) -> PermissionHandler | None:
107112
handlers = {
108113
"permission": PermissionOperation(),
109114
"parent": ParentGroupHandler(),
110-
"to":PermissionGroupHandler(),
115+
"to": PermissionGroupHandler(),
111116
}
112117
return handlers.get(action_type)
113118

114119

115120
# 运行进入点
116-
@command.command("user", permission=is_lp_admin).handle()
121+
@command.command(
122+
"perm_group",
123+
permission=is_lp_admin,
124+
).handle()
117125
async def lp_user(
118126
event: MessageEvent,
119127
matcher: Matcher,
120128
params: tuple[str, str, str, str, str] = Depends(parse_command),
121129
):
122130
user_id, action_type, operation, target, value = params
123131
handler = get_handler(action_type)
132+
data = None
124133
if handler is None:
125134
await matcher.finish("❌ 未知操作类型")
126135
else:

0 commit comments

Comments
 (0)