예제 #1
0
 def __init__(self,
              masters: MasterDict,
              naming_function: Callable[[Any], str],
              aliases: Optional[dict] = None,
              filter_function=lambda _: True,
              fallback_naming_function: Optional[Callable[[Any],
                                                          str]] = None):
     self.masters = masters
     self.default_filter = FuzzyFilteredMap(filter_function)
     self.unrestricted_filter = FuzzyFilteredMap()
     for master in masters.values():
         name = naming_function(master)
         if fallback_naming_function and self.default_filter.has_exact(
                 name):
             name = romanize(fallback_naming_function(master))
             if self.default_filter.has_exact(name):
                 continue
         elif self.default_filter.has_exact(name):
             continue
         self.default_filter[name] = master
         self.unrestricted_filter[name] = master
     if aliases:
         for alias, mid in aliases.items():
             self.add_alias(alias, mid)
예제 #2
0
 async def similarity_score(self, ctx: commands.Context, source: str,
                            target: str):
     await ctx.send(
         str(FuzzyMatcher().score(romanize(source), romanize(target))))
예제 #3
0
 async def romanize(self, ctx: commands.Context, *, arg: str):
     await ctx.send(romanize(arg))
예제 #4
0
 def add_alias(self, alias, master_id):
     master = self.masters[master_id]
     alias = romanize(alias)
     self.default_filter[alias] = master
     self.unrestricted_filter[alias] = master