示例#1
0
async def lssv(bot: KokkoroBot, ev: EventInterface):
    parser = ArgumentParser()
    parser.add_argument('-a', '--all', action='store_true')
    parser.add_argument('-i', '--invisible', action='store_true')
    parser.add_argument('-g', '--group', type=int, default=0)
    args = parser.parse_args(ev.get_param().remain)

    verbose_all = args.all
    only_hidden = args.invisible
    if ev.get_author_id() in bot.config.SUPER_USER:
        gid = args.group or ev.get_group_id()
        if not gid:
            await bot.kkr_send(ev, 'Usage: -g|--group <group_id> [-a|--all]')
            return
    else:
        gid = ev.get_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 bot.kkr_send(ev, '\n'.join(msg))
示例#2
0
async def switch_service(bot, ev: EventInterface, turn_on: bool):
    action_tip = '启用' if turn_on else '禁用'

    names = ev.get_param().remain.split()
    if not names:
        await bot.kkr_send(ev, f"空格后接要{action_tip}的服务名", at_sender=True)
        return
    group_id = ev.get_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(ev.get_author())
            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 bot.kkr_send(
                        ev,
                        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:
        await bot.kkr_send(ev, '\n'.join(msg), at_sender=True)
async def list_challenge(bot: KokkoroBot, ev: EventInterface,
                         args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    clan = _check_clan(bm)

    now = datetime.now() - timedelta(days=args.D)
    zone = bm.get_timezone_num(clan['server'])
    uid = args['@'] or args.uid
    if uid:
        mem = _check_member(bm, uid, bm.group, '公会内无此成员')
        challen = bm.list_challenge_of_user_of_day(mem['uid'], mem['alt'], now,
                                                   zone)
    else:
        challen = bm.list_challenge_of_day(clan['cid'], now, zone)

    msg = [f'{clan["name"]}出刀记录:\n编号|出刀者|周目|Boss|伤害|标记']
    challenstr = 'E{eid:0>3d}|{name}|r{round}|b{boss}|{dmg: >7,d}{flag_str}'
    for c in challen:
        mem = bm.get_member(c['uid'], c['alt'])
        c['name'] = mem['name'] if mem else c['uid']
        flag = c['flag']
        c['flag_str'] = '|' + ','.join(
            BattleMaster.damage_kind_to_string(flag))
        msg.append(challenstr.format_map(c))
    await bot.kkr_send(ev, '\n'.join(msg))
示例#4
0
async def pcr_comp(bot, ev: EventInterface):
    global g_result, g_uid
    uid = ev.get_author_id()
    if not lmt.check(uid):
        await bot.kkr_send(ev, '今天已经赛过5次力', at_sender=True)
        return
    if g_result != []:
        await bot.kkr_send(ev, '上一场比赛尚未结束,请等待', at_sender=True)
        return
    lmt.increase(uid)
    await bot.kkr_send(ev, f'第○届兰德索尔杯比赛开始!', at_sender=True)
    gid = str(ev.get_group_id())
    player = Player(_group_pool[gid])
    result = player.get_chara()
    result_number = player.get_num()
    res2 = chara.gen_team_pic(result, star_slot_verbose=False)
    res1 = chara.gen_team_pic(result_number, star_slot_verbose=False)
    res = concat_pic([res1, res2])
    result_name = [f'{c.name}' for c in result]
    res_name = ' '.join(result_name)
    if sv.bot.config.ENABLE_IMAGE:
        await bot.kkr_send(ev, res)
        await bot.kkr_send(ev, f'{res_name}\n※发送“选中+角色名称”开始比赛', at_sender=False)
    else:
        await bot.kkr_send(ev, f'Image is disabled')
    save_player(result_name)
    g_uid = uid
async def _select_(bot: KokkoroBot, ev: EventInterface):
    global g_uid_dict, g_status_dict
    gid = ev.get_group_id()
    uid = ev.get_author_id()
    horse_status: HorseStatus = g_status_dict.get(gid)
    if horse_status == None:
        await bot.kkr_send(ev, f'比赛尚未开始,发送指令"赛🐴"发起新的游戏', at_sender=True)
    elif not horse_status.multi_player and uid != g_uid_dict[gid]:
        await bot.kkr_send(ev, f'仅限比赛发起人进行选择~\n发送指令"多人赛🐴"发起多人游戏')
    else:
        pkey = ev.get_param().remain
        id_ = chara.name2id(pkey)
        s_chara = chara.fromid(id_)
        if s_chara.name not in g_status_dict[gid].charactors:
            await bot.kkr_send(ev, f'所选角色未在参赛角色中')
            return
        success = horse_status.add_player(uid, s_chara.name)
        if not success:
            await bot.kkr_send(ev,
                               f'已经有人选过 {s_chara.name} 了 0x0',
                               at_sender=True)
        elif horse_status.is_finished():
            await bot.kkr_send(ev, f'比赛开始')
            res = horse_status.get_result()
            await bot.kkr_send(ev, f'{res}')
            # Clean up
            clean(gid)
        else:
            await bot.kkr_send(ev, f'已选择{s_chara.name}', at_sender=True)
示例#6
0
async def stat_score(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    now = datetime.now()
    clan = _check_clan(bm)

    yyyy, mm, _ = bm.get_yyyymmdd(now)
    stat = bm.stat_score(1, now)
    stat.sort(key=lambda x: x[3], reverse=True)

    if not len(stat):
        await bot.kkr_send(ev,
                           f"{clan['name']}{yyyy}年{mm}月会战统计数据为空",
                           at_sender=True)
        return

    # msg = [ f"\n{yyyy}年{mm}月会战{clan['name']}分数统计:" ]
    # for _, _, name, score in stat:
    #     score = f'{score:,d}'           # 数字太多会被腾讯ban,用逗号分隔
    #     blank = '  ' * (11-len(score))  # QQ字体非等宽,width(空格*2) == width(数字*1)
    #     msg.append(f"{blank}{score}分 | {name}")

    # generate statistic figure
    fig, ax = plt.subplots()
    score = list(map(lambda i: i[3], stat))
    yn = len(stat)
    name = list(map(lambda i: i[2], stat))
    y_pos = list(range(yn))

    if score[0] >= 1e8:
        unit = 1e8
        unit_str = 'e'
    else:
        unit = 1e4
        unit_str = 'w'

    y_size = 0.3 * yn + 1.0
    fig.set_size_inches(10, y_size)
    bars = ax.barh(y_pos, score, align='center')
    ax.set_title(f"{clan['name']}{yyyy}年{mm}月会战分数统计")
    ax.set_yticks(y_pos)
    ax.set_yticklabels(name)
    ax.set_ylim((-0.6, yn - 0.4))
    ax.invert_yaxis()
    ax.set_xlabel('分数')
    ax.ticklabel_format(axis='x', style='plain')
    for rect in bars:
        w = rect.get_width()
        ax.text(w,
                rect.get_y() + rect.get_height() / 2,
                f'{w/unit:.2f}{unit_str}',
                ha='left',
                va='center')
    plt.subplots_adjust(left=0.12,
                        right=0.96,
                        top=1 - 0.35 / y_size,
                        bottom=0.55 / y_size)
    await bot.kkr_send(ev, fig)
    plt.close()
    msg = f"※伤害统计请发送“!伤害统计”"
    await bot.kkr_send(ev, msg, at_sender=True)
示例#7
0
async def subscribe(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    uid = ev.get_author_id()
    _check_clan(bm)
    _check_member(bm, uid, bm.group)

    sub = _load_sub(bm.group)
    boss = args['']
    memo = args.M
    boss_name = bm.int2kanji(boss)
    slist = sub.get_sub_list(boss)
    mlist = sub.get_memo_list(boss)
    limit = sub.get_sub_limit(boss)
    if uid in slist:
        raise AlreadyExistError(f'您已经预约过{boss_name}王了')
    msg = ['']
    if len(slist) < limit:
        sub.add_sub(boss, uid, memo)
        _save_sub(sub, bm.group)
        msg.append(f'已为您预约{boss_name}王!')
    else:
        msg.append(f'预约失败:{boss_name}王预约人数已达上限')
    msg.append(f'=== 当前队列 {len(slist)}/{limit} ===')
    msg.extend(_gen_namelist_text(bot, bm, slist, mlist))
    msg.append(SUBSCRIBE_TIP)
    await bot.kkr_send(ev, '\n'.join(msg), at_sender=True)
示例#8
0
async def lock_boss(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    _check_clan(bm)
    _check_member(bm, ev.get_author_id(), bm.group)

    sub = _load_sub(bm.group)
    lock = sub.get_lock_info()
    if lock:
        uid, ts = lock[0]
        time = datetime.fromtimestamp(ts)
        mem = bm.get_member(uid, bm.group) or bm.get_member(uid, 0) or {
            'name': str(uid)
        }
        delta = datetime.now() - time
        delta = timedelta(seconds=round(
            delta.total_seconds()))  # ignore miliseconds
        msg = f"\n锁定失败:{mem['name']}已于{delta}前锁定了Boss"
        await bot.kkr_send(ev, msg, at_sender=True)
    else:
        uid = ev.get_author_id()
        time = datetime.now()
        sub.set_lock(uid, datetime.now().timestamp())
        _save_sub(sub, bm.group)
        msg = f"已锁定Boss"
        await bot.kkr_send(ev, msg, at_sender=True)
示例#9
0
async def _do_show_remain(bot: KokkoroBot, ev: EventInterface,
                          args: ParseResult, at_user: bool):
    bm = BattleMaster(ev.get_group_id())
    clan = _check_clan(bm)

    if at_user:
        _check_admin(ev, '才能催刀。您可以用【!查刀】查询余刀')
    rlist = bm.list_challenge_remain(
        1,
        datetime.now() - timedelta(days=args.get('D', 0)))
    rlist.sort(key=lambda x: x[3] + x[4], reverse=True)
    msg = [f"\n{clan['name']}今日余刀:"]
    sum_remain = 0
    for uid, _, name, r_n, r_e in rlist:
        if r_n or r_e:
            msg.append(
                f"剩{r_n}刀 补时{r_e}刀 | {bot.kkr_at(uid) if at_user else name}")
            sum_remain += r_n

    if len(msg) == 1:
        await bot.kkr_send(ev,
                           f"今日{clan['name']}所有成员均已下班!各位辛苦了!",
                           at_sender=True)
    else:
        msg.append(f'共计剩余{sum_remain}刀')
        msg.append('若有负数说明报刀有误 请注意核对\n使用“!出刀记录 @id”可查看详细记录')
        if at_user:
            msg.append("=========\n在?阿sir喊你出刀啦!")
        await bot.kkr_send(ev, '\n'.join(msg), at_sender=True)
        if at_user:
            await bot.kkr_send(ev, R.img('priconne/催刀.jpg'))
示例#10
0
async def login(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    if False and "this message is from group":  # FIXME
        return '请私聊使用'

    wm = WebMaster()
    uid = ev.get_author_id()
    gid = ev.get_group_id()
    auth = ev.get_author().get_priv()

    member = wm.get_member(uid, gid)
    if member is None:
        await bot.kkr_send(ev, '请先加入公会')
        return
    member['authority_group'] = 100
    if auth == SUPERUSER:
        member['authority_group'] = 1
    elif auth == ADMIN:
        member['authority_group'] = 10
    wm.mod_member(member)

    user = wm.get_or_add_user(uid, rand_string(16))
    login_code = rand_string(6)
    user['login_code'] = login_code
    user['login_code_available'] = True
    user['login_code_expire_time'] = int(time.time()) + 60
    wm.mod_user(user)

    url = urljoin(
        config.PUBLIC_ADDRESS, '{}login/c/#uid={}&key={}'.format(
            config.PUBLIC_BASEPATH,
            user['uid'],
            login_code,
        ))
    await bot.kkr_send_dm(ev, url)
async def description_guess(bot: KokkoroBot, ev: EventInterface):
    try:
        gid = ev.get_group_id()
        if winner_judger.get_on_off_status(gid):
            await bot.kkr_send(ev, "此轮猜角色还没结束 0x0")
            return
        winner_judger.turn_on(gid)
        msg = f'猜猜这是哪位角色?\n※发送"角色提示",可以得到更多信息~\n※回答时请加前缀 dg\n※示例:dg 可可萝'
        await bot.kkr_send(ev, msg)
        desc_lable = ['名字', '公会', '生日', '年龄', '身高', '体重', '血型', '种族', '喜好', '声优']
        desc_suffix = ['', '', '', '', 'cm', 'kg', '', '', '', '']
        index_list = list(range(1,10))
        random.shuffle(index_list)
        chara_id_list = list(_chara_data.CHARA_DATA.keys())
        random.shuffle(chara_id_list)
        chara_id = chara_id_list[0]
        chara_desc_list = _chara_data.CHARA_DATA[chara_id]
        winner_judger.set_result(gid, chara_id)
        # init
        group_hints[gid] = {
            'index_list': index_list,
            'desc_lable': desc_lable,
            'chara_desc_list': chara_desc_list,
            'desc_suffix': desc_suffix
        }
        group_hint_cnt[gid] = 0
        await hint(bot, ev)
    except Exception as e:
        winner_judger.turn_off(gid)
        raise e
示例#12
0
async def add_member(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    clan = _check_clan(bm)

    uid = args['@'] or args.uid
    name = args[''] or args.name
    author = ev.get_author()

    if uid == None:
        uid = ev.get_author_id()
    else:
        if uid != ev.get_author_id():
            _check_admin(ev, '才能添加其他人')
            #  if not ev.whether_user_in_group(uid):
            #  raise NotFoundError(f'Error: 无法获取该群员信息,请检查{uid}是否属于本群')
        ## if we can't get name from mentions
        # if not name and :
        #     m = await bot.get_group_member_info(self_id=ctx['self_id'], group_id=bm.group, user_id=uid)
        #     name = m['card'] or m['nickname'] or str(m['user_id'])

    name = name or author.get_nick_name() or author.get_name()

    mem = bm.get_member(uid, bm.group) or bm.get_member(uid, 0)  # 兼容cmdv1
    if mem:
        bm.mod_member(uid, mem['alt'], name, 1)
        await bot.kkr_send(ev, f'成员{bot.kkr_at(uid)}昵称已修改为{name}')
    else:
        bm.add_member(uid, bm.group, name, 1)
        await bot.kkr_send(
            ev, f"成员{bot.kkr_at(uid)}添加成功!欢迎{name}加入{clan['name']}")
async def clear_member(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    clan = _check_clan(bm)

    _check_admin(ev)
    msg = f"{clan['name']}已清空!" if bm.clear_member() else f"{clan['name']}已无成员"
    await bot.kkr_send(ev, msg, at_sender=True)
示例#14
0
async def avatar_guess(bot: KokkoroBot, ev: EventInterface):
    try:
        gid = ev.get_group_id()
        if winner_judger.get_on_off_status(gid):
            await bot.kkr_send(ev, "此轮猜头像还没结束 0x0")
            return

        winner_judger.turn_on(gid)
        chara_id_list = list(_pcr_data.CHARA_NAME.keys())
        random.shuffle(chara_id_list)
        i = 0
        while chara_id_list[i] in BLACKLIST_ID:
            i += 1
        correct_id = chara_id_list[i]
        winner_judger.set_result(gid, correct_id)

        msg = f'猜猜这个图片是哪位角色头像的一部分?\n※发送"头像提示",可以得到更多信息~\n※回答时请加前缀 ag\n※示例:ag 可可萝'
        await bot.kkr_send(ev, msg)

        group_hint_cnt[gid] = 0
        await hint(bot, ev)

    except Exception as e:
        winner_judger.turn_off(gid)
        raise e
async def send_time_dist(bot: KokkoroBot, event: EventInterface):
    gid = event.get_group_id()
    year,month = get_ym()

    try:
        name,times = get_time(gid,year,month)
    except Exception as e:
        await bot.kkr_send(event, f"出现错误: {str(e)}\n请联系开发组调教。")
        return

    plt.rcParams['axes.unicode_minus']=False
    prop = fm.FontProperties(fname=FONT_PATH)
    prop.set_size('large')
    fig,ax = plt.subplots(figsize=(12,6),facecolor='white')
    ax.set_xlabel('时间',fontproperties=prop)
    ax.set_ylabel('刀数',fontproperties=prop)
    ax.set_title(f'{name}{year}年{month}月会战出刀时间统计',fontproperties=prop)
    ax.set_xlim((0-0.5,24))
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    colors=(['#808080']*6)+(['#9bc5af']*6)+(['#c54731']*6)+(['#3a4a59']*6)
    plt.xticks(range(24),fontproperties=prop)
    plt.bar(range(24),times,color=colors)
    
    await bot.kkr_send(event, fig)
    plt.close()
示例#16
0
async def del_member(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    uid = args['@'] or args.uid or ev.get_author_id()
    mem = _check_member(bm, uid, bm.group, '公会内无此成员')

    if uid != ev.get_author_id():
        _check_admin(ev, '才能踢人')
    bm.del_member(uid, mem['alt'])
    await bot.kkr_send(ev, f"成员{mem['name']}已从公会删除", at_sender=True)
示例#17
0
async def list_sos(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    clan = _check_clan(bm)

    sub = _load_sub(bm.group)
    tree = sub.get_tree_list()
    msg = [f"\n目前{clan['name']}挂树人数为{len(tree)}人:"]
    msg.extend(_gen_namelist_text(bot, bm, tree))
    await bot.kkr_send(ev, '\n'.join(msg), at_sender=True)
示例#18
0
async def show_progress(bot: KokkoroBot, ev: EventInterface,
                        args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    clan = _check_clan(bm)

    r, b, hp = bm.get_challenge_progress(1, datetime.now())
    max_hp, score_rate = bm.get_boss_info(r, b, clan['server'])
    msg = _gen_progress_text(clan['name'], r, b, hp, max_hp, score_rate)
    await bot.kkr_send(ev, '\n' + msg, at_sender=True)
示例#19
0
async def list_member(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    clan = _check_clan(bm)

    mems = bm.list_member(1)
    if l := len(mems):
        # 数字太多会被腾讯ban
        mems = map(lambda x: '{uid} | {name}'.format_map(x), mems)
        msg = [f"\n{clan['name']}   {l}/30 人\n____ ID ____ | 昵称", *mems]
        await bot.kkr_send(ev, '\n'.join(msg), at_sender=True)
async def list_clan(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    clans = bm.list_clan()
    if len(clans):
        clans = map(lambda x: f"{x['name']}({server_name(x['server'])})",
                    clans)
        msg = ['本群指定唯一公会:', *clans]
        await bot.kkr_send(ev, '\n'.join(msg), at_sender=True)
    else:
        raise NotFoundError(ERROR_CLAN_NOTFOUND)
示例#21
0
async def avatar_guess(bot: KokkoroBot, ev: EventInterface):
    gid = ev.get_group_id()
    if winner_judger.get_on_off_status(gid):
        correct_id = winner_judger.get_result(gid)
        c = chara.fromid(correct_id)
        msg = f'正确答案是: {c.name}\n很遗憾,没有人答对~'
        await bot.kkr_send(ev, msg)
        await bot.kkr_send(ev, c.icon)

        winner_judger.turn_off(gid)
示例#22
0
async def lssv(bot: KokkoroBot, ev: EventInterface):
    parser = ArgumentParser()
    parser.add_argument('-a', '--all', action='store_true')
    parser.add_argument('-i', '--invisible', action='store_true')
    parser.add_argument('-g', '--group', type=int, default=0)
    args = parser.parse_args(ev.get_param().remain)

    verbose_all = args.all
    only_hidden = args.invisible
    if ev.get_author_id() in bot.config.SUPER_USER:
        gid = args.group or ev.get_group_id()
        if not gid:
            await bot.kkr_send(ev, 'Usage: -g|--group <group_id> [-a|--all]')
            return
    else:
        gid = ev.get_group_id()

    msg = svs_to_msg(Service.get_loaded_services().values(), gid, verbose_all,
                     only_hidden)
    await bot.kkr_send(ev, msg)
示例#23
0
async def add_challenge_timeout(bot: KokkoroBot, ev: EventInterface,
                                args: ParseResult):
    challenge = ParseResult({
        'round': args.R,
        'boss': args.B,
        'damage': 0,
        'uid': args['@'] or args.uid or ev.get_author_id(),
        'alt': ev.get_group_id(),
        'flag': BattleMaster.TIMEOUT
    })
    await process_challenge(bot, ev, challenge)
示例#24
0
async def select_player(bot, ev: EventInterface, pkey):
    global g_result_dict, g_uid_dict
    gid = ev.get_group_id()
    id_ = chara.name2id(pkey)
    p = chara.fromid(id_)
    if p.name not in g_result_dict[gid]:
        await bot.kkr_send(ev, f'所选角色未在参赛角色中')
        return
    await bot.kkr_send(ev, f'已选择{p.name},比赛开始', at_sender=True)
    await compe(bot, ev, p.name)
    g_uid_dict[gid] = 0
async def hint(bot: KokkoroBot, ev: EventInterface):
    gid = ev.get_group_id()
    if not winner_judger.get_on_off_status(gid):
        await bot.kkr_send(ev, '尚未开始猜角色0x0')
        return
    cnt = group_hint_cnt[gid]
    if cnt >= HINT_LIMIT:
        await bot.kkr_send(ev, '提示次数用完啦0x0\n输入"角色答案"查看答案')
        return
    hints = group_hints[gid]
    desc_index = hints['index_list'][cnt]
    await bot.kkr_send(ev, f'提示{cnt+1}/{HINT_LIMIT}:\n她的{hints["desc_lable"][desc_index]}是 {hints["chara_desc_list"][desc_index]}{hints["desc_suffix"][desc_index]}')
    group_hint_cnt[gid] += 1
async def force_start(bot: KokkoroBot, ev: EventInterface):
    gid = ev.get_group_id()
    horse_status: HorseStatus = g_status_dict.get(gid)
    if horse_status == None:
        await bot.kkr_send(ev, f'比赛尚未开始,发送指令"多人赛🐴"发起多人游戏', at_sender=True)
    elif horse_status.is_unselected():
        # single player unselected and multi player unselected
        await bot.kkr_send(ev, f'请至少先选中一匹🐴', at_sender=True)
    else:
        await bot.kkr_send(ev, f'比赛开始')
        res = horse_status.get_result()
        await bot.kkr_send(ev, f'{res}')
        clean(gid)
示例#27
0
async def add_clan(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    _check_admin(ev)
    bm = BattleMaster(ev.get_group_id())
    if bm.has_clan(1):
        bm.mod_clan(1, args.N, args.S)
        await bot.kkr_send(ev,
                           f'公会信息已修改!\n{args.N} {server_name(args.S)}',
                           at_sender=True)
    else:
        bm.add_clan(1, args.N, args.S)
        await bot.kkr_send(ev,
                           f'公会建立成功!{args.N} {server_name(args.S)}',
                           at_sender=True)
示例#28
0
async def _select_(bot, ev: EventInterface):
    global g_uid_dict, g_result_dict
    gid = ev.get_group_id()
    uid = ev.get_author_id()
    if uid != g_uid_dict[gid] and g_result_dict[gid] != []:
        await bot.kkr_send(ev, f'仅限比赛发起人进行选择~')
    elif uid != g_uid_dict[gid] and g_result_dict[gid] == []:
        await bot.kkr_send(ev,
                           f'上一场比赛已经结束,您可以用“@bot赛跑模拟”发起新的比赛',
                           at_sender=True)
    elif uid == g_uid_dict[gid]:
        await select_player(bot, ev, ev.get_param().remain)
    else:
        await bot.kkr_send(ev, f'出现错误,请联系维护组嘤嘤嘤')
示例#29
0
async def boss_slayer(bot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    clan = _check_clan(bm)
    if clan['server'] == BattleMaster.SERVER_CN:
        servertag = '**国服合刀**'
        ext0 = 100
    else:
        servertag = '**日服/台服合刀**'
        ext0 = 110  # 日服补偿刀20秒起

    remain = ev.get_param().remain
    prm = re.findall("\d+[wW万]", remain)
    if len(prm) == 2:
        dmg1 = int(prm[0][:-1]) * 10000
        dmg2 = int(prm[1][:-1]) * 10000
    else:
        prm = re.findall("\d+", remain)
        if len(prm) == 2:
            dmg1 = int(prm[0])
            dmg2 = int(prm[1])
        else:
            usage = "【用法/用例】\n!补偿刀计算 50w 60w"
            await bot.kkr_send(ev, usage, at_sender=True)
            return

    r, b, hp = bm.get_challenge_progress(1, datetime.now())

    if dmg1 + dmg2 < hp:
        msg = '0x0 这两刀合起来还打不死BOSS喔'
    else:
        if dmg1 >= hp and dmg2 >= hp:
            ans1 = f'先出{dmg1:,},BOSS直接就被打死啦'
            ans2 = f'先出{dmg2:,},BOSS直接就被打死啦'
        elif dmg1 >= hp and dmg2 < hp:
            ans1 = f'先出{dmg1:,},BOSS直接就被打死啦'
            ext2 = min(math.ceil(ext0 - ((hp - dmg2) / dmg1) * 90), 90)
            ans2 = f'先出{dmg2:,}再出{dmg1:,},返还时间{ext2}秒'
        elif dmg1 < hp and dmg2 >= hp:
            ext1 = min(math.ceil(ext0 - ((hp - dmg1) / dmg2) * 90), 90)
            ans1 = f'先出{dmg1:,}再出{dmg2:,},返还时间{ext1}秒'
            ans2 = f'先出{dmg2:,},BOSS直接就被打死啦'
        else:
            ext1 = min(math.ceil(ext0 - ((hp - dmg1) / dmg2) * 90), 90)
            ans1 = f'先出{dmg1:,}再出{dmg2:,},返还时间{ext1}秒'
            ext2 = min(math.ceil(ext0 - ((hp - dmg2) / dmg1) * 90), 90)
            ans2 = f'先出{dmg2:,}再出{dmg1:,},返还时间{ext2}秒'

        not_my_fault = "计算结果仅供参考,可能与游戏内实际返还时间有偏差"
        msg = '\n'.join([servertag, ans1, ans2, not_my_fault])
    await bot.kkr_send(ev, msg, at_sender=False)
示例#30
0
async def list_subscribe(bot: KokkoroBot, ev: EventInterface,
                         args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    clan = _check_clan(bm)

    msg = [f"\n{clan['name']}当前预约情况:"]
    sub = _load_sub(bm.group)
    for boss in range(1, 6):
        slist = sub.get_sub_list(boss)
        mlist = sub.get_memo_list(boss)
        limit = sub.get_sub_limit(boss)
        msg.append(f"========\n{bm.int2kanji(boss)}王: {len(slist)}/{limit}")
        msg.extend(_gen_namelist_text(bot, bm, slist, mlist))
    await bot.kkr_send(ev, '\n'.join(msg), at_sender=True)