Ejemplo n.º 1
0
def get_hero_pages(name):
    some_heroes, certain_hero = take_by_name(BLIZZ_HEROES, name)

    page_links = []

    if not some_heroes:
        page_links = []
    elif certain_hero:
        bhero = some_heroes[0]

        best_builds = fetch_best_builds(bhero.hero.en_name)

        best_builds = {'winning': best_builds[0], 'popular': best_builds[1]}

        hero_talents = fetch_hero_talents(bhero.hero.en_name)

        alt_hero_talents = fetch_talents(bhero.hero.en_name)

        builds = parse_builds(hero_talents, alt_hero_talents, best_builds)

        if builds:
            bhero = bhero._replace(builds=builds)

        for build_idx, build in enumerate(bhero.builds):
            page_content = pages.make_page(bhero, build_idx)
            page_link = pages.send_page(bhero.hero.en_name, page_content)

            page_links.append(page_link)
    else:
        page_links = []

    view = View(MessageList(page_links))

    return view
Ejemplo n.º 2
0
def get_hero_profile(name):
    some_heroes, certain_hero = take_by_name(BLIZZ_HEROES, name)

    if not some_heroes:
        message = f'Found no heroes for you :( Is "{name}" hero name correct?'

        view = View(Message(message))

    elif certain_hero:
        bhero = certain_hero

        caption = '**{}**\n__Winrate:{}%__\n```{}```'\
                  .format(bhero.hero.name,

                          fetch_hero_stata(bhero.hero.en_name)
                          .get('percent', '?'),

                          represent_stats(bhero.hero.stats))

        if bhero.hero.image:
            view = View(Photo(bhero.hero.image, caption))
        else:
            view = View(Message(caption))
    else:
        view = View(
            Markup('Please choose one:',
                   get_hero_variant_buttons(some_heroes)))

    return view
Ejemplo n.º 3
0
    def get_results(self):

        self.all_heroes = []
        self.pointer = 0

        heroes_winrates = fetch_winrates(mode=get_mode_idx("Quick Match"))

        for hero_winrate in heroes_winrates:

            _, bhero = filters.take_by_name(BLIZZ_HEROES,
                                           hero_winrate.hero_name)

            if bhero:
                self.all_heroes.append((bhero, hero_winrate))

        if self.answers['choosing role'] != "don't care":
            filtered_heroes = [(blizz_hero, hero_winrate)

                               for blizz_hero, hero_winrate
                               in self.all_heroes

                               if blizz_hero.hero.role.lower()
                               == self.answers['choosing role'].lower()]
        else:
            filtered_heroes = self.all_heroes

        sorted_heroes = sorted(filtered_heroes,

                               key=lambda structure:
                               structure[1].percent,

                               reverse=True)

        ok_criteria = [criteria_name.split()[1]
                       for criteria_name, criteria_answer
                       in self.answers.items()
                       if criteria_answer == ok_answer]

        no_criteria = [criteria_name.split()[1]
                       for criteria_name, criteria_answer
                       in self.answers.items()
                       if criteria_answer == no_answer]

        for criteria in no_criteria + ok_criteria:
            reverse = True if criteria in ok_criteria else False
            sorted_heroes = sorted(sorted_heroes,

                                   key=lambda structure:
                                   structure[0].hero.stats._asdict()[criteria],

                                   reverse=reverse)

        self.results = sorted_heroes
        self.result_prepared = True
Ejemplo n.º 4
0
def test_take_by_name(test_input, expected):

    matching, certain_hero = filters.take_by_name(BLIZZ_HEROES, test_input)

    en_name = certain_hero.hero.en_name if certain_hero else None
    matching = [bhero.hero.en_name for bhero in matching]

    print(f"input: {test_input}" +
          f"output: {en_name, matching}, expected: {expected}")

    assert en_name == expected[0]
    assert matching == expected[1]
Ejemplo n.º 5
0
def setup_for_make_profile(request):
    test_input, expect_failure = request.param

    heroes_winrates = statistics.fetch_winrates()

    data = (None, None)

    for hero_winrate in heroes_winrates:
        if hero_winrate.hero_name == test_input:
            _, bhero = filters.take_by_name(BLIZZ_HEROES,
                                            hero_winrate.hero_name)

            data = (bhero, hero_winrate)

    return request.param, data
Ejemplo n.º 6
0
def get_inline_results(query):
    results = []

    some_heroes, _ = take_by_name(BLIZZ_HEROES, query)
    some_heroes = some_heroes[:5]

    for bhero in some_heroes:
        results.append(
            InputBotInlineResult(
                id=bhero.hero.en_name,
                type='article',
                send_message=InputBotInlineMessageText(bhero.hero.en_name),
                title=bhero.hero.name,
                description='{hero.role}\n{hero.stats}'.format(
                    hero=bhero.hero)))

    return results
Ejemplo n.º 7
0
def update_missing(update_on_loading=True):
    page = fetch_blizzhero_page()
    heroes = APIParser(fetch_heroes()).hero_list

    missing_heroes = []

    for hero in heroes:
        if not take_by_name(BLIZZ_HEROES, hero.name)[0]:
            missing_heroes.append(hero)

    print("Founded missing heroes:\n{}".format("\n".join(
        [hero.name for hero in missing_heroes])))

    bheroes = BlizzParser(missing_heroes, page)

    if update_on_loading:
        for hero in missing_heroes:
            set_blizz([bheroes.parse_bhero_by_name(hero.name)], replace=False)
    else:
        set_blizz(bheroes.parse_bhero_list())
Ejemplo n.º 8
0
    def fetch_map_stata(self):
        self.all_heroes = []
        self.pointer = 0

        mode_name = self.answers["choosing mode"]

        if self.answers["choosing skill"] != "don't care":
            skill_mapping = {'bronze': 0,
                             'silver': 1,
                             'gold': 2,
                             'platinum': 3,
                             'diamond': 4,
                             'master': 5}

            skill_low = skill_mapping[self.answers["choosing skill"]]
            skill_high = skill_low + 1 if skill_low != 5 else None
        else:
            skill_low = None
            skill_high = None

        heroes_winrates = fetch_winrates(field=self.answers["choosing map"],
                                         mode=get_mode_idx(mode_name),
                                         skill_low=str(skill_low)
                                                   if skill_low else None,
                                         skill_high=str(skill_high)
                                                    if skill_high else None)

        for hero_winrate in heroes_winrates:

            _, bhero = filters.take_by_name(BLIZZ_HEROES,
                                            hero_winrate.hero_name)

            if bhero:
                self.all_heroes.append((bhero, hero_winrate))

        self.results = True