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
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
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
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]
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
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
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())
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