-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path__init__.py
More file actions
205 lines (172 loc) · 6.06 KB
/
Copy path__init__.py
File metadata and controls
205 lines (172 loc) · 6.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
from nonebot import require
from nonebot.rule import to_me
require("nonebot_plugin_saa")
require("nonebot_plugin_alconna")
from nonebot_plugin_saa import Text
from nonebot_plugin_alconna import (
Args,
Query,
Option,
Alconna,
Subcommand,
CommandMeta,
namespace,
on_alconna,
)
from magic.log import logger
from magic.hook import on_startup
from magic.utils.api import random_text
from magic.utils.annotated import UserInfo
from magic.permission import get_admin_list, get_helper_list
from .utils import check_permission
authorize: str = ""
__usage__ = """
USER
查看 Bot管理员 列表:/admin -l
BOT_ADMIN
初始化权限:/admin -i <token>
增加管理员:/admin add -a <user_id>
增加协助者:/admin add -h <user_id>
取消管理员:/admin remove -a <user_id>
取消协助者:/admin remove -h <user_id>
"""
with namespace("Magic") as ns:
ns.builtin_option_name["help"] = {"--h", "--help"}
admin = on_alconna(
Alconna(
"admin",
Option("-l|--list", help_text="查看 Bot管理员 列表"),
Option("-i|--init", Args["token", str], help_text="初始化权限"),
Subcommand(
"add",
Option("-a|--admin", Args["target?", int], help_text="增加 Bot管理员"),
Option("-h|--helper", Args["target?", int], help_text="增加 Bot协助者"),
),
Subcommand(
"remove",
Option("-a|--admin", Args["target?", int], help_text="取消 Bot管理员"),
Option("-h|--helper", Args["target?", int], help_text="取消 Bot协助者"),
),
meta=CommandMeta(
description="Bot管理员相关指令",
usage=__usage__,
example="/admin -l",
compact=True,
),
),
priority=5,
block=True,
rule=to_me(),
)
admin.shortcut(
r"(添加|增加)管理员\s+(\d+)",
command="admin add --admin",
arguments=["{1}"],
fuzzy=True,
prefix=True,
)
admin.shortcut(
r"(添加|增加)协助者\s+(\d+)",
command="admin add --helper",
arguments=["{1}"],
fuzzy=True,
prefix=True,
)
admin.shortcut(
r"(移除|取消)管理员\s+(\d+)",
command="admin remove --admin",
arguments=["{1}"],
fuzzy=True,
prefix=True,
)
admin.shortcut(
r"(移除|取消)协助者\s+(\d+)",
command="admin remove --helper",
arguments=["{1}"],
fuzzy=True,
prefix=True,
)
@admin.assign("list")
async def list():
admin_list = await get_admin_list()
helper_list = await get_helper_list()
await Text(f"Bot管理员列表:\n{admin_list}\nBot协助者列表:\n{helper_list}").send(
at_sender=True
)
await admin.finish()
@admin.assign("init")
async def init(user: UserInfo, token: str):
global authorize
if token == authorize:
await user.filter(uid=user.uid).update(permission="ADMIN")
await Text("已成功授权 Bot管理员 权限").send(at_sender=True)
else:
await Text("token不对呢,返回控制台检查一下吧").send(at_sender=True)
await admin.finish()
@admin.assign("add")
async def add(
user: UserInfo,
admin_target: Query[int] = Query("add.admin.target"),
helper_target: Query[int] = Query("add.helper.target"),
):
if not await check_permission(user.uid, "ADMIN"):
await Text("权限不足,需 Bot管理员 权限").send(at_sender=True)
await admin.finish()
if admin_target.available:
if await user.filter(bind__uid=str(admin_target.result)).exists():
await user.filter(uid=admin_target.result).update(permission="ADMIN")
await Text(f"已成功增加 Bot管理员:{admin_target.result}").send(
at_sender=True
)
elif admin_target.result == 0:
...
else:
await Text(f"用户 {admin_target.result} 不存在").send(at_sender=True)
if helper_target.available:
if await user.filter(bind__uid=str(admin_target.result)).exists():
await user.filter(uid=helper_target.result).update(permission="HELPER")
await Text(f"已成功增加 Bot协助者:{helper_target.result}").send(
at_sender=True
)
elif helper_target.result == 0:
...
else:
await Text(f"用户 {helper_target.result} 不存在").send(at_sender=True)
await admin.finish()
@admin.assign("remove")
async def remove(
user: UserInfo,
admin_target: Query[int] = Query("remove.admin.target"),
helper_target: Query[int] = Query("remove.helper.target"),
):
if not await check_permission(user.uid, "ADMIN"):
await Text("权限不足,需 Bot管理员 权限").send(at_sender=True)
await admin.finish()
if admin_target.available:
if await user.filter(bind__uid=str(admin_target.result)).exists():
await user.filter(uid=admin_target.result).update(permission="NORMAL")
await Text(f"已取消 {admin_target.result} 的 Bot管理员 身份").send(
at_sender=True
)
elif admin_target.result == 0:
...
else:
await Text(f"用户 {admin_target.result} 不存在").send(at_sender=True)
if helper_target.available:
if await user.filter(bind__uid=str(admin_target.result)).exists():
await user.filter(uid=helper_target.result).update(permission="NORMAL")
await Text(f"已取消 {helper_target.result} 的 Bot协助者 身份").send(
at_sender=True
)
elif helper_target.result == 0:
...
else:
await Text(f"用户 {helper_target.result} 不存在").send(at_sender=True)
await admin.finish()
@on_startup
async def atuhorize_admin():
if not await get_admin_list():
global authorize
authorize = random_text(20)
logger.info(f"已自动生成授权token:{authorize}")
logger.info(f"在任意平台发送 /admin -i {authorize} 即可获取 Bot管理员 权限")