Example #1
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']}")
Example #2
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)
Example #3
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)
Example #4
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))
Example #5
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)
Example #6
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)
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)
Example #8
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 decherulize(bot: KokkoroBot, ev: EventInterface):
    s = ev.get_param().remain
    if len(s) > 1501:
        await bot.kkr_send(ev, '切、切噜太长切不动勒切噜噜...', at_sender=True)
        return
    msg = bot.kkr_at(ev.get_author_id()) + '的切噜噜是:\n' + escape(cheru2str(s))
    # if random.random() < 0.2:
    #     await cheru_record(bot, ev)
    await bot.kkr_send(ev, msg)
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(),
        'flag': BattleMaster.TIMEOUT
    })
    await process_challenge(bot, ev, challenge)
Example #11
0
async def add_challenge_last(bot: KokkoroBot, ev: EventInterface,
                             args: ParseResult):
    challenge = ParseResult({
        'round': args.R,
        'boss': args.B,
        'damage': args.get(''),
        'uid': args['@'] or args.uid or ev.get_author_id(),
        'alt': ev.get_group_id(),
        'flag': BattleMaster.LAST
    })
    await process_challenge(bot, ev, challenge)
Example #12
0
async def _select_(bot, ev: EventInterface):
    global g_uid, g_result
    uid = ev.get_author_id()
    if uid != g_uid and g_result != []:
        await bot.kkr_send(ev, f'仅限比赛发起人进行选择~')
    elif uid != g_uid and g_result == []:
        await bot.kkr_send(ev, f'上一场比赛已经结束,您可以用“@bot赛跑模拟”发起新的比赛', at_sender=True)
    elif uid == g_uid:
        await select_player(bot, ev,  ev.get_param().remain)
    else:
        await bot.kkr_send(ev, f'出现错误,请联系维护组嘤嘤嘤')
Example #13
0
def reset_pwd(ev: EventInterface):
    wm = WebMaster()
    user = wm.get_or_add_user(ev.get_author_id(), rand_string(16))
    raw_pwd = rand_string(8)
    frontend_salted_pwd = add_salt_and_hash(raw_pwd + user['uid'],
                                            FRONTEND_SALT)
    user['password'] = add_salt_and_hash(frontend_salted_pwd, user['salt'])
    user['privacy'] = 0
    user['must_change_password'] = 1
    wm.mod_user(user)
    wm.del_login(user['uid'])
    return raw_pwd
Example #14
0
async def luck(bot: KokkoroBot, ev: EventInterface):
    uid = ev.get_author_id()
    if not lmt.check(uid):
        await bot.kkr_send(ev, f'你今天已经抽过签了,欢迎明天再来~', at_sender=True)
        return
    lmt.increase(uid)

    #model = 'KYARU'
    model = 'DEFAULT'

    luck_img = generate_luck_image(model)
    await bot.kkr_send(ev, luck_img)
async def give_okodokai(bot, ev: EventInterface):
    uid = ev.get_author_id()
    if not lmt.check(uid):
        await bot.kkr_send(ev, '明日はもう一つプレゼントをご用意してお待ちしますね', at_sender=True)
        return
    lmt.increase(uid)
    present = random.choice(login_presents)
    todo = random.choice(todo_list)
    await bot.kkr_send(ev, R.img("priconne/kokkoro_stamp.png"))
    await bot.kkr_send(
        ev,
        f'\nおかえりなさいませ、主さま\n{present}を獲得しました\n私からのプレゼントです\n主人今天要{todo}吗?',
        at_sender=True)
async def add_challenge(bot: KokkoroBot, ev: EventInterface,
                        args: ParseResult):
    challenge = ParseResult({
        'round': args.R,
        'boss': args.B,
        'damage': args.get(''),
        'uid': args['@'] or args.uid or ev.get_author_id(),
        'flag': BattleMaster.NORM,
        'dayoffset': args.get('D', 0)
    })
    await process_challenge(bot, ev, challenge)

    damage = args.get('')
    if isDD(damage):
        await jiuzhe(bot, ev)
Example #17
0
async def get_last_5_weibo(bot: KokkoroBot, ev: EventInterface):
    uid = ev.get_author_id()
    if not lmt.check(uid):
        await bot.kkr_send(ev, '您查询得过于频繁,请稍等片刻', at_sender=True)
        return

    lmt.start_cd(uid)

    params = ev.get_param().remain.split(' ')
    if len(params) == 0 or params[0] == '':
        await bot.kkr_send(ev, f'使用方法:看微博 <微博别称> <1-5的数字>\n仅支持主动查看最新5条微博~')
        return
    alias = params[0]
    if len(params) == 1:
        amount = 5
    else:
        try:
            amount = int(params[1])
        except Exception as e:
            await bot.kkr_send(ev,
                               f'使用方法:看微博  {alias} <1-5的数字>\n仅支持主动查看最新5条微博~')
            return
        if amount >= 5 or amount <= 0:
            amount = 5

    if alias not in alias_dic:
        await bot.kkr_send(ev, f"未找到微博: {alias}")
        return

    service_name = alias_dic[alias]["service_name"]
    user_id = alias_dic[alias]["user_id"]

    spiders = subr_dic[service_name]["spiders"]
    for spider in spiders:
        if spider.get_user_id() == user_id:
            last_5_weibos = spider.get_last_5_weibos()
            weibos = last_5_weibos[-amount:]
            formatted_weibos = [wb_to_message(wb) for wb in weibos]
            for wb in formatted_weibos:
                await bot.kkr_send(ev, wb[0])  # send text
                imgs = wb[1]
                for img in imgs:
                    await bot.kkr_send(ev, img)  # send img
                await bot.kkr_send(ev, "===================================")
            await bot.kkr_send(ev,
                               f"以上为 {alias} 的最新 {len(formatted_weibos)} 条微博")
            return
    await bot.kkr_send(ev, f"未找到微博: {alias}")
Example #18
0
async def add_sos(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    uid = ev.get_author_id()
    clan = _check_clan(bm)
    _check_member(bm, uid, bm.group)

    sub = _load_sub(bm.group)
    tree = sub.get_tree_list()
    if uid in tree:
        raise AlreadyExistError("您已在树上")
    sub.add_tree(uid)
    _save_sub(sub, bm.group)
    msg = ["\n您已上树,本Boss被击败时将会通知您", f"目前{clan['name']}挂树人数为{len(tree)}人:"]
    msg.extend(_gen_namelist_text(bot, bm, tree))
    await bot.kkr_send(ev, '\n'.join(msg), at_sender=True)
    await bot.kkr_send(ev, R.img('priconne/挂树.jpg'))
Example #19
0
async def del_challenge(bot: KokkoroBot, ev: EventInterface,
                        args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    now = datetime.now()
    clan = _check_clan(bm)

    ch = bm.get_challenge(args.E, 1, now)
    if not ch:
        raise NotFoundError(f'未找到出刀记录E{args.E}')
    if ch['uid'] != ev.get_author_id():
        _check_admin(ev, '才能删除其他人的记录')
    bm.del_challenge(args.E, 1, now)
    await bot.kkr_send(
        ev,
        f"{clan['name']}已删除{bot.kkr_at(ch['uid'])}的出刀记录E{args.E}",
        at_sender=True)
Example #20
0
async def description_guess_group_ranking(bot: KokkoroBot, ev: EventInterface):
    members = ev.get_members_in_group()
    card_winningcount_dict = {}
    winning_counter = WinningCounter(DB_PATH)
    for member in members:
        if member.get_id() != ev.get_author_id():
            card_winningcount_dict[
                member.get_nick_name()] = winning_counter._get_winning_number(
                    ev.get_group_id(), member.get_id())
    group_ranking = sorted(card_winningcount_dict.items(),
                           key=lambda x: x[1],
                           reverse=True)
    msg = '猜头像小游戏此群排行为:\n'
    for i in range(min(len(group_ranking), 10)):
        if group_ranking[i][1] != 0:
            msg += f'第{i+1}名: {group_ranking[i][0]}, 猜对次数: {group_ranking[i][1]}次\n'
    await bot.kkr_send(ev, msg.strip())
async def auto_unlock_boss(bot: KokkoroBot, ev: EventInterface,
                           bm: BattleMaster):
    sub = _load_sub(bm.group)
    lock = sub.get_lock_info()
    if lock:
        uid, ts = lock[0]
        time = datetime.fromtimestamp(ts)
        if uid != ev.get_author_id():
            mem = bm.get_member(uid) or {'name': str(uid)}
            delta = datetime.now() - time
            delta = timedelta(seconds=round(
                delta.total_seconds()))  # ignore miliseconds
            msg = f"⚠️{mem['name']}于{delta}前锁定了Boss,您出刀前未申请锁定!"
            await bot.kkr_send(ev, msg, at_sender=True)
        else:
            sub.clear_lock()
            _save_sub(sub, bm.group)
            msg = f"\nBoss已自动解锁"
            await bot.kkr_send(ev, msg, at_sender=True)
Example #22
0
async def unsubscribe(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['']
    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 not in slist:
        raise NotFoundError(f'您没有预约{boss_name}王')
    sub.remove_sub(boss, uid)
    _save_sub(sub, bm.group)
    msg = [f'\n已为您取消预约{boss_name}王!']
    msg.append(f'=== 当前队列 {len(slist)}/{limit} ===')
    msg.extend(_gen_namelist_text(bot, bm, slist, mlist))
    await bot.kkr_send(ev, '\n'.join(msg), at_sender=True)
Example #23
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)
async def on_input_chara_name(bot: KokkoroBot, ev: EventInterface):
    gid = ev.get_group_id()
    uid = ev.get_author_id()
    if winner_judger.get_on_off_status(gid):
        s = ev.get_param().remain
        cid = chara.name2id(s)
        correct_id = winner_judger.get_result(gid)
        if cid != chara.UNKNOWN and cid == winner_judger.get_result(gid) and winner_judger.get_winner(gid) == None:
            winner_judger.record_winner(gid, uid)
            winning_counter = WinningCounter(DB_PATH)
            winning_counter._record_winning(gid, uid)
            winning_count = winning_counter._get_winning_number(gid, uid)
            nick = ev.get_author().get_nick_name()
            msg_part = f'{nick}猜对了,真厉害!TA已经猜对{winning_count}次了~'
            c = chara.fromid(correct_id)
            msg =  f'正确答案是: {c.name}'
            await bot.kkr_send(ev, msg)
            await bot.kkr_send(ev, c.icon)
            await bot.kkr_send(ev, msg_part)

            winner_judger.turn_off(gid)
async def unlock_boss(bot: KokkoroBot, ev: EventInterface, args: ParseResult):
    bm = BattleMaster(ev.get_group_id())
    _check_clan(bm)

    sub = _load_sub(bm.group)
    lock = sub.get_lock_info()
    if lock:
        uid, ts = lock[0]
        time = datetime.fromtimestamp(ts)
        if uid != ev.get_author_id():
            mem = bm.get_member(uid) or {'name': str(uid)}
            delta = datetime.now() - time
            delta = timedelta(seconds=round(
                delta.total_seconds()))  # ignore miliseconds
            _check_admin(ev, f"才能解锁其他人\n解锁失败:{mem['name']}于{delta}前锁定了Boss")
        sub.clear_lock()
        _save_sub(sub, bm.group)
        msg = f"\nBoss已解锁"
        await bot.kkr_send(ev, msg, at_sender=True)
    else:
        msg = "\n无人锁定Boss"
        await bot.kkr_send(ev, msg, at_sender=True)
async def send_normal_report(bot:KokkoroBot, event:EventInterface):
    uid = event.get_author_id()
    nickname = event.get_author().get_nick_name()
    gid = event.get_group_id()
    report = gen_report(gid, uid, nickname, type=REPORT_NORMAL)
    await bot.kkr_send(event, report)
Example #27
0
async def send_report(bot:KokkoroBot, event:EventInterface, type=REPORT_UNDECLARED):

    if type not in (REPORT_RESIGN,REPORT_NORMAL):
        await bot.kkr_send(event, "类型错误!", at_sender=True)
        return

    uid = event.get_author_id()
    nickname = event.get_author().get_nick_name()
    gid = event.get_group_id()

    if not _lmt.check(uid):
        await bot.kkr_send(event, f'每{int(_time_limit/60)}分钟仅能生成一次报告', at_sender=True)
        return
    _lmt.start_cd(uid)

    now = datetime.datetime.now()
    year = now.year
    month = now.month-1
    if month==0:
        year -= 1
        month = 12
    constellation = b_constellations[month-1]

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

    if challenges.shape[0] == 0:
        await bot.kkr_send(event, "您没有参加本次公会战。请再接再厉!", at_sender=True)
        return

    total_chl = 0
    miss_chl = 0
    damage_to_boss: list = [0 for i in range(5)]
    times_to_boss: list = [0 for i in range(5)]
    truetimes_to_boss: list = [0 for i in range(5)]
    total_damage = 0

    for idx,chl in challenges.iterrows():
        total_damage += chl['dmg']
        times_to_boss[chl['boss']-1] += 1
        if chl['flag'] == 0:
            damage_to_boss[chl['boss']-1] += chl['dmg']
            truetimes_to_boss[chl['boss']-1] += 1
        if chl['flag'] != 1:
            total_chl += 1
        if chl['dmg'] == 0:
        	miss_chl += 1

    avg_day_damage = int(total_damage/6)
    df=pd.DataFrame({'a':damage_to_boss,'b':truetimes_to_boss})
    result=(df.a/df.b).replace(np.inf,0).fillna(0)
    avg_boss_damage = list(result)
    if total_chl >= 18:
        disable_chl = 0
        attendance_rate = 100
    else:
        disable_chl = 18 - total_chl
        attendance_rate = round(total_chl/18*100,2)

    #日期转字符串
    year=str(year)
    month=str(month)
    
    #设置中文字体
    plt.rcParams['font.family'] = ['Microsoft YaHei']
    x = [f'{x}王' for x in range(1,6)]
    y = times_to_boss
    plt.figure(figsize=(4.3,2.8))
    ax = plt.axes()

    #设置标签大小
    plt.tick_params(labelsize=15)

    #设置y轴不显示刻度
    plt.yticks([])

    #绘制刀数柱状图
    recs = ax.bar(x,y,width=0.618,color=['#fd7fb0','#ffeb6b','#7cc6f9','#9999ff','orange'],alpha=0.4)

    #删除边框
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.spines['bottom'].set_visible(False)
    ax.spines['left'].set_visible(False)

    #设置数量显示
    for i in range(0,5):
        rec = recs[i]
        h = rec.get_height()
        plt.text(rec.get_x()+0.1, h, f'{int(times_to_boss[i])}刀',fontdict={"size":12})
    buf = BytesIO()
    plt.savefig(buf, format='png', transparent=True, dpi=120)
    bar_img1 = Image.open(buf)
    #清空图
    plt.clf()

    x = [f'{x}王' for x in range(1,6)]
    y = avg_boss_damage
    plt.figure(figsize=(4.3,2.8))
    ax = plt.axes()

    #设置标签大小
    plt.tick_params(labelsize=15)

    #设置y轴不显示刻度
    plt.yticks([])

    #绘制均伤柱状图
    recs = ax.bar(x,y,width=0.618,color=['#fd7fb0','#ffeb6b','#7cc6f9','#9999ff','orange'],alpha=0.4)

    #删除边框
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.spines['bottom'].set_visible(False)
    ax.spines['left'].set_visible(False)

    #设置数量显示
    for i in range(0,5):
        rec = recs[i]
        h = rec.get_height()
        plt.text(rec.get_x(), h, f'{int(avg_boss_damage[i]/10000)}万',fontdict={"size":12})

    buf = BytesIO()
    plt.savefig(buf, format='png', transparent=True, dpi=120)
    bar_img2 = Image.open(buf)

    #将饼图和柱状图粘贴到模板图,mask参数控制alpha通道,括号的数值对是偏移的坐标
    current_folder = os.path.dirname(__file__)
    img = background1.open() if type==REPORT_RESIGN else background2.open()
    R
    img.paste(bar_img1, (580,950), mask=bar_img1.split()[3])
    img.paste(bar_img2, (130,950), mask=bar_img2.split()[3])

    #添加文字到img
    row1 = f'''
    {total_chl}

    {disable_chl}

    {total_damage}
    '''
    row2 = f'''
    {attendance_rate}%

    {miss_chl}

    {avg_day_damage}
    '''
    
    add_text(img, row1, position=(380,630), textsize=35, textfill='black')
    add_text(img, row2, position=(833,630), textsize=35, textfill='black')
    add_text(img, year, position=(355,438), textsize=40, textfill='black')
    add_text(img, month, position=(565,438), textsize=40, textfill='black')
    add_text(img, constellation, position=(710,438), textsize=40, textfill='black')
    if len(clanname) <= 7:
        add_text(img, clanname, position=(300+(7-len(clanname))/2*40, 515), textsize=40, textfill='black')
    else:
        add_text(img, clanname, position=(300+(10-len(clanname))/2*30, 520), textsize=30, textfill='black')
    add_text(img, nickname, position=(280,365), textsize=35, textfill='white')
    #输出
    await bot.kkr_send(event, img)
    plt.close('all')