def active_skill_header(cls, m: "MonsterModel", previous_transforms: List["MonsterModel"]): active_skill = m.active_skill if len(previous_transforms) == 0: active_cd = "({} -> {})".format(active_skill.turn_max, active_skill.turn_min) \ if active_skill else 'None' else: skill_texts = [] previous_transforms.reverse() for i, mon in enumerate(previous_transforms): skill = mon.active_skill # we can assume skill is not None because the monster transforms cooldown_text = '({}cd)'.format(str(skill.turn_max)) if skill.turn_min != skill.turn_max: cooldown_text = '{} -> {}'.format(skill.turn_min, skill.turn_max) skill_texts.append('{}{}'.format( get_emoji(cls.transform_emoji_names[i % len( cls.transform_emoji_names)]), cooldown_text)) skill_texts.append('{} ({} cd)'.format( get_emoji(cls.up_emoji_name), m.active_skill.turn_max)) active_cd = ' '.join(skill_texts) return Box(BoldText('Active Skill'), BoldText(active_cd), delimiter=' ')
def embed(cls, state: TransformInfoViewState): base_mon = state.base_mon transformed_mon = state.transformed_mon lsmultiplier = state.query_settings.lsmultiplier fields = [ EmbedField( '/'.join(['{}'.format(t.name) for t in transformed_mon.types]), Box( Box(get_emoji(cls.up_emoji_name), cls.normal_awakenings_row(transformed_mon) if len(transformed_mon.awakenings) != 0 else Box( Text('No Awakenings')), delimiter=' '), TransformInfoView.base_info(base_mon), cls.killers_row(base_mon, base_mon)), ), EmbedField(BoldText(transformat('Card info')), TransformInfoView.card_info(base_mon, transformed_mon, state.acquire_raw), inline=True), EmbedField(BoldText('Stats -> ' + transformat('Transform')), TransformInfoView.stats(base_mon, transformed_mon), inline=True), EmbedField( transformat( TransformInfoView.transform_active_header( transformed_mon).to_markdown()), Box( Text( cls.active_skill_text(transformed_mon.active_skill, state.awoken_skill_map)), TransformInfoView.base_active_header( base_mon).to_markdown(), Text( cls.active_skill_text(base_mon.active_skill, state.awoken_skill_map)))), EmbedField( transformat( TransformInfoView.leader_header(transformed_mon, False, lsmultiplier, base_mon).to_markdown()), Box( Text(transformed_mon.leader_skill.desc if transformed_mon. leader_skill else 'None'), TransformInfoView.leader_header(base_mon, True, lsmultiplier, base_mon).to_markdown(), Text(base_mon.leader_skill.desc if base_mon. leader_skill else 'None'))) ] return EmbedView(EmbedMain(color=state.color, title=MonsterHeader.fmt_id_header( transformed_mon, False, state.is_jp_buffed).to_markdown(), url=puzzledragonx(transformed_mon)), embed_thumbnail=EmbedThumbnail( MonsterImage.icon(transformed_mon)), embed_footer=embed_footer_with_state(state), embed_fields=fields)
def active_skill_header(m: "MonsterModel"): active_skill = m.active_skill active_cd = "({} -> {})".format(active_skill.turn_max, active_skill.turn_min) if active_skill else 'None' return Box( BoldText('Active Skill'), BoldText(active_cd), delimiter=' ' )
def leader_skill_header(m: "MonsterModel", lsmultiplier: LsMultiplier, transform_base: "MonsterModel"): return Box( BoldText('Leader Skill'), BoldText(ls_multiplier_text(m.leader_skill) if lsmultiplier == LsMultiplier.lsdouble else get_emoji('1x') + ' ' + ls_single_multiplier_text(m.leader_skill)), BoldText('(' + get_emoji( '\N{DOWN-POINTING RED TRIANGLE}') + '7x6)') if m != transform_base and transform_base.leader_skill.is_7x6 else None, delimiter=' ' )
def misc_info(m: "MonsterModel", true_evo_type_raw: str, acquire_raw: str, base_rarity: str): rarity = Box( LabeledText('Rarity', str(m.rarity)), Text('({})'.format(LabeledText('Base', str(base_rarity)).to_markdown())), Text("" if m.orb_skin_id is None else "(Orb Skin)"), delimiter=' ' ) cost = LabeledText('Cost', str(m.cost)) acquire = BoldText(acquire_raw) if acquire_raw else None valid_true_evo_types = ("Reincarnated", "Assist", "Pixel", "Super Reincarnated") true_evo_type = BoldText(true_evo_type_raw) if true_evo_type_raw in valid_true_evo_types else None return Box(rarity, cost, acquire, true_evo_type)
def embed(state: LeaderSkillViewState): lls = state.l_mon.leader_skill rls = state.r_mon.leader_skill return EmbedView(embed_main=EmbedMain( title=ls_multiplier_text(lls, rls), description=Box( BoldText( MonsterHeader.name(state.l_mon, link=True, show_jp=True)), Text(lls.desc if lls else 'None'), BoldText( MonsterHeader.name(state.r_mon, link=True, show_jp=True)), Text(rls.desc if rls else 'None')), color=state.color), embed_footer=embed_footer_with_state(state))
def embed(state: TransformInfoViewState): base_mon = state.base_mon transformed_mon = state.transformed_mon fields = [ EmbedField( '/'.join(['{}'.format(t.name) for t in transformed_mon.types]), Box( Box(TRANSFORM_EMOJI, IdView.normal_awakenings_row(transformed_mon) if len(transformed_mon.awakenings) != 0 else Box( Text('No Awakenings')), delimiter=' '), base_info(base_mon), IdView.killers_row(base_mon, base_mon)), ), EmbedField(BoldText(transformat('Card info')), card_info(base_mon, transformed_mon, state.acquire_raw), inline=True), EmbedField(BoldText('Stats -> ' + transformat('Transform')), stats(base_mon, transformed_mon), inline=True), EmbedField( transformat( transform_active_header(transformed_mon).to_markdown()), Box( Text(transformed_mon.active_skill.desc if transformed_mon. active_skill else 'None'), base_active_header(base_mon).to_markdown(), Text(base_mon.active_skill.desc if base_mon. active_skill else 'None'))), EmbedField( transformat( leader_header(transformed_mon, False).to_markdown()), Box( Text(transformed_mon.leader_skill.desc if transformed_mon. leader_skill else 'None'), leader_header(base_mon, True).to_markdown(), Text(base_mon.leader_skill.desc if base_mon. leader_skill else 'None'))) ] return EmbedView(EmbedMain( color=state.color, title=MonsterHeader.long_v2(transformed_mon).to_markdown(), url=puzzledragonx(transformed_mon)), embed_thumbnail=EmbedThumbnail( MonsterImage.icon(transformed_mon)), embed_footer=embed_footer_with_state(state), embed_fields=fields)
def transform_active_header(m: "MonsterModel"): active_skill = m.active_skill active_cd = '({} cd)'.format( active_skill.turn_min) if active_skill else 'None' return Box(TRANSFORM_EMOJI, BoldText('Transform Active Skill {}'.format(active_cd)), delimiter=' ')
def embed(cls, state: MonsterListViewState): fields = [] if not cls.has_subqueries(state): fields.append( EmbedField( state.title, Box(*cls.monster_list(state.monster_list, state.current_monster_id, state.query_settings)))) else: cur_subq_id = None cur_mon_list = [] offset = 0 i = 0 for m in state.monster_list: subq_id = state.extra_info.get_subquery_mon(m.monster_id) if cur_mon_list and subq_id != cur_subq_id: title = MonsterHeader.box_with_emoji( state.extra_info.get_monster(cur_subq_id), query_settings=state.query_settings, link=False) fields.append( EmbedField( title, Box(*cls.monster_list(cur_mon_list, state.current_monster_id, state.query_settings, offset=offset)))) cur_mon_list = [] offset += i i = 0 cur_mon_list.append(m) cur_subq_id = subq_id i += 1 title = MonsterHeader.box_with_emoji( state.extra_info.get_monster(cur_subq_id), query_settings=state.query_settings, link=False) fields.append( EmbedField( title, Box(*cls.monster_list(cur_mon_list, state.current_monster_id, state.query_settings, offset=offset)))) fields.append( EmbedField(BoldText('Page'), Box('{} of {}'.format(state.current_page + 1, state.page_count)), inline=True)) return EmbedView(EmbedMain( title=cls.get_title(state), color=state.query_settings.embedcolor, ), embed_footer=embed_footer_with_state(state), embed_fields=fields)
def transform_active_header(cls, m: "MonsterModel"): active_skill = m.active_skill active_cd = '({} cd)'.format( active_skill.cooldown_turns_min) if active_skill else 'None' return Box(get_emoji(cls.up_emoji_name), BoldText('Transform Active Skill {}'.format(active_cd)), delimiter=' ')
def get_awoken_skill_description(awoken_skill: "AwokenSkillModel"): emoji_text = get_awakening_emoji(awoken_skill.awoken_skill_id, awoken_skill.name) desc = awoken_skill.desc_en return Box(Text(emoji_text), BoldText(awoken_skill.name_en), Text(desc), delimiter=' ')
def killers_row(m: "MonsterModel", transform_base): killers_text = 'Any' if 'Any' in m.killers else \ ' '.join(_killer_latent_emoji(k) for k in transform_base.killers) available_killer_text = 'Available killers:' if m == transform_base else 'Avail. killers (pre-xform):' return Box(BoldText(available_killer_text), Text('[{} slots]'.format(m.latent_slots)), Text(killers_text), delimiter=' ')
def active_skill_header(m: "MonsterModel", transform_base): active_skill = m.active_skill if m == transform_base: active_cd = "({} -> {})".format(active_skill.turn_max, active_skill.turn_min) \ if active_skill else 'None' else: base_skill = transform_base.active_skill base_cd = ' (\N{DOWN-POINTING RED TRIANGLE} {} -> {})'.format(base_skill.turn_max, base_skill.turn_min) \ if base_skill else 'None' active_cd = '({} cd)'.format( active_skill.turn_min) if active_skill else 'None' active_cd += base_cd return Box(BoldText('Active Skill'), BoldText(active_cd), delimiter=' ')
def embed(state: LeaderSkillSingleViewState): ls = state.mon.leader_skill return EmbedView( embed_main=EmbedMain( title=createSingleMultiplierText(ls), description=Box( BoldText(MonsterHeader.name(state.mon, link=True, show_jp=True)), Text(ls.desc if ls else 'None')), color=state.color), embed_footer=embed_footer_with_state(state))
def embed(state: GlobalStatsViewState): description = GlobalStatsView.get_description(state) if state.num_days == state.current_day: return EmbedView( EmbedMain( title=BoldText(f"PADle #{state.current_day}"), color=state.query_settings.embedcolor, ), embed_fields=[EmbedField("Stats", Box(description))], embed_footer=embed_footer_with_state(state, text=GlobalStatsView.get_pages_footer(state))) else: return EmbedView( EmbedMain( title=BoldText(f"PADle #{state.current_day}"), description=Box(BoldText(MonsterHeader.menu_title(state.monster).to_markdown())), color=state.query_settings.embedcolor, ), embed_fields=[EmbedField("Stats", Box(description))], embed_footer=embed_footer_with_state(state, text=GlobalStatsView.get_pages_footer(state)), embed_thumbnail=EmbedThumbnail(MonsterImage.icon(state.monster.monster_id)))
def card_info(base_mon: "MonsterModel", transformed_mon: "MonsterModel", acquire_raw): rarity = Box(LabeledText( 'Rarity', '{} -> {}'.format(base_mon.rarity, transformed_mon.rarity)), Text("" if base_mon.orb_skin_id is None else "(Orb Skin)"), delimiter=' ') cost = LabeledText('Cost', '{} -> {}'.format(base_mon.cost, transformed_mon.cost)) acquire = BoldText(acquire_raw) if acquire_raw else None return Box(rarity, cost, acquire)
def embed(state: LeaderSkillSingleViewState): ls = state.mon.leader_skill return EmbedView(embed_main=EmbedMain( title=ls_single_multiplier_text(ls), description=Box( BoldText( MonsterHeader.box_with_emoji( state.mon, query_settings=state.query_settings)), Text(ls.desc if ls else 'None')), color=state.query_settings.embedcolor), embed_footer=embed_footer_with_state(state))
def embed(state: SeriesScrollViewState): fields = [ EmbedField( BoldText('Current rarity: {}'.format(state.rarity)), Box(*SeriesScrollView._monster_list(state.monster_list, state.current_index))), EmbedField(BoldText('Rarities'), Box(SeriesScrollView._all_rarity_text(state), ), inline=True), EmbedField(BoldText('Page'), Box('{} of {}'.format(state.current_page + 1, state.pages_in_rarity)), inline=True) ] return EmbedView(EmbedMain( title=state.title, color=state.color, ), embed_footer=embed_footer_with_state(state), embed_fields=fields)
def killers_row(m: "MonsterModel", transform_base): killers = m.killers if m==transform_base else transform_base.killers killers_text = 'Any' if 'Any' in killers else \ ' '.join(_killer_latent_emoji(k) for k in killers) return Box( BoldText('Available killers:'), Text('\N{DOWN-POINTING RED TRIANGLE}' if m!=transform_base else ''), Text('[{} slots]'.format(m.latent_slots if m==transform_base \ else transform_base.latent_slots)), Text(killers_text), delimiter=' ' )
def leader_header(m: "MonsterModel", is_base: bool): if is_base: emoji = BASE_EMOJI label = 'Base' else: emoji = TRANSFORM_EMOJI label = 'Transform' leader_skill = m.leader_skill return Box(emoji, BoldText(label), IdView.leader_skill_header(m).to_markdown(), delimiter=' ')
def embed(state: MonsterListViewState): fields = [ EmbedField(state.title, Box(state.subtitle, *_monster_list(state.monster_list))), EmbedField(BoldText('Page'), Box('{} of {}'.format(state.current_page + 1, state.page_count)), inline=True) ] return EmbedView(EmbedMain(color=state.color, ), embed_footer=embed_footer_with_state(state), embed_fields=fields)
def leader_header(cls, m: "MonsterModel", is_base: bool, lsmultiplier: LsMultiplier, base_mon: "MonsterModel"): if is_base: emoji = get_emoji(cls.down_emoji_name) label = 'Base' else: emoji = get_emoji(cls.up_emoji_name) label = 'Transform' return Box(emoji, BoldText(label), cls.leader_skill_header(m, lsmultiplier, base_mon).to_markdown(), delimiter=' ')
def get_awoken_skill_description(awoken_skill: "AwokenSkillModel", show_help: bool = False, token_map: dict = None): if token_map is None: token_map = {} emoji_text = get_awakening_emoji(awoken_skill.awoken_skill_id, awoken_skill.name) if not show_help: desc = awoken_skill.desc_en else: if awoken_skill.awoken_skill_id not in token_map: desc = "No modifiers found. Please contact Tsubaki admins for support." else: tokens = token_map[awoken_skill.awoken_skill_id] tokens: set desc = ', '.join('`{}`'.format(token) for token in list(tokens)) return Box(Text(emoji_text), BoldText(awoken_skill.name_en), Text(desc), delimiter=' ')
def base_active_header(m: "MonsterModel"): return Box(BASE_EMOJI, BoldText('Base'), IdView.active_skill_header(m, m), delimiter=' ')
def base_active_header(cls, m: "MonsterModel"): return Box(get_emoji(cls.down_emoji_name), BoldText('Base'), cls.active_skill_header(m, []), delimiter=' ')
def get_compound_active_text( cls, active: Optional["ActiveSkillModel"]) -> Optional[Box]: text = cls.active_skill_type_texts.get(active.compound_skill_type_id) if text is None: return None return BoldText(text)
def leader_skill_header(m: "MonsterModel"): return Box( BoldText('Leader Skill'), BoldText(createMultiplierText(m.leader_skill)), delimiter=' ' )