mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2024-12-16 13:40:53 +08:00
102 lines
4.1 KiB
Python
102 lines
4.1 KiB
Python
|
from functools import cmp_to_key
|
|||
|
|
|||
|
from nonebot import CommandSession, on_command
|
|||
|
from nonebot import permission as perm
|
|||
|
from nonebot.argparse import ArgumentParser
|
|||
|
|
|||
|
from hoshino import Service, priv, util
|
|||
|
|
|||
|
PRIV_TIP = f'群主={priv.OWNER} 群管={priv.ADMIN} 群员={priv.NORMAL} bot维护组={priv.SUPERUSER}'
|
|||
|
|
|||
|
@on_command('lssv', aliases=('服务列表', '功能列表'), permission=perm.GROUP_ADMIN, only_to_me=False, shell_like=True)
|
|||
|
async def lssv(session: CommandSession):
|
|||
|
parser = ArgumentParser(session=session)
|
|||
|
parser.add_argument('-a', '--all', action='store_true')
|
|||
|
parser.add_argument('-H', '--hidden', action='store_true')
|
|||
|
parser.add_argument('-g', '--group', type=int, default=0)
|
|||
|
args = parser.parse_args(session.argv)
|
|||
|
|
|||
|
verbose_all = args.all
|
|||
|
only_hidden = args.hidden
|
|||
|
if session.ctx['user_id'] in session.bot.config.SUPERUSERS:
|
|||
|
gid = args.group or session.ctx.get('group_id')
|
|||
|
if not gid:
|
|||
|
session.finish('Usage: -g|--group <group_id> [-a|--all]')
|
|||
|
else:
|
|||
|
gid = session.ctx['group_id']
|
|||
|
|
|||
|
msg = [f"群{gid}服务一览:"]
|
|||
|
svs = Service.get_loaded_services().values()
|
|||
|
svs = map(lambda sv: (sv, sv.check_enabled(gid)), svs)
|
|||
|
key = cmp_to_key(lambda x, y: (y[1] - x[1]) or (-1 if x[0].name < y[0].name else 1 if x[0].name > y[0].name else 0))
|
|||
|
svs = sorted(svs, key=key)
|
|||
|
for sv, on in svs:
|
|||
|
if verbose_all or (sv.visible ^ only_hidden):
|
|||
|
x = '○' if on else '×'
|
|||
|
msg.append(f"|{x}| {sv.name}")
|
|||
|
await session.send('\n'.join(msg))
|
|||
|
|
|||
|
|
|||
|
@on_command('#enable', aliases=('启用', '开启', '打开'), permission=perm.GROUP, only_to_me=False)
|
|||
|
async def enable_service(session: CommandSession):
|
|||
|
await switch_service(session, turn_on=True)
|
|||
|
|
|||
|
@on_command('#disable', aliases=('禁用', '关闭'), permission=perm.GROUP, only_to_me=False)
|
|||
|
async def disable_service(session: CommandSession):
|
|||
|
await switch_service(session, turn_on=False)
|
|||
|
|
|||
|
async def switch_service(session: CommandSession, turn_on: bool):
|
|||
|
action_tip = '启用' if turn_on else '禁用'
|
|||
|
if session.ctx['message_type'] == 'group':
|
|||
|
names = session.current_arg_text.split()
|
|||
|
if not names:
|
|||
|
session.finish(f"空格后接要{action_tip}的服务名", at_sender=True)
|
|||
|
group_id = session.ctx['group_id']
|
|||
|
svs = Service.get_loaded_services()
|
|||
|
succ, notfound = [], []
|
|||
|
for name in names:
|
|||
|
if name in svs:
|
|||
|
sv = svs[name]
|
|||
|
u_priv = priv.get_user_priv(session.ctx)
|
|||
|
if u_priv >= sv.manage_priv:
|
|||
|
sv.set_enable(group_id) if turn_on else sv.set_disable(group_id)
|
|||
|
succ.append(name)
|
|||
|
else:
|
|||
|
try:
|
|||
|
await session.send(f'权限不足!{action_tip}{name}需要:{sv.manage_priv},您的:{u_priv}\n{PRIV_TIP}', at_sender=True)
|
|||
|
except:
|
|||
|
pass
|
|||
|
else:
|
|||
|
notfound.append(util.filt_message(name))
|
|||
|
msg = []
|
|||
|
if succ:
|
|||
|
msg.append(f'已{action_tip}服务:' + ', '.join(succ))
|
|||
|
if notfound:
|
|||
|
msg.append('未找到服务:' + ', '.join(notfound))
|
|||
|
if msg:
|
|||
|
session.finish('\n'.join(msg), at_sender=True)
|
|||
|
|
|||
|
else:
|
|||
|
if session.ctx['user_id'] not in session.bot.config.SUPERUSERS:
|
|||
|
return
|
|||
|
args = session.current_arg_text.split()
|
|||
|
if len(args) < 2:
|
|||
|
session.finish('Usage: <service_name> <group_id1> [<group_id2>, ...]')
|
|||
|
name, *group_ids = args
|
|||
|
svs = Service.get_loaded_services()
|
|||
|
if name not in svs:
|
|||
|
session.finish(f'未找到服务:{name}')
|
|||
|
sv = svs[name]
|
|||
|
succ = []
|
|||
|
for gid in group_ids:
|
|||
|
try:
|
|||
|
gid = int(gid)
|
|||
|
sv.set_enable(gid) if turn_on else sv.set_disable(gid)
|
|||
|
succ.append(gid)
|
|||
|
except:
|
|||
|
try:
|
|||
|
await session.send(f'非法群号:{gid}')
|
|||
|
except:
|
|||
|
pass
|
|||
|
session.finish(f'服务{name}已于{len(succ)}个群内{action_tip}:{succ}')
|