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=' ')
Exemple #2
0
    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)
Exemple #3
0
 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=' '
     )
Exemple #4
0
 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=' '
     )
Exemple #5
0
    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))
Exemple #7
0
    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)
Exemple #8
0
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=' ')
Exemple #9
0
    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)
Exemple #10
0
 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=' ')
Exemple #11
0
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=' ')
Exemple #12
0
 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=' ')
Exemple #13
0
    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=' ')
Exemple #14
0
 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))
Exemple #15
0
 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)))
Exemple #16
0
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)
Exemple #17
0
 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))
Exemple #18
0
    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)
Exemple #19
0
 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=' '
     )
Exemple #20
0
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=' ')
Exemple #21
0
    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)
Exemple #22
0
    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=' ')
Exemple #23
0
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=' ')
Exemple #24
0
def base_active_header(m: "MonsterModel"):
    return Box(BASE_EMOJI,
               BoldText('Base'),
               IdView.active_skill_header(m, m),
               delimiter=' ')
Exemple #25
0
 def base_active_header(cls, m: "MonsterModel"):
     return Box(get_emoji(cls.down_emoji_name),
                BoldText('Base'),
                cls.active_skill_header(m, []),
                delimiter=' ')
Exemple #26
0
 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)
Exemple #27
0
 def leader_skill_header(m: "MonsterModel"):
     return Box(
         BoldText('Leader Skill'),
         BoldText(createMultiplierText(m.leader_skill)),
         delimiter=' '
     )