Пример #1
0
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(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}')
Пример #2
0
async def show_all_services():
    svs = Service.get_loaded_services()
    sv_names = list(svs)
    return await render_template('by_service.html',
                                 items=sv_names,
                                 public_address=public_address,
                                 port=port)
Пример #3
0
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))
Пример #4
0
async def send_help_xml(bot, ev: CQEvent):
    name = ev.message.extract_plain_text().strip()
    bundles = Service.get_bundles()
    svs = Service.get_loaded_services()
    info = Service.get_help()
    if not name:
        await bot.send(ev, TOP_MANUAL)
    elif name in svs:
        msg = get_service_help(name, info[name])
        data ={
            "type": "node",
            "data": {
                "name": '小冰',
                "uin": '2854196306',
                "content": msg
            }
            }
        await bot.send_group_forward_msg(group_id=ev.group_id, messages=data)
    elif name in bundles:
        msg = gen_bundle_manual(name, bundles[name], ev.group_id)
        data ={
            "type": "node",
            "data": {
                "name": '小冰',
                "uin": '2854196306',
                "content": msg
            }
            }
        await bot.send_group_forward_msg(group_id=ev.group_id, messages=data)
Пример #5
0
async def show_group_services(gid_str:str):
    gid = int(gid_str)
    svs = Service.get_loaded_services()
    conf = {}
    conf[gid_str] = {}
    for key in svs:
        conf[gid_str][key] = svs[key].check_enabled(gid)
    return await render_template('group_services.html',group_id=gid_str,conf=conf,public_address=public_address,port=port)
Пример #6
0
async def show_group_services(gid_str: str):
    user = {'name': 'name'}
    gid = int(gid_str)
    svs = Service.get_loaded_services()
    conf = {gid_str: {}}
    for key in svs:
        conf[gid_str][key] = svs[key].check_enabled(gid)
    return await render_template('group_services.html', title=f'群{gid_str}服务一览', article_title=f'群{gid_str}服务一览',
                                 user=user, group_id=gid_str, conf=conf)
Пример #7
0
async def ls_service(session: CommandSession, service_name: str):
    all_services = Service.get_loaded_services()
    if service_name in all_services:
        sv = all_services[service_name]
        on_g = '\n'.join(map(str, sv.enable_group))
        off_g = '\n'.join(map(str, sv.disable_group))
        default_ = 'enabled' if sv.enable_on_default else 'disabled'
        msg = f"服务{sv.name}:\n默认:{default_}\nuse_priv={sv.use_priv}\nmanage_priv={sv.manage_priv}\nvisible={sv.visible}\n启用群:\n{on_g}\n禁用群:\n{off_g}"
        session.finish(msg)
    else:
        session.finish(f'未找到服务{service_name}')
Пример #8
0
async def service_list():
    user = {'name': 'name'}
    svs = Service.get_loaded_services()
    sv_names = list(svs)
    return await render_template('service_list.html',
                                 title='按服务管理',
                                 article_title="按服务管理",
                                 items=sv_names,
                                 user=user,
                                 static_url_path=switcher.static_url_path,
                                 url_prefix=switcher.url_prefix)
Пример #9
0
async def show_service_groups(sv_name:str):
    svs = Service.get_loaded_services()
    groups = await get_groups()
    conf = {}
    for group in groups :
        gid = group['group_id']
        gid_str = str(gid)
        conf[gid_str] = {}
        if svs[sv_name].check_enabled(gid):
            conf[gid_str][sv_name] = True
        else:
            conf[gid_str][sv_name] = False
    return await render_template('service_groups.html',sv_name=sv_name,conf=conf,groups=groups,public_address=public_address,port=port)
Пример #10
0
async def send_help(bot, ev: CQEvent):
    name = ev.message.extract_plain_text().strip()
    bundles = Service.get_bundles()
    svs = Service.get_loaded_services()
    info = Service.get_help()
    if not name:
        await bot.send(ev, TOP_MANUAL)
    elif name in svs:
        msg = get_service_help(name, info[name])
        await bot.send(ev, msg)
    elif name in bundles:
        msg = gen_bundle_manual(name, bundles[name], ev.group_id)
        await bot.send(ev, msg)
Пример #11
0
async def send_help(bot, ev: CQEvent):
    gid = ev.group_id
    arg = ev.message.extract_plain_text().strip()
    bundles = Service.get_bundles()
    services = Service.get_loaded_services()
    if not arg:
        await bot.send(ev, TOP_MANUAL)
    elif arg in bundles:
        msg = gen_bundle_manual(arg, bundles[arg], gid)
        await bot.send(ev, msg)
    elif arg in services:
        s = services[arg]
        msg = gen_service_manual(s, gid)
        await bot.send(ev, msg)
Пример #12
0
async def show_service_groups(sv_name: str):
    user = {'name': 'name'}
    svs = Service.get_loaded_services()
    groups = await get_groups()
    conf = {}
    for group in groups:
        gid = group['group_id']
        gid_str = str(gid)
        conf[gid_str] = {}
        if svs[sv_name].check_enabled(gid):
            conf[gid_str][sv_name] = True
        else:
            conf[gid_str][sv_name] = False
    return await render_template('service_groups.html', title=f'服务 {sv_name} ', article_title=sv_name, sv_name=sv_name,
                                 conf=conf, groups=groups, user=user)
Пример #13
0
async def set_group():
    #接收前端传来的配置数据,数据格式{"<gid>":{'serviceA':True,'serviceB':False}}
    if request.method == 'POST':
        data = await request.get_data()
        conf = json.loads(data.decode())
        svs = Service.get_loaded_services()
        for k in conf:
            gid = int(k)
            for sv_name in conf[k]:
                if conf[k][sv_name]:
                    svs[sv_name].set_enable(gid)
                    svs[sv_name].logger.info(f'启用群 {gid} 服务 {sv_name} ')
                else:
                    svs[sv_name].set_disable(gid)
                    svs[sv_name].logger.info(f'禁用群 {gid} 服务 {sv_name}')
        return 'ok'
Пример #14
0
async def broadcast(msg, groups=None, sv_name=None):
    bot = nonebot.get_bot()
    #当groups指定时,在groups中广播;当groups未指定,但sv_name指定,将在开启该服务的群广播
    svs = Service.get_loaded_services()
    if not groups and sv_name not in svs:
        raise ValueError(f'不存在服务 {sv_name}')
    if sv_name:
        enable_groups = await svs[sv_name].get_enable_groups()
        send_groups = enable_groups.keys() if not groups else groups
    else:
        send_groups = groups
    for gid in send_groups:
        try:
            await bot.send_group_msg(group_id=gid, message=msg)
            await asyncio.sleep(0.5)
        except Exception as e:
            sv.logger.info(e)
Пример #15
0
async def version_select(bot, ev: CQEvent):
    gid = ev.group_id
    arg = ev.message.extract_plain_text()
    svs = Service.get_loaded_services()
    cbsvs = {
        'v2': svs.get('clanbattle'),
        'v3': svs.get('clanbattlev3'),
        'v4': svs.get('clanbattlev4'),
    }
    if arg not in cbsvs:
        await bot.finish(ev, help_str)
    if not priv.check_priv(ev, priv.ADMIN):
        await bot.finish(ev, '只有*群管理*和*群主*才能切换会战管理版本')
    if not cbsvs[arg]:
        await bot.finish(ev, f'本bot未实装clanbattle{arg},请加入Hoshinoのお茶会(787493356)体验!')
    for k, v in cbsvs.items():
        v.set_enable(gid) if k == arg else v.set_disable(gid)
    await bot.send(ev, f'已启用clanbattle{arg}\n{cbsvs[arg].help}')
Пример #16
0
async def service_list():
    user = {'name': 'name'}
    svs = Service.get_loaded_services()
    sv_names = list(svs)
    return await render_template('service_list.html', title='按服务管理', article_title="按服务管理", items=sv_names, user=user)