コード例 #1
0
ファイル: search.py プロジェクト: yonizaf/GoWDiscordTeamBot
 def search_affix(self, search_term, lang):
     real_search = extract_search_tag(search_term)
     results = {}
     for weapon in self.weapons.values():
         my_weapon = weapon.copy()
         self.translate_weapon(my_weapon, lang)
         affixes = [
             affix for affix in my_weapon['upgrades'] if 'cost' in affix
         ]
         for affix in affixes:
             search_name = extract_search_tag(affix['name'])
             search_desc = extract_search_tag(affix['description'])
             if real_search == search_name \
                     or real_search == search_desc \
                     or real_search in search_name \
                     or real_search in search_desc:
                 if affix['name'] in results:
                     results[affix['name']]['weapons'].append(my_weapon)
                     results[affix['name']]['num_weapons'] += 1
                 else:
                     results[affix['name']] = affix.copy()
                     results[affix['name']]['weapons_title'] = _(
                         '[SOULFORGE_TAB_WEAPONS]', lang)
                     results[affix['name']]['weapons'] = [my_weapon]
                     results[affix['name']]['num_weapons'] = 1
     for name, affix in results.items():
         if real_search == extract_search_tag(name):
             return [affix]
     return sorted(results.values(), key=operator.itemgetter('name'))
コード例 #2
0
ファイル: search.py プロジェクト: yonizaf/GoWDiscordTeamBot
 def search_trait(self, search_term, lang):
     possible_matches = []
     for code, trait in self.traits.items():
         translated_name = extract_search_tag(_(trait['name'], lang))
         translated_description = extract_search_tag(
             _(trait['description'], lang))
         real_search = extract_search_tag(search_term)
         if real_search == translated_name:
             result = trait.copy()
             result['troops'] = self.get_troops_with_trait(trait, lang)
             result['troops_title'] = _('[TROOPS]', lang)
             result['classes'] = self.get_classes_with_trait(trait, lang)
             result['classes_title'] = _('[CLASS]', lang)
             if result['troops'] or result['classes']:
                 return self.enrich_traits([result], lang)
         elif real_search in translated_name or real_search in translated_description:
             result = trait.copy()
             result['troops'] = self.get_troops_with_trait(trait, lang)
             result['troops_title'] = _('[TROOPS]', lang)
             result['classes'] = self.get_classes_with_trait(trait, lang)
             result['classes_title'] = _('[CLASS]', lang)
             if result['troops'] or result['classes']:
                 possible_matches.append(result)
     return sorted(self.enrich_traits(possible_matches, lang),
                   key=operator.itemgetter('name'))
コード例 #3
0
ファイル: search.py プロジェクト: yonizaf/GoWDiscordTeamBot
 def search_talent(self, search_term, lang):
     possible_matches = []
     for tree in self.talent_trees.values():
         translated_name = extract_search_tag(_(tree['name'], lang))
         translated_talents = [_(t['name'], lang) for t in tree['talents']]
         talents_search_tags = [
             extract_search_tag(t) for t in translated_talents
         ]
         real_search = extract_search_tag(search_term)
         if real_search == translated_name or real_search in talents_search_tags:
             result = tree.copy()
             self.translate_talent_tree(result, lang)
             return [result]
         elif real_search in translated_name:
             result = tree.copy()
             self.translate_talent_tree(result, lang)
             possible_matches.append(result)
         else:
             talent_matches = [
                 t for t in talents_search_tags if real_search in t
             ]
             if talent_matches:
                 result = tree.copy()
                 result['talent_matches'] = talent_matches
                 self.translate_talent_tree(result, lang)
                 possible_matches.append(result)
     return sorted(possible_matches, key=operator.itemgetter('name'))
コード例 #4
0
ファイル: search.py プロジェクト: yonizaf/GoWDiscordTeamBot
    def search_item(search_term,
                    lang,
                    items,
                    lookup_keys,
                    translator,
                    sort_by='name'):
        if search_term.isdigit() and int(search_term) in items:
            item = items.get(int(search_term))
            if item:
                result = item.copy()
                translator(result, lang)
                return [result]
            return []
        possible_matches = []
        for base_item in items.values():
            if base_item['name'] == '`?`':
                continue
            item = base_item.copy()
            translator(item, lang)
            lookups = {
                k: extract_search_tag(dig(item, k))
                for k in lookup_keys
            }
            real_search = extract_search_tag(search_term)

            if real_search == extract_search_tag(item['name']):
                return [item]
            for key, lookup in lookups.items():
                if real_search in lookup:
                    possible_matches.append(item)
                    break

        return sorted(possible_matches, key=operator.itemgetter(sort_by))
コード例 #5
0
 def matches(self, search_term, lang):
     compacted_search = extract_search_tag(search_term)
     item = self.translations[lang]
     if item.name == '`?`':
         return False
     lookups = {
         k: extract_search_tag(dig(item, k))
         for k in self.LOOKUP_KEYS
     }
     for key, lookup in lookups.items():
         if compacted_search in lookup:
             return True
     return False
コード例 #6
0
 def matches_precisely(self, search_term, lang):
     return extract_search_tag(
         self.translations[lang].name) == extract_search_tag(search_term)