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))
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))
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)
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)
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 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)
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'))
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
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)
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()
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)
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)
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)
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)
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)
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 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)
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)
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)
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'出现错误,请联系维护组嘤嘤嘤')
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)
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)