def get_team_from_code(self, code, lang): result = { 'troops': [], 'banner': {}, 'class': None, 'talents': [], 'class_title': _('[CLASS]', lang), 'troops_title': _('[TROOPS]', lang), } has_weapon = False has_class = False for element in code: troop = self.troops.get(element) weapon = self.weapons.get(element) if troop: color_code = "".join(troop["colors"]) troop_name = _(troop['name'], lang) result['troops'].append([color_code, troop_name]) continue elif weapon: color_code = "".join(weapon["colors"]) weapon_name = _(weapon['name'], lang) result['troops'].append([color_code, weapon_name + ' :crossed_swords:']) has_weapon = True continue _class = self.classes.get(element) if _class: result['class'] = _(_class['name'], lang) result['class_talents'] = _class['talents'] has_class = True continue banner = self.banners.get(element) if banner: result['banner'] = self.translate_banner(banner, lang) continue if 0 <= element <= 3: result['talents'].append(element) continue if has_weapon and has_class: new_talents = [] for talent_no, talent_code in enumerate(result['talents']): talent = '-' if talent_code > 0: talent = _(result['class_talents'][talent_code - 1][talent_no]['name'], lang) new_talents.append(talent) result['talents'] = new_talents else: result['class'] = None result['talents'] = None return result
def search_class(self, search_term, lang): if search_term.isdigit() and int(search_term) in self.classes: result = self.classes.get(int(search_term)).copy() self.translate_class(result, lang) return [result] else: possible_matches = [] for _class in self.classes.values(): translated_name = extract_search_tag(_(_class['name'], lang)) real_search = extract_search_tag(search_term) if real_search == translated_name: result = _class.copy() self.translate_class(result, lang) return [result] elif real_search in translated_name or search_term == 'summary': result = _class.copy() self.translate_class(result, lang) possible_matches.append(result) return possible_matches
def search_pet(self, search_term, lang): if search_term.isdigit() and int(search_term) in self.pets: result = self.pets.get(int(search_term)).copy() self.translate_pet(result, lang) return [result] else: possible_matches = [] for pet in self.pets.values(): translated_name = extract_search_tag(_(pet['name'], lang)) real_search = extract_search_tag(search_term) if real_search == translated_name: result = pet.copy() self.translate_pet(result, lang) return [result] elif real_search in translated_name: result = pet.copy() self.translate_pet(result, lang) possible_matches.append(result) return possible_matches
def search_kingdom(self, search_term, lang): if search_term.isdigit() and int(search_term) in self.kingdoms: result = self.kingdoms.get(int(search_term)).copy() self.translate_kingdom(result, lang) return [result] else: possible_matches = [] for kingdom in self.kingdoms.values(): translated_name = extract_search_tag(_(kingdom['name'], lang)) real_search = extract_search_tag(search_term) if real_search == translated_name: result = kingdom.copy() self.translate_kingdom(result, lang) return [result] elif real_search in translated_name or \ (search_term == 'summary' and not kingdom['underworld'] and len(kingdom['colors']) > 0): result = kingdom.copy() self.translate_kingdom(result, lang) possible_matches.append(result) return possible_matches
def translate_event(self, event, lang): entry = event.copy() entry['extra_info'] = '' if entry['type'] in ('[BOUNTY]', '[HIJACK]') and entry['gacha']: entry['extra_info'] = _(self.troops[entry['gacha']]['name'], lang) elif entry['type'] == '[PETRESCUE]' and entry['gacha']: entry['extra_info'] = _(self.pets[entry['gacha']]['name'], lang) elif entry['type'] == '[CLASS_EVENT]' and entry['gacha']: entry['extra_info'] = _(self.classes[entry['gacha']]['name'], lang) elif entry['type'] == '[DELVE_EVENT]': entry['extra_info'] = _(self.kingdoms[entry['kingdom_id']]['name'], lang) elif entry['type'] in ('[INVASION]', '[ADVENTURE_BOARD_SPECIAL_EVENT]') and entry['gacha']: troop = _(self.troops[entry['gacha']]['name'], lang) kingdom = _(self.kingdoms[entry['kingdom_id']]['name'], lang) entry['extra_info'] = f'{troop} ({kingdom})' entry['type'] = _(entry['type'], lang) return entry
def search_weapon(self, search_term, lang): if search_term.isdigit() and int(search_term) in self.weapons: weapon = self.weapons.get(int(search_term)) if weapon: result = weapon.copy() self.translate_weapon(result, lang) return [result] return [] else: possible_matches = [] for weapon in self.weapons.values(): translated_name = extract_search_tag(_(weapon['name'], lang)) real_search = extract_search_tag(search_term) if real_search == translated_name: result = weapon.copy() self.translate_weapon(result, lang) return [result] elif real_search in translated_name: result = weapon.copy() self.translate_weapon(result, lang) possible_matches.append(result) return possible_matches
def search_troop(self, search_term, lang): if search_term.isdigit() and int(search_term) in self.troops: troop = self.troops.get(int(search_term)) if troop: result = troop.copy() self.translate_troop(result, lang) return [result] return [] else: possible_matches = [] for troop in self.troops.values(): translated_name = extract_search_tag(_(troop['name'], lang)) real_search = extract_search_tag(search_term) if real_search == translated_name: result = troop.copy() self.translate_troop(result, lang) return [result] elif real_search in translated_name: result = troop.copy() self.translate_troop(result, lang) possible_matches.append(result) return possible_matches
def translate_class(self, _class, lang): kingdom = self.kingdoms[_class['kingdom_id']] _class['kingdom'] = _(kingdom['name'], lang) weapon = self.weapons[_class['weapon_id']] _class['weapon'] = _(weapon['name'], lang) _class['name'] = _(_class['name'], lang) translated_trees = [] for tree in _class['talents']: translated_talents = [] for talent in tree: translated_talents.append({ 'name': _(talent['name'], lang), 'description': _(talent['description'], lang) }) translated_trees.append(translated_talents) _class['kingdom_title'] = _('[KINGDOM]', lang) _class['traits_title'] = _('[TRAITS]', lang) _class['traits'] = self.enrich_traits(_class['traits'], lang) _class['weapon_title'] = _('[WEAPON]', lang) _class['talents'] = translated_trees _class['trees'] = [_(f'[TALENT_TREE_{t.upper()}]', lang) for t in _class['trees']] _class['type_short'] = _(f'[TROOPTYPE_{_class["type"].upper()}]', lang) _class['type'] = _(f'[PERK_TYPE_{_class["type"].upper()}]', lang)
def translate_troop(self, troop, lang): troop['name'] = _(troop['name'], lang) troop['description'] = _(troop['description'], lang).replace('widerbeleben', 'wiederbeleben') troop['color_code'] = "".join(troop['colors']) troop['rarity_title'] = _('[RARITY]', lang) troop['raw_rarity'] = troop['rarity'] rarity_number = 1 if troop['rarity'] in TROOP_RARITIES: rarity_number = TROOP_RARITIES.index(troop['rarity']) troop['rarity'] = _(f'[RARITY_{rarity_number}]', lang) troop['traits_title'] = _('[TRAITS]', lang) troop['traits'] = self.enrich_traits(troop['traits'], lang) troop['roles_title'] = _('[TROOP_ROLE]', lang) troop['roles'] = [_(f'[TROOP_ROLE_{role.upper()}]', lang) for role in troop['roles']] troop['type_title'] = _('[FILTER_TROOPTYPE]', lang) troop['raw_types'] = troop['types'] types = [ _(f'[TROOPTYPE_{_type.upper()}]', lang) for _type in troop['types'] ] troop['type'] = ' / '.join(types) troop['kingdom_title'] = _('[KINGDOM]', lang) troop['kingdom'] = _(troop['kingdom']['Name'], lang) troop['spell'] = self.translate_spell(troop['spell_id'], lang) troop['spell_title'] = _('[TROOPHELP_SPELL0]', lang)
def get_index_text(self, name): # l10n: Index display text for built-in functions return _('%s() (function)') % name
def get_index_text(self, name): # l10n: Index display text for built-in constants return _('%s (constant)') % name
def choose_other_type_prompt(reply, context): reply(_(tr.POPULAR_SUBJECT_OTHER_PROMPT, context))
def choose_type_prompt(reply, context): reply_keyboard = make_inline_keyboard( [[[_(tr.HELP_TYPE_TOGETHER, context), Answer.TYPE_TOGETHER]], [[_(tr.HELP_TYPE_IM_WEAK, context), Answer.IM_WEAK], [_(tr.HELP_TYPE_IM_STRONK, context), Answer.IM_STRONK]]]) reply(text=_(tr.CHOOSE_HELP_TYPE, context), reply_markup=reply_keyboard)
def add_new_subject(update: Update, context: CallbackContext): bd_worker.add_new_subject(update.message.text) context.user_data[SUBJECT] = update.message.text update.message.reply_text(_(tr.INPUT_SUBJ_NAME_SUCCESS, context)) update.message.reply_text(_(tr.START_INPUTING_NAMES, context)) return State.FDBK_GET_TEACHER_INFO
def translate_kingdom(self, kingdom, lang): kingdom['name'] = _(kingdom['name'], lang) kingdom['description'] = _(kingdom['description'], lang) kingdom['punchline'] = _(kingdom['punchline'], lang) kingdom['troop_title'] = _('[TROOPS]', lang) kingdom['troops'] = [ {'name': _(self.troops[_id]['name'], lang), 'id': _id } for _id in kingdom['troop_ids'] ] kingdom['banner_title'] = _('[BANNERS]', lang) kingdom['banner'] = self.translate_banner(self.banners[kingdom['id']], lang) kingdom['linked_kingdom'] = None if kingdom['linked_kingdom_id']: kingdom['linked_kingdom'] = _(self.kingdoms[kingdom['linked_kingdom_id']]['name'], lang) if kingdom['linked_kingdom'] and kingdom['linked_kingdom'].startswith('['): kingdom['linked_kingdom'] = None kingdom['map'] = _('[MAPNAME_MAIN]', lang) kingdom['linked_map'] = _('[MAPNAME_UNDERWORLD]', lang) if kingdom['underworld']: kingdom['map'] = _('[MAPNAME_UNDERWORLD]', lang) kingdom['linked_map'] = _('[MAPNAME_MAIN]', lang) if 'primary_color' in kingdom: deed_num = self.colors.index(kingdom['primary_color']) kingdom['deed'] = _(f'[DEED{deed_num:02d}]', lang) kingdom['color_title'] = _('[GEM_MASTERY]', lang) kingdom['stat_title'] = _('[STAT_BONUS]', lang) if 'primary_stat' in kingdom: kingdom['primary_stat'] = _(f'[{kingdom["primary_stat"].upper()}]', lang)
def translate_weapon(self, weapon, lang): weapon['name'] = _(weapon['name'], lang) weapon['description'] = _(weapon['description'], lang) weapon['color_code'] = "".join(weapon['colors']) weapon['spell_title'] = _('[TROOPHELP_SPELL0]', lang) weapon['rarity_title'] = _('[RARITY]', lang) weapon['raw_rarity'] = weapon['rarity'] rarity_number = WEAPON_RARITIES.index(weapon['rarity']) weapon['rarity'] = _(f'[RARITY_{rarity_number}]', lang) weapon['spell'] = self.translate_spell(weapon['spell_id'], lang) weapon['affix_title'] = _('[UPGRADE_WEAPON]', lang) weapon['affixes'] = [ self.translate_spell(spell['id'], lang) for spell in weapon['affixes'] ] weapon['kingdom_title'] = _('[KINGDOM]', lang) weapon['kingdom'] = _(weapon['kingdom']['name'], lang) weapon['roles_title'] = _('[WEAPON_ROLE]', lang) weapon['roles'] = [ _(f'[TROOP_ROLE_{role.upper()}]', lang) for role in weapon['roles'] ] weapon['type_title'] = _('[FILTER_WEAPONTYPE]', lang) weapon['type'] = _(f'[WEAPONTYPE_{weapon["type"].upper()}]', lang) if weapon['requirement'] < 1000: weapon['requirement_text'] = _('[WEAPON_MASTERY_REQUIRED]', lang) + \ str(weapon['requirement']) elif weapon['requirement'] == 1000: weapon['requirement_text'] = _( '[WEAPON_AVAILABLE_FROM_CHESTS_AND_EVENTS]', lang) elif weapon['requirement'] == 1002: _class = _(weapon['class'], lang) weapon['requirement_text'] = _('[CLASS_REWARD_TITLE]', lang) + f' ({_class})' elif weapon['requirement'] == 1003: weapon['requirement_text'] = _( '[SOULFORGE_WEAPONS_TAB_EMPTY_ERROR]', lang)
def populate_world_data(self): with open('World.json', encoding='utf8') as f: data = json.load(f) for spell in data['Spells']: amount = 0 multiplier = 1 boost = 1 for spell_step in spell['SpellSteps']: if spell_step.get('Primarypower'): amount = spell_step.get('Amount') multiplier = spell_step.get('SpellPowerMultiplier', 1) elif spell_step['Type'].startswith('Count'): boost = spell_step.get('Amount', 1) self.spells[spell['Id']] = { 'id': spell['Id'], 'name': spell['Name'], 'description': spell['Description'], 'cost': spell['Cost'], 'amount': amount, 'multiplier': multiplier, 'boost': boost, } for trait in data['Traits']: self.traits[trait['Code']] = { 'name': trait['Name'], 'description': trait['Description'] } for troop in data['Troops']: colors = [ c.replace('Color', '').lower() for c, v in troop['ManaColors'].items() if v ] self.troops[troop['Id']] = { 'id': troop['Id'], 'name': troop['Name'], 'colors': sorted(colors), 'description': troop['Description'], 'spell_id': troop['SpellId'], 'traits': [ self.traits.get(trait, { 'name': trait, 'description': '-' }) for trait in troop['Traits'] ], 'rarity': troop['TroopRarity'], 'types': [troop['TroopType']], 'roles': troop['TroopRoleArray'], 'kingdom': { 'Name': '' }, 'filename': f'http://garyatrics.com/gow_assets/{troop["FileBase"].lower()}.png', } if 'TroopType2' in troop: self.troops[troop['Id']]['types'].append(troop['TroopType2']) for kingdom in data['Kingdoms']: color_lookup_names = [f'[GEM_{c.upper()}]' for c in self.COLORS] color_names = [_(c).lower() for c in color_lookup_names] colors = zip(color_names, kingdom['BannerColors']) colors = sorted(colors, key=operator.itemgetter(1), reverse=True) self.banners[kingdom['Id']] = { 'name': kingdom['BannerName'], 'colors': colors, } kingdom_troops = [ troop_id for troop_id in kingdom['TroopIds'] if troop_id != -1 ] self.kingdoms[kingdom['Id']] = { 'id': kingdom['Id'], 'name': kingdom['Name'], 'description': kingdom['Description'], 'punchline': kingdom['ByLine'], 'underworld': bool(kingdom.get('MapIndex', 0)), 'troop_ids': kingdom_troops, 'troop_type': kingdom['KingdomTroopType'], 'linked_kingdom_id': kingdom.get('SisterKingdomId'), } if 'SisterKingdomId' in kingdom: self.kingdoms[kingdom['SisterKingdomId']][ 'linked_kingdom_id'] = kingdom['Id'] for troop_id in kingdom_troops: self.troops[troop_id]['kingdom'] = kingdom for weapon in data['Weapons']: colors = [ c.replace('Color', '').lower() for c, v in weapon['ManaColors'].items() if v ] self.weapons[weapon['Id']] = { 'id': weapon['Id'], 'name': f'[SPELL{weapon["SpellId"]}_NAME]', 'description': f'[SPELL{weapon["SpellId"]}_DESC]', 'colors': sorted(colors), 'rarity': weapon['WeaponRarity'], 'type': weapon['Type'], 'roles': weapon['TroopRoleArray'], 'spell_id': weapon['SpellId'], 'kingdom': self.kingdoms[weapon['KingdomId']], 'requirement': weapon['MasteryRequirement'], 'affixes': [ self.spells.get(spell) for spell in weapon['Affixes'] if spell in self.spells ], } self.pet_effects = ( '[PETTYPE_BUFFTEAMCOLOR]', '[PETTYPE_BUFFGEMMASTERY]', '[PETTYPE_BUFFTEAMKINGDOM]', '[PETTYPE_BUFFTEAMTROOPTYPE]', '[PETTYPE_LOOTSOULS]', '[PETTYPE_LOOTGOLD]', '[PETTYPE_LOOTXP]', '[PETTYPE_NOEFFECT]', ) for pet in data['Pets']: colors = [ c.replace('Color', '').lower() for c, v in pet['ManaColors'].items() if v ] self.pets[pet['Id']] = { 'id': pet['Id'], 'name': pet['Name'], 'kingdom': self.kingdoms[pet['KingdomId']], 'colors': sorted(colors), 'effect': self.pet_effects[pet['Effect']], 'effect_data': pet.get('EffectData'), 'troop_type': pet.get('EffectTroopType'), } for tree in data['TalentTrees']: talents = [ self.traits.get(trait, trait) for trait in tree['Traits'] ] self.talent_trees[tree['Code']] = { 'name': f'[TALENT_TREE_{tree["Code"].upper()}]', 'talents': talents, 'classes': [], } for _class in data['HeroClasses']: self.classes[_class['Id']] = { 'id': _class['Id'], 'name': _class['Name'], 'talents': [ self.talent_trees[tree]['talents'] for tree in _class['TalentTrees'] ], 'trees': _class['TalentTrees'], 'traits': [ self.traits.get(trait, { 'name': trait, 'description': '-' }) for trait in _class['Traits'] ], 'weapon_id': _class['ClassWeaponId'], 'kingdom_id': _class['KingdomId'], 'type': _class['Augment'][0], } self.weapons[_class['ClassWeaponId']]['class'] = _class['Name'] for tree in _class['TalentTrees']: self.talent_trees[tree]['classes'].append( self.classes[_class['Id']].copy())
def ok(evt): dialog.InfoDialog(_("file_deleted"), _("File {} deleted").format(name), remove_after=2) _remove(name)
def choose_description_prompt(reply, context): reply(_(tr.HELP_DESCRIPTION_PROMPT, context))
def choose_award_prompt(reply, context): reply(_(tr.HELP_AWARD_PROMPT, context))
def any_comments_prompt(reply, context): reply_keyboard = utils.make_inline_keyboard([[[_(tr.YES, context), 'True'], [_(tr.NO, context), 'False']]]) reply(text=_(tr.WANT_ENTER_POLL_COMMENT, context), reply_markup=reply_keyboard)
def on_exit(update, context): update.effective_user.send_message(_(tr.HELP_LAST_PHRASE, context), reply_markup=get_main_keyboard(context)) return State.FIRST_NODE
def finish(send_first, send_second, context): answer = context.user_data[ANSWERS] + [context.user_data[ANSWER_COMMENT]] save_to_csv(context.user_data.get('lang', 'ru'), answer) send_first(_(tr.FEEDBACK_FINAL_PHRASE, context)) utils.main_reply(send_second, context) return State.FIRST_NODE
def add_desc(update: Update, context: CallbackContext): context.user_data['teacher_desc'] = update.message.text update.message.reply_text(_(tr.HOW_REVIEW_TEACHER, context)) return State.ADD_RATING
def translate_weapon(self, weapon, lang): weapon['name'] = _(weapon['name'], lang) weapon['description'] = _(weapon['description'], lang) weapon['color_code'] = "".join(weapon['colors']) weapon['spell_title'] = _('[TROOPHELP_SPELL0]', lang) weapon['rarity_title'] = _('[RARITY]', lang) weapon['raw_rarity'] = weapon['rarity'] rarity_number = WEAPON_RARITIES.index(weapon['rarity']) weapon['rarity'] = _(f'[RARITY_{rarity_number}]', lang) weapon['spell'] = self.translate_spell(weapon['spell_id'], lang) weapon['upgrade_title'] = _('[UPGRADE_WEAPON]', lang) bonus_title = _('[BONUS]', lang) upgrade_numbers = zip(weapon['armor_increase'], weapon['attack_increase'], weapon['health_increase'], weapon['magic_increase']) upgrade_titles = ( _('[ARMOR]', lang), _('[ATTACK]', lang), _('[LIFE]', lang), _('[MAGIC]', lang), ) upgrades = [] for upgrade in upgrade_numbers: for i, amount in enumerate(upgrade): if amount: upgrades.append( {'name': f'{upgrade_titles[i]} {bonus_title}', 'description': f'+{amount} {upgrade_titles[i]}'}) weapon['upgrades'] = upgrades + [self.translate_spell(spell['id'], lang) for spell in weapon['affixes']] weapon['kingdom_title'] = _('[KINGDOM]', lang) weapon['kingdom'] = _(weapon['kingdom']['name'], lang) weapon['roles_title'] = _('[WEAPON_ROLE]', lang) weapon['roles'] = [_(f'[TROOP_ROLE_{role.upper()}]', lang) for role in weapon['roles']] weapon['type_title'] = _('[FILTER_WEAPONTYPE]', lang) weapon['type'] = _(f'[WEAPONTYPE_{weapon["type"].upper()}]', lang) weapon['has_mastery_requirement_color'] = False if weapon['requirement'] < 1000: weapon['requirement_text'] = _('[WEAPON_MASTERY_REQUIRED]', lang) + \ str(weapon['requirement']) weapon['has_mastery_requirement_color'] = True elif weapon['requirement'] == 1000: weapon['requirement_text'] = _('[WEAPON_AVAILABLE_FROM_CHESTS_AND_EVENTS]', lang) elif weapon['requirement'] == 1002: _class = _(weapon['class'], lang) weapon['requirement_text'] = _('[CLASS_REWARD_TITLE]', lang) + f' ({_class})' elif weapon['requirement'] == 1003: weapon['requirement_text'] = _('[SOULFORGE_WEAPONS_TAB_EMPTY_ERROR]', lang)
def add_new_subject(update: Update, context: CallbackContext): bd_worker.add_new_subject(update.message.text) context.user_data['subject'] = update.message.text update.message.reply_text(_(tr.INPUT_SUBJ_NAME_SUCCESS, context)) update.message.reply_text(_(tr.INPUT_FIO, context)) return State.ADD_T
def get_campaign_tasks(self, lang): return { _('[MEDAL_LEVEL_0]'): [self.translate_campaign_task(t, lang) for t in self.campaign_tasks['bronze']], _('[MEDAL_LEVEL_1]'): [self.translate_campaign_task(t, lang) for t in self.campaign_tasks['silver']], _('[MEDAL_LEVEL_2]'): [self.translate_campaign_task(t, lang) for t in self.campaign_tasks['gold']], }
def addictional_add(update, context): context.user_data['teacher_name'] = update.message.text update.message.reply_text(_(tr.OTZYV, context)) return State.ADD_DESC
def try_different_translated_versions_because_devs_are_stupid(cat): lookup = f'[{cat.upper()}S]' result = _(lookup, lang) if result == lookup: result = _(f'[{cat.upper()}S:]', lang)[:-1] return result
def show_list_keyboard(set_message, context, title_phrase): keyboard = context.user_data[LIST_KEYBOARD] i = context.user_data.setdefault(LIST_KEYBOARD_INDEX, 0) keyboard = keyboard[i] set_message(text=_(title_phrase, context), reply_markup=make_inline_keyboard(keyboard))