Beispiel #1
0
async def common_pixiv_rank(session, mode: str):
    commandname = session.event['raw_message'].split(' ')[0]
    page = session.state['page']
    date = session.state['date']
    minbookmarks = session.state['min_bookmarks']
    original = session.state['original']
    multiimage = session.state['multiimage']
    r18, r18g = await _getperm(session)
    if date:
        year, month, day = [int(i) for i in date.split('-')]
        date_str = f'{year}年{month}月{day}日'
        await session.send(M(f'开始搜索{date_str}的{commandname}第{page}页数据'))
    else:
        await session.send(M(f'开始搜索{commandname}第{page}页数据'))
    try:
        await refreshtoken()
        pids = await _pixiv_instance.illust_ranking(mode=mode,
                                                    page=page,
                                                    date=date,
                                                    min_bookmarks=minbookmarks,
                                                    original_image=original,
                                                    multiimage=multiimage,
                                                    allowr18=r18,
                                                    allowr18g=r18g)
    except InfoNotFoundError:
        await session.send(M('未查询到信息'))
    except PixivError as e:
        await session.send(M('插件出错'))
        raise e
    else:
        await common_multiimage_msgsender(session, pids)
    finally:
        await session.send(M(f'搜索{commandname}第{page}页数据完毕'))
Beispiel #2
0
async def uid_search_bookmarks(session, bot):
    type = session.state['type']
    page = session.state['page']
    minbookmarks = session.state['min_bookmarks']
    original = session.state['original']
    multiimage = session.state['multiimage']
    uid = session.get('uid', prompt='请输入想查询的UID')
    r18, r18g = await _getperm(session)
    await session.send(M(f'开始搜索用户{uid}的收藏作品第{page}页数据'))
    try:
        await refreshtoken()
        pids = await _pixiv_instance.user_bookmarks_illust(
            uid,
            type=type,
            page=page,
            min_bookmarks=minbookmarks,
            original_image=original,
            multiimage=multiimage,
            allowr18=r18,
            allowr18g=r18g)
    except InfoNotFoundError:
        await session.send(M('未查询到信息'))
    except PixivError as e:
        await session.send(M('插件出错'))
        raise e
    else:
        await common_multiimage_msgsender(session, pids)
    finally:
        await session.send(M(f'搜索用户{uid}的收藏作品第{page}页完毕'))
Beispiel #3
0
async def recommend(session, bot):
    type = session.state['type']
    page = session.state['page']
    minbookmarks = session.state['min_bookmarks']
    original = session.state['original']
    multiimage = session.state['multiimage']
    r18, r18g = await _getperm(session)
    await session.send(M(f'开始搜索推荐第{page}页数据'))
    try:
        await refreshtoken()
        pids = await _pixiv_instance.illust_recommended(
            type=type,
            page=page,
            min_bookmarks=minbookmarks,
            original_image=original,
            multiimage=multiimage,
            allowr18=r18,
            allowr18g=r18g)
    except InfoNotFoundError:
        await session.send(M('未查询到信息'))
    except PixivError as e:
        await session.send(M('插件出错'))
        raise e
    else:
        await common_multiimage_msgsender(session, pids, original, multiimage)
    finally:
        await session.send(M(f'搜索推荐第{page}页完毕'))
Beispiel #4
0
async def common_keywords_search(session, search_target: str):
    type = session.state['type']
    page = session.state['page']
    minbookmarks = session.state['min_bookmarks']
    original = session.state['original']
    multiimage = session.state['multiimage']
    keywords = session.get('keywords', prompt='输入关键词')
    r18, r18g = await _getperm(session)
    await session.send(M(f'开始搜索关键词“{keywords}”第{page}页数据'))
    try:
        await refreshtoken()
        pids = await _pixiv_instance.search_illust(keywords,
                                                   type=type,
                                                   page=page,
                                                   search_target=search_target,
                                                   min_bookmarks=minbookmarks,
                                                   original_image=original,
                                                   multiimage=multiimage,
                                                   allowr18=r18,
                                                   allowr18g=r18g)
    except InfoNotFoundError:
        await session.send(M('未查询到信息'))
    except PixivError as e:
        await session.send(M('插件出错'))
        raise e
    else:
        await common_multiimage_msgsender(session, pids, original, multiimage)
    finally:
        await session.send(M(f'搜索关键词“{keywords}”第{page}页完毕'))
Beispiel #5
0
async def pid_search_comment(session, bot):
    pid = session.get('pid', prompt='请输入想查询的PID')
    await session.send(M(f'开始搜索作品{pid}的评论区'))
    try:
        await refreshtoken()
        comments = await _pixiv_instance.illust_comments(pid)
    except InfoNotFoundError:
        await session.send(M('未查询到信息'))
    except PixivError as e:
        await session.send(M('插件出错'))
        raise e
    else:
        msg = M()
        msglimit = 10
        msgcurrent = 0
        for comment in comments:
            msgcurrent += 1
            if msgcurrent > msglimit:
                await session.send(msg)
                msgcurrent = 1
                msg.clear()
            msg.append(MS.text(comment))
        if msg:
            await session.send(msg)
    finally:
        await session.send(M(f'搜索作品{pid}评论区完毕'))
Beispiel #6
0
async def disabler18g(session, bot):
    selfid = session.self_id
    if session.event['message_type'] == 'group':
        groupid = session.event['group_id']
        groupdict[selfid][groupid]['mods_config']['pixiv']['allowr18g'] = False
        await session.send(M(f'群{groupid}已禁止R18G图像'))
    else:
        userid = session.event['user_id']
        frienddict[selfid][userid]['mods_config']['pixiv']['allowr18g'] = False
        await session.send(M(f'用户{userid}已禁止R18G图像'))
Beispiel #7
0
async def common_multiuser_msgsender(session, uids: tuple):
    """
    通用多用户消息发送函数。
    参数:
        session
        uids: 作者uid组成的元组
    """
    msg = M()
    msglimit = 20
    msgcurrent = 0
    useb64 = False if session.self_id == SIGNAL['MainQQ'] else True
    for user in _pixiv_instance.getusers(uids, useb64):
        msgcurrent += 1
        if msgcurrent > msglimit:
            await session.send(msg)
            msgcurrent = 1
            msg.clear()
        msg.append(MS.text('-' * 20 + '\n'))
        msg.append(MS.text(f'用户名:{user["user"]["name"]}\n'))
        msg.append(MS.text(f'用户ID:{user["user"]["id"]}\n'))
        if SIGNAL['RegisteredQQ'][session.self_id][
                'coolq_edition'] == 'pro' and user['user']['profile_image']:
            msg.append(MS.text('用户头像:'))
            msg.append(MS.image(user['user']['profile_image']))
            msg.append(MS.text('\n'))
    if msg:
        await session.send(msg)
Beispiel #8
0
async def users_search(session, bot):
    page = session.state['page']
    keywords = session.get('keywords', prompt='输入关键词')
    await session.send(M(f'开始依据关键词“{keywords}”搜索用户'))
    try:
        await refreshtoken()
        uids = await _pixiv_instance.search_user(keywords, page=page)
    except InfoNotFoundError:
        await session.send(M('未查询到信息'))
    except PixivError as e:
        await session.send(M('插件出错'))
        raise e
    else:
        await common_multiuser_msgsender(session, uids)
    finally:
        await session.send(M(f'依据关键词“{keywords}”搜索搜索用户第{page}页完毕'))
Beispiel #9
0
async def disable_pcr(session, bot):
    selfid = session.self_id
    groupid = session.event['group_id']
    groupdict[selfid][groupid]['mods_config']['pcr']['disable'] = True
    await session.send(M(f'已在群{groupid}禁用pcr模块'))
    logger.info(
        f'group {groupid} call Azusa.modules.pcr disable_pcr successfully')
Beispiel #10
0
async def statistics(session, bot):
    only_file_exist = False if '详细' in session.current_arg_text.strip(
    ) else True
    illusts_stat, users_stat = _pixiv_instance.statistics(only_file_exist)
    msg = M()
    msg.append(MS.text('*' * 20 + '\n'))
    msg.append(MS.text('图片统计:\n'))
    msg.append(MS.text(f'总数:{illusts_stat["total"]}\n'))
    tags_stat_limit = 20
    msg.append(MS.text(f'标签统计(仅显示占比最高的{tags_stat_limit}条):\n'))
    msg.append(MS.text(f'总标签量:{len(illusts_stat["tags_stat"])}\n'))
    for i in range(tags_stat_limit):
        item = illusts_stat['tags_stat'][i]
        msg.append(
            MS.text(
                f'{i+1}:{item[0]}{"(" + item[1] + ")" if item[1] else ""}:总数{item[2]},占比{item[3]}\n'
            ))
    msg.append(MS.text('阅读量统计\n'))
    for k, v in illusts_stat['views_stat'].items():
        msg.append(MS.text(f'阅读量{k}:总数{v["total"]},占比{v["rate"]}\n'))
    msg.append(MS.text('收藏量统计\n'))
    for k, v in illusts_stat['bookmarks_stat'].items():
        msg.append(MS.text(f'收藏量{k}:总数{v["total"]},占比{v["rate"]}\n'))
    msg.append(MS.text('-' * 20 + '\n'))
    msg.append(MS.text('用户统计:\n'))
    msg.append(MS.text(f'总数:{users_stat["total"]}\n'))
    msg.append(MS.text('*' * 20 + '\n'))
    await session.send(msg)
Beispiel #11
0
async def uid_search_mypixiv(session, bot):
    page = session.state['page']
    uid = session.get('uid', prompt='请输入想查询的UID')
    await session.send(M(f'开始搜索用户{uid}的好P友第{page}页数据'))
    try:
        await refreshtoken()
        uids = await _pixiv_instance.user_mypixiv(uid, page=page)
    except InfoNotFoundError:
        await session.send(M('未查询到信息'))
    except PixivError as e:
        await session.send(M('插件出错'))
        raise e
    else:
        await common_multiuser_msgsender(session, uids)
    finally:
        await session.send(M(f'搜索用户{uid}的好P友第{page}页完毕'))
Beispiel #12
0
async def enable_chat(session, bot):
    selfid = session.self_id
    groupid = session.event['group_id']
    groupdict[selfid][groupid]['mods_config']['chat']['disable'] = False
    await session.send(M(f'已在群{groupid}启用chat模块'))
    logger.info(
        f'group {groupid} call Azusa.modules.chat disable_chat successfully')
Beispiel #13
0
async def common_uid_parser(session):
    """ uid参数解析器,获取一个uid参数 """
    paramList = session.current_arg_text.strip().split(' ')
    if paramList[0] == '':
        paramList = []
    if session.is_first_run:
        try:
            session.state['uid'] = int(paramList[0])
        except (IndexError, ValueError):
            pass
    elif not paramList:
        session.pause(M('请输入有效的uid'))
    else:
        try:
            session.state['uid'] = int(paramList[0])
        except ValueError:
            session.pause(M('参数必须是数字'))
Beispiel #14
0
async def query_blacklist(session, bot):
    msg = M()
    if BLACKLIST['user']:
        msg.append(
            MS.text(
                f'用户黑名单:{",".join([str(i) for i in BLACKLIST["user"]])}。\n'))
    if BLACKLIST['group']:
        msg.append(
            MS.text(f'群黑名单:{",".join([str(i) for i in BLACKLIST["group"]])}。'))
    await session.send(msg)
Beispiel #15
0
async def datasave(session, bot):
    selfid = session.self_id
    for cmd in CommandManager().commands:
        if 'datasave' not in cmd and 'save' in repr(cmd):
            await call_command(bot, session.event, cmd)
    try:
        mods_config = {}
        for selfid in groupdict.keys():
            mods_config[str(selfid)] = {
                'group':
                {k: v['mods_config']
                 for k, v in groupdict[selfid].items()},
                'private':
                {k: v['mods_config']
                 for k, v in frienddict[selfid].items()},
            }
        datastorage.save('data', mods_config)
        await session.send(M('所有信息保存完成'))
    except Exception as e:
        await session.send(M('保存出现错误,请检查日志'))
        raise e
Beispiel #16
0
async def common_keywords_search_parser(session):
    stripped_args = session.current_arg_text.strip()
    stripped_args = re_keywords_search_parser_object.sub(
        '', stripped_args).strip()
    if session.is_first_run:
        await common_type_page_minbookmarks_original_multiimage_parser(session)
        if stripped_args:
            session.state['keywords'] = stripped_args
    elif not stripped_args:
        session.pause(M('关键词不能为空'))
    else:
        session.state['keywords'] = stripped_args
Beispiel #17
0
async def users_search_parser(session):
    stripped_args = session.current_arg_text.strip()
    if session.is_first_run:
        re_page = re_page_object.search(stripped_args)
        session.state['page'] = int(re_page.group(0)[1:]) if re_page else 1
        stripped_args = re_page_object.sub('', stripped_args).strip()
        if stripped_args:
            session.state['keywords'] = stripped_args
    elif not stripped_args:
        session.pause(M('关键词不能为空'))
    else:
        session.state['keywords'] = stripped_args
Beispiel #18
0
async def dataload(session, bot):
    selfid = session.self_id
    for cmd in CommandManager().commands:
        if 'dataload' not in cmd and 'load' in repr(cmd):
            await call_command(bot, session.event, cmd)
    mods_config = datastorage.load('data')
    for k in groupdict[selfid].keys():
        try:
            groupdict[selfid][k]['mods_config'].update(
                mods_config[str(selfid)]['group'][str(k)])
        except KeyError:
            pass
    for k in frienddict[selfid].keys():
        try:
            frienddict[selfid][k]['mods_config'].update(
                mods_config[str(selfid)]['private'][str(k)])
        except KeyError:
            pass
    await session.send(M('所有信息读取完成'))
Beispiel #19
0
async def common_multiimage_msgsender(session,
                                      pids: tuple,
                                      original: bool = False,
                                      multiimage: bool = False):
    '''
    通用多图片消息发送函数。
    参数:
        session
        pids: 图片pid组成的元组
        original: 是否使用原图
        multiimage: 是否使用多图
    '''
    msg = M()
    msglimit = 20
    msgcurrent = 0
    useb64 = False if session.self_id == SIGNAL['MainQQ'] else True
    for illust in _pixiv_instance.getpics(pids, useb64):
        msgcurrent += illust['count'] if multiimage else 1
        if msgcurrent > msglimit:
            await session.send(msg)
            msgcurrent = illust['count'] if multiimage else 1
            msg.clear()
        msg.append(MS.text('-' * 20 + '\n'))
        msg.append(MS.text(f'作品名:{illust["title"]}\n'))
        msg.append(MS.text(f'PID:{illust["id"]}\n'))
        if SIGNAL['RegisteredQQ'][session.self_id]['coolq_edition'] == 'pro':
            files = illust['files']['original'] if original else illust[
                'files']['large']
            multiimage = session.state['multiimage']
            if multiimage:
                for file in files:
                    msg.append(MS.image(file))
                    msg.append(MS.text('\n'))
            else:
                msg.append(MS.image(files[0]))
                msg.append(MS.text('\n'))
    if msg:
        await session.send(msg)
Beispiel #20
0
async def dice(session, bot):
    selfid = session.self_id
    msgat = []
    for msg in session.event['message']:
        if msg['type'] == 'at' and msg['data']['qq'] != 'all':
            msgat.append(int(msg['data']['qq']))
    msg = M()
    if session.event['message_type'] == 'group':
        msg.append(
            MS.text(
                f'{session.event["sender"]["card"] or session.event["sender"]["nickname"]}掷出了{random.randint(1, 100)}点'
            ))
    else:
        msg.append(
            MS.text(
                f'{session.event["sender"]["nickname"]}掷出了{random.randint(1, 100)}点'
            ))
    for i in msgat:
        alias = groupdict[selfid][session.event['group_id']]['member'][i][
            'card'] or groupdict[selfid][
                session.event['group_id']]['member'][i]['nickname']
        msg.append(MS.text(f'\n{alias}掷出了{random.randint(1, 100)}点'))
    await session.send(msg)
Beispiel #21
0
async def query_modules_status(session, bot):
    msg = M()
    if session.event['message_type'] == 'group':
        groupid = session.event['group_id']
        msg.append(MS.text(f'群{groupid}的插件启用状态:\n'))
        mods_config = groupdict[session.self_id][groupid]['mods_config']
    else:
        userid = session.event['user_id']
        msg.append(MS.text(f'用户{userid}的插件启用状态:\n'))
        mods_config = frienddict[session.self_id][userid]['mods_config']
    for k in mods_config.keys():
        msg.append(
            MS.text(f'{k}:{"已禁用" if mods_config[k]["disable"] else "已启用"}\n'))
        if k == 'pixiv':
            msg.append(
                MS.text(
                    f'{k}(R18):{"已启用" if mods_config[k]["allowr18"] else "已禁用"}\n'
                ))
            msg.append(
                MS.text(
                    f'{k}(R18G):{"已启用" if mods_config[k]["allowr18g"] else "已禁用"}\n'
                ))
    await session.send(msg)
Beispiel #22
0
async def clanbattlehelp(session, bot):
    msg = M()
    if session.is_first_run and 'page0' not in session.state.keys():
        tips = M()
        tips.append(MS.text("欢迎使用AzusaBot的公主连结会战管理插件。"))
        tips.append(MS.text('本插件仅可在群聊中生效。所有指令均以空格分割;@代表需要at机器人才能执行;/代表其前后的指令均可执行且为同一效果(别名);执行成功的指令一定会收到文字提示。\n'))
        tips.append(MS.text("-" * 10 + "\n目录:1.会战管理指令,2.公会指令(所有时期可用),3.会战限定指令(仅会战期间可用)。4.调试用指令(仅su可执行)。"))
        await session.send(tips)
    page0 = session.get('page0', prompt='请输入查询的页码哦')
    try:
        helpdict = {
            '1': {
                '0': '会战管理指令:\n1.<@创建公会/注册公会>,2.<@删除公会/解除注册公会>,3.<@开始公会战/开始会战>,4.<@结束公会战/结束会战>。',
                '1': '<@创建公会/注册公会>:可选1个参数。仅群主可执行。可选参数为“国服(B服、b服、cn服),台服(tw服),日服(jp服)”,未设置参数则默认为台服。将当前群注册为使用公会战插件的公会,公会战指令有效,使用服务器类型初始化会战数据(各阶段boss血量上限以及各阶段boss分数倍率信息,允许使用指令<设置最大血量><设置分数倍率>进行修改)。\n'+ '-' * 10 + '\n例:“创建公会 cn服”,创建一个类型为国服的公会。\n例:“创建公会”,创建一个类型为台服的公会。',
                '2': '<@删除公会/解除注册公会>:不接受参数。仅群主可执行。将当前群从使用公会战插件的公会中去除,公会战指令无效。',
                '3': '<@开始公会战/开始会战>:可选0,1,2个参数。仅群主和管理员可执行。参数依次为“会战总天数”、“会战已进行天数”,默认设置为“7”,“0”。允许使用会战限定指令,立即重置所有会战数据,并且会战进行到第1天时会自动重置所有会战数据。\n'+ '-' * 10 + '\n例:“@开始公会战”,开始为期7天的公会战,当前为会战前1天,命令执行后第2天时正式记录分数,第8天时自动结束。\n例:“@开始公会战 6 -1”,开始为期6天的公会战,当前为会战前2天,命令执行后第3天时正式记录分数,第8天时自动结束。',
                '4': '<@结束公会战/结束会战>:不接受参数。仅群主和管理员可执行。执行后结束当期会战,保存玩家分数并且禁止使用会战限定指令。由于已存在自动结束功能,不推荐使用此指令。',
                },
            '2': {
                '0': '公会指令:\n1.<注册/加入公会/入会>,2.<解除注册/退出公会/退会>,3.<修改昵称/改名/修改名称>,4.<查分/查询分数>,5.<查询排行>,6.<设置战斗力/修改战斗力>,7.<查询昵称>,8.<查询ID>,9.<查询所有玩家>。',
                '1': '<注册/加入公会/入会>:可选0,1个参数。参数为“昵称”,“昵称”默认设置为群名片。向公会内注册新玩家,以昵称为自己的名称。\n' + '-' * 10 + '\n例:“注册”,以QQ昵称作为自己的名称注册。\n例:“注册 AAA”,以AAA作为自己的名称注册。',
                '2': '<解除注册/退出公会/退会>:可选0,1个参数。参数为“昵称”,“昵称”默认设置为自己的名称。删除公会内以昵称为名称的玩家。\n' + '-' * 10 + '\n例:“解除注册”, 删除自己。\n例:“解除注册 AAA”,删除公会内名为AAA的玩家。',
                '3': '<修改昵称/改名/修改名称>:可选1,2个参数。参数依次为“旧昵称”、“新昵称”,“旧昵称”默认设置为公会内自己的名称。必须接受新昵称参数。将旧昵称的玩家的名称修改为新昵称。\n' + '-' * 10 + '\n例:“改名 AAA”,将自己的名称修改为AAA。\n例:“改名 AAA BBB”,将名称AAA的玩家的名称修改为BBB。',
                '4': '<查分/查询分数>:可选0,1个参数。参数为“昵称”,“昵称”默认设置为公会内自己的名称。查询名称为昵称的玩家的分数。\n' + '-' * 10 + '\n例:“查分”,查询自己的分数。\n例:“查分 AAA”,查询名称为AAA的玩家的分数。',
                '5': '<查询排行>:可选0,1个参数。无参数时返回所有玩家的总分排行信息。带一个参数时,该参数为boss序号,返回所有玩家对该boss的分数排行信息。\n' + '-' * 10 + '\n例:“查询排行”,返回所有玩家总分排行信息。\n例:“查询排行 5”,返回所有玩家五王分数排行信息。',
                '6': '<设置战斗力/修改战斗力>:可选1,2个参数。参数依次为“昵称”,“战斗力数值”,“昵称”默认设置为公会内自己的名称。将名称为昵称的玩家的战斗力设置为战斗力数值。\n' + '-' * 10 + '\n例:“修改战斗力 5”,将自己的战斗力设置为5。\n例:“修改战斗力 AAA 5”,将名称为AAA的玩家的战斗力修改为5。',
                '7': '<查询昵称>:必选1个参数。参数为“QQ号”。查询以QQ号为内部ID的玩家的名称。',
                '8': '<查询ID>:必选1个参数。参数为“昵称”。查询以昵称为名称的玩家的QQ号。',
                '9': '<查询所有玩家>:不接受参数。查询公会内所有注册玩家的名称。',
                },
            '3': {
                '0': '会战限定指令:\n1.<出刀/刀/报刀>,2.<申请出刀>,3.<预约刀/预约>,4.<取消预约>,5.<挂树/上树>,6.<取消挂树/下树>,7.<重置状态>,8.<调整boss/校正boss>,9.<boss信息不正确>,10.<设置最大血量>,11.<设置分数倍率>,12.<设置阶段转换>,13.<@撤回出刀>,14.<查询已出刀信息>,15.<查询BOSS/查询Boss/查询boss>,16.<查询挂树>,17.<查询剩余刀>,18.<查询预约刀/查询预约>,19.<查询公会总分>,20.<查询会战信息>,21.<作业>。',
                '1': '<出刀/刀/报刀>:可选1,2,3,4个参数。带1或2个参数时,参数依次为“昵称”、“伤害值”,“昵称”默认设置为公会内自己的名称,执行后名称为昵称的玩家对当前boss造成伤害值的伤害。带3或4个参数时,参数依次为“昵称”、“阶段”、“boss序号”、“伤害值”,“昵称”默认设置为公会内自己的名称,执行后名称为昵称的玩家对阶段的阶段的boss序号的boss造成伤害值的伤害,此时伤害不计入当前boss数值。\n' + '-' * 15 + '\n例:“刀 10”,自己对当前boss造成10点伤害。\n例:“刀 AAA 10”,玩家AAA对当前boss造成10点伤害。\n例:“刀 3 4 20”,自己对三阶段四号boss造成20点伤害且当前boss信息不变。\n例:“刀 AAA 3 4 20”,玩家AAA对三阶段四号boss造成20点伤害且当前boss信息不变。',
                '2': '<申请出刀>:可选0,1个参数。参数为“昵称”,“昵称”默认设置为公会内自己的名称。为名称为昵称的玩家申请出刀,可使用正常出刀指令。\n' + '-' * 10 + '\n例:“申请出刀”,为自己申请出刀。\n例:“申请出刀 AAA”,为玩家AAA申请出刀。',
                '3': '<预约刀/预约>:可选随意长度的参数。若第一个参数不是数字,则将其设置为“昵称”,并将其后所有参数作为boss序号传入;否则“昵称”默认设置为公会内自己的名称,并将所有参数作为boss序号传入。执行后为名称为昵称的玩家预约所有boss序号的boss。\n' + '-' * 10 + '\n例:“预约 2 3”,为自己预约2号3号boss。\n例:“预约 AAA 1”,为玩家AAA预约1号boss。',
                '4': '<取消预约>:可选随意长度的参数。若第一个参数不是数字,则将其设置为“昵称”,并将其后所有参数作为boss序号传入;否则“昵称”默认设置为公会内自己的名称,并将所有参数作为boss序号传入。执行后为名称为昵称的玩家取消预约所有boss序号的boss。\n' + '-' * 10 + '\n例:“取消预约 2 3”,为自己取消预约2号3号boss。\n例:“取消预约 AAA 1”,为玩家AAA取消预约1号boss。',
                '5': '<挂树/上树>:可选0,1个参数。参数为“昵称”,“昵称”默认设置为公会内自己的名称。将名称为昵称的玩家设置为挂树状态。\n' + '-' * 10 + '\n例:“挂树”,为自己设置挂树。\n例:“挂树 AAA”,将名称为AAA的玩家设置挂树。',
                '6': '<取消挂树/下树>:可选0,1个参数。参数为“昵称”,“昵称”默认设置为公会内自己的名称。将名称为昵称的玩家取消挂树状态。当boss击破时所有挂树状态的玩家自动下树,不建议使用此指令。\n' + '-' * 10 + '\n例:“下树”,为自己取消挂树。\n例:“下树 AAA”,将名称为AAA的玩家取消挂树。',
                '7': '<重置状态>:可选0,1个参数。仅群主或管理员可执行。参数为“昵称”,“昵称”默认设置为公会内自己的名称。将名称为昵称的玩家的状态重置,包括剩余刀数,预约boss信息,挂树信息,尾刀信息。\n' + '-' * 10 + '\n例:“重置状态”,重置自己的状态。\n例:“重置状态 AAA”,重置名称为AAA的玩家的状态。',
                '8': '<调整boss/校正boss>:必选3个参数。仅群主或管理员可执行。参数依次为“周数”,“序号”,“当前血量”。将当前boss信息设置为周数的周目,序号的boss,当前血量的血量。\n' + '-' * 10 + '\n例:“调整boss 22 4 6800000”,将当前boss设置为22周目的4号boss且血量为6800000。',
                '9': '<boss信息不正确>:不接受参数。将当前boss信息设置为过时。此时出刀必须带3或4个参数,并且不再统计boss信息,预约刀、挂树将自动失效。',
                '10': '<设置最大血量>:必选6个参数。仅群主或管理员可执行。参数依次为boss阶段、boss1至boss5的血量上限。\n' + '-' * 10 + '\n例:“设置最大血量 3 7000000 9000000 12000000 14000000 17000000”,将三阶段五个boss的血量上限依次设置为7000000,9000000,12000000,14000000,17000000。',
                '11': '<设置分数倍率>:必选6个参数。仅群主或管理员可执行。参数依次为boss阶段、boss1至boss5的分数倍率。\n' + '-' * 10 + '\n例:“设置分数倍率 3 2 2 2.4 2.4 2.6”,将三阶段五个boss的分数倍率依次设置为2,2,2.4,2.4,2.6。',
                '12': '<设置阶段转换>:可选1个以上参数。仅群主或管理员可执行。参数依次为进入第1,第2,...,第n阶段的周数。\n' + '-' * 10 + '\n例:“设置阶段转换 1 4 11 35”,将阶段转换设置为第1周目进入第1阶段,第4周目进入第2阶段,第11周目进入第3阶段,第35周目进入第4阶段。',
                '13': '<@撤回出刀>:不接受参数。回滚所有信息至上一个出刀之前。用于报错刀修正。对任意形式的出刀均有效。将会保存Azusa从开始公会战(或读取会战信息)之后的所有出刀信息。每日五点清空。',
                '14': '<查询已出刀信息>:可选1,2,3个参数。可选参数为“正序”,“X(-Y)”,“昵称”。查询已出刀的信息,带有“正序”参数则按从前往后出刀的顺序查询,否则按从后往前的顺序查询。单独“X”参数查询第X条数据,“X-Y”参数查询第X到第Y条数据,Y必须大于X,此参数默认设置为“1”。“昵称”参数指定查询玩家昵称为“昵称”的出刀信息。\n' + '-' * 10 + '\n例:“查询已出刀信息”,查询倒序第一刀(前一刀)的出刀信息。\n例:“查询已出刀信息 3”,查询倒序第三刀(前第三刀)的出刀信息。\n例:“查询已出刀信息 4-7”,查询倒序第四到第七刀(前第七到第四刀)的所有出刀信息。\n例:“查询已出刀信息 正序 5”,查询正序第五刀的出刀信息。\n例:“查询已出刀信息 ABC”,查询昵称为“ABC”的玩家的出刀信息。',
                '15': '<查询BOSS/查询Boss/查询boss>:不接受参数。查询当前boss信息。',
                '16': '<查询挂树>:不接受参数。查询当前挂树信息。',
                '17': '<查询剩余刀>:可选0,1个参数。无参数时返回所有剩余刀数大于0的玩家的剩余刀信息。带一个参数时,若该参数为数字,则参数为剩余刀数,返回所有剩余刀数为参数的玩家名单;否则参数为玩家名称,返回该玩家的剩余刀数。\n' + '-' * 10 + '\n例:“查询剩余刀”,返回所有剩余刀数大于0的玩家的剩余刀信息。\n例:“查询剩余刀 3”,返回所有剩余刀数为3的玩家名单。\n例:“查询剩余刀 AAA”,返回玩家AAA的剩余刀数。',
                '18': '<查询预约刀/查询预约>:可选0,1个参数。无参数时返回所有玩家的挂树信息。带一个参数时,若该参数为数字,则参数为boss序号,返回所有预约了该boss的玩家名单;否则参数为玩家名称,返回该玩家的预约信息。\n' + '-' * 10 + '\n例:“查询预约”,返回所有玩家预约信息。\n例:“查询预约 5”,返回所有预约了五王的玩家名单。\n例:“查询预约 AAA”,返回玩家AAA的预约信息。',
                '19': '<查询公会总分>:不接受参数。查询当前公会的战斗总分。',
                '20': '<查询会战详细信息>:不接受参数。返回当前会战信息,包括期数(年月),总时长,已进行天数,所有boss血量上限设置以及所有boss分数倍率设置。',
                '21': '<作业>:可选参数。必选第一个参数“提交”或“删除”或“查询”,若为提交则可选2,3个参数“阶段”“图片”(此时提交为所有boss作业)或“阶段”“boss序号”“图片”(此时提交为指定boss作业),“删除”则必选1个参数“图片”,“查询”则可选1,2个参数“阶段”(查询指定阶段所有boss作业)或“阶段”“boss序号”(查询指定阶段指定boss作业)。依据参数不同操作作业系统。\n' + '-' * 10 + '\n例:“作业 提交 3 【图片】”,将图片保存为阶段3的全boss的作业。\n例:“作业 提交 3 1 【图片】”,将图片保存为阶段3的1号boss的作业。\n例:“作业 删除 【图片】”,将图片从作业库中删除。\n例:“作业 查询 3”,查询阶段3的全boss作业。\n例:“作业 查询 3 1”,查询阶段3的1号boss的作业。',
                },
            '4': {
                '0': '调试用指令:\n1.<@保存会战信息>,2.<@读取会战信息>。',
                '1': '<@保存会战信息>:不接受参数。高权限指令。执行后将所有注册使用公会战插件的群聊的会战信息保存为文件。',
                '2': '<@读取会战信息>:可选接受参数“仅玩家”。高权限指令。执行后从文件中读入会战信息。“仅玩家”参数存在时,仅读取玩家信息,否则读取所有信息。',
                },
            }
        page1 = session.get('page1', prompt=helpdict[page0]['0'] + '\n查询详细参数与效果请输入命令序号。' + '\n输入“0”结束查询。')
        if page1 != '0':
            msg.append(MS.text(helpdict[page0][page1]))
        await session.send(msg)
    except KeyError:
        await session.send(M('页码不存在哦'))
Beispiel #23
0
async def help(session, bot):
    plugins = list(filter(lambda p: p.name, get_loaded_plugins()))
    arg = session.current_arg_text.strip().lower()
    if not arg:
        msg = M()
        msg.append(MS.text('欢迎使用AzusaBot!\n'))
        msg.append(
            MS.text('Azusa现在启用的模块有:' +
                    ','.join(i for i in bot.config.LOAD_MODULES) + '\n'))
        msg.append(
            MS.text(
                '群主及管理员可控制群聊中插件的开关。使用指令“disable_<模块名>”(例:disable_chat)可在本群禁用对应模块的功能。\n'
            ))
        msg.append(
            MS.text('Azusa现在启用的功能有:' + ','.join(p.name
                                                for p in plugins) + '\n'))
        msg.append(MS.text('查询详细帮助请使用指令“帮助 <功能名>”(例:“帮助 公主连结公会战”)\n'))
        msg.append(MS.text('-' * 20))
        msg.append(MS.text('常用功能(无法禁用):\n'))
        msg.append(MS.text('手动复读<echo>。复读参数。例:“echo ABC”,复读ABC。\n'))
        msg.append(MS.text('骰子<dice/骰子>。为自己及at到的人(群聊)进行随机骰点。\n'))
        msg.append(
            MS.text('查询插件状态<query_modules_status/查询插件状态>。查询对应的群或者个人的插件状态。\n'))
        if session.event['user_id'] in bot.config.SUPERUSERS:
            msg.append(MS.text('-' * 20))
            msg.append(MS.text('测试指令<test>。仅superuser可以使用。\n'))
            msg.append(
                MS.text(
                    '数据保存<datasave>。仅superuser可以使用。执行所有的save命令,额外保存群与好友的模块控制开关信息。\n'
                ))
            msg.append(
                MS.text(
                    '数据读取<dataload>。仅superuser可以使用。执行所有的load命令。额外读取群与好友的模块控制开关信息,会覆盖现有信息。\n'
                ))
            msg.append(
                MS.text(
                    '重置主要QQ<resetmain/重置主QQ>。仅superuser可以使用。确保在主QQ无法登录(封禁等)且不用重启Azusa的情况下重新设置主QQ。\n'
                ))
            msg.append(
                MS.text(
                    '设置用户黑名单<set_user_blacklist/添加到用户黑名单>。仅superuser可以使用。将用户添加到黑名单。\n'
                ))
            msg.append(
                MS.text(
                    '设置群黑名单<set_group_blacklist/添加到群黑名单>。仅superuser可以使用。将群添加到黑名单。\n'
                ))
            msg.append(
                MS.text(
                    '取消用户黑名单<del_user_blacklist/删除用户黑名单>。仅superuser可以使用。将用户从黑名单中删除。\n'
                ))
            msg.append(
                MS.text(
                    '取消群黑名单<del_group_blacklist/删除群黑名单>。仅superuser可以使用。将群从黑名单中删除。\n'
                ))
            msg.append(
                MS.text(
                    '查询黑名单<query_blacklist/查询黑名单>。仅superuser可以使用。查询黑名单内容。\n'))
            msg.append(MS.text('退出机器人<_exit>。仅superuser可以使用。退出机器人并保存所有信息。'))
        await session.send(msg)
        return
    for p in plugins:
        if p.name.lower() == arg:
            await session.send(M(p.usage))
Beispiel #24
0
async def test(session, bot):
    await session.send(M(str(session.event)))
Beispiel #25
0
async def echo(session, bot):
    msg = M(session.current_arg_text.strip())
    await session.send(msg)
Beispiel #26
0
async def exit(session, bot):
    await session.send(M('Azusa即将退出...'))
    try:
        sys.exit()
    finally:
        await call_command(bot, session.event, 'datasave')
Beispiel #27
0
async def uid_search_detail(session, bot):
    uid = session.get('uid', prompt='请输入想查询的UID')
    await session.send(M(f'开始搜索用户{uid}的详细信息'))
    try:
        await refreshtoken()
        uids = await _pixiv_instance.user_detail(uid)
    except InfoNotFoundError:
        await session.send(M('未查询到信息'))
    except PixivError as e:
        await session.send(M('插件出错'))
        raise e
    else:
        msg = M()
        useb64 = False if session.self_id == SIGNAL['MainQQ'] else True
        for user in _pixiv_instance.getusers(uids, useb64):
            msg.append(MS.text(f'用户名:{user["user"]["name"]}\n'))
            msg.append(MS.text(f'用户ID:{user["user"]["id"]}\n'))
            d = {
                'user': {
                    'profile_image':
                    '用户头像' if 'profile_image' in user['user'].keys() else '',
                    'comment':
                    '自我介绍' if 'comment' in user['user'].keys() else '',
                },
                'profile': {
                    'webpage':
                    '网站' if 'webpage' in user['profile'].keys() else '',
                    'gender':
                    '性别' if 'gender' in user['profile'].keys() else '',
                    'job':
                    '职业' if 'job' in user['profile'].keys() else '',
                    'region':
                    '国家或地区' if 'region' in user['profile'].keys() else '',
                    'total_follow_users':
                    '关注的人数'
                    if 'total_follow_users' in user['profile'].keys() else '',
                    'total_mypixiv_users':
                    '好P友人数'
                    if 'total_mypixiv_users' in user['profile'].keys() else '',
                    'total_illusts':
                    '创作插画数'
                    if 'total_illusts' in user['profile'].keys() else '',
                    'total_manga':
                    '创作漫画数' if 'total_manga' in user['profile'].keys() else '',
                    'total_novels':
                    '创作小说数'
                    if 'total_novels' in user['profile'].keys() else '',
                    'total_illust_bookmarks_public':
                    '公开收藏作品数' if 'total_illust_bookmarks_public'
                    in user['profile'].keys() else '',
                    'total_illust_series':
                    '创作系列插画数'
                    if 'total_illust_series' in user['profile'].keys() else '',
                    'total_novel_series':
                    '创作系列漫画数'
                    if 'total_novel_series' in user['profile'].keys() else '',
                    'background_image':
                    '个人资料背景图'
                    if 'background_image' in user['profile'].keys() else '',
                    'twitter_account':
                    'twitter帐号'
                    if 'twitter_account' in user['profile'].keys() else '',
                    'twitter_url':
                    'twitter链接地址'
                    if 'twitter_url' in user['profile'].keys() else '',
                    'pawoo_url':
                    'pawoo链接地址'
                    if 'pawoo_url' in user['profile'].keys() else '',
                },
                'workspace': {
                    'pc':
                    '电脑' if 'pc' in user['workspace'].keys() else '',
                    'monitor':
                    '显示器' if 'monitor' in user['workspace'].keys() else '',
                    'tool':
                    '软件' if 'tool' in user['workspace'].keys() else '',
                    'scanner':
                    '扫描仪' if 'scanner' in user['workspace'].keys() else '',
                    'tablet':
                    '数位板' if 'tablet' in user['workspace'].keys() else '',
                    'mouse':
                    '鼠标' if 'mouse' in user['workspace'].keys() else '',
                    'printer':
                    '打印机' if 'printer' in user['workspace'].keys() else '',
                    'desktop':
                    '桌子上的东西' if 'desktop' in user['workspace'].keys() else '',
                    'music':
                    '绘图时听的音乐' if 'music' in user['workspace'].keys() else '',
                    'desk':
                    '桌子' if 'desk' in user['workspace'].keys() else '',
                    'chair':
                    '椅子' if 'chair' in user['workspace'].keys() else '',
                    'comment':
                    '其他' if 'comment' in user['workspace'].keys() else '',
                    'workspace_image':
                    '工作环境图'
                    if 'workspace_image' in user['workspace'].keys() else '',
                }
            }
            for k, v in d.items():
                for k1 in v.keys():
                    if user[k][k1]:
                        if 'image' not in k1:
                            msg.append(MS.text(f'{d[k][k1]}:{user[k][k1]}\n'))
                        elif 'image' in k1 and SIGNAL['RegisteredQQ'][
                                session.self_id]['coolq_edition'] == 'pro':
                            msg.append(MS.text(f'{d[k][k1]}:'))
                            msg.append(MS.image(user[k][k1]))
                            msg.append(MS.text('\n'))
        await session.send(msg)
    finally:
        await session.send(M(f'搜索用户{uid}的详细信息完成'))
Beispiel #28
0
async def del_group_blacklist(session, bot):
    ids = await get_id(session)
    for id in ids:
        BLACKLIST['group'].discard(id)
    await session.send(M(f'将{",".join([str(i) for i in ids])}从群黑名单移除。'))
Beispiel #29
0
async def set_group_blacklist(session, bot):
    ids = await get_id(session)
    BLACKLIST['group'].update(ids)
    await session.send(M(f'将{",".join([str(i) for i in ids])}添加到群聊黑名单。'))
Beispiel #30
0
async def resetmain(session, bot):
    selfid = session.self_id
    SIGNAL['MainQQ'] = selfid
    await session.send(M(f'重置主要QQ为{selfid}'))