group search multimatches by displayed name
This commit is contained in:
parent
aeb0cf6854
commit
675236bb96
1 changed files with 28 additions and 21 deletions
|
|
@ -2397,28 +2397,35 @@ def at_search_result(matches, caller, query="", quiet=False, **kwargs):
|
||||||
query=query
|
query=query
|
||||||
)
|
)
|
||||||
|
|
||||||
for num, result in enumerate(matches):
|
# group results by display name to properly disambiguate
|
||||||
# we need to consider that result could be a Command, where .aliases
|
grouped_matches = defaultdict(list)
|
||||||
# is a list of strings
|
for item in matches:
|
||||||
if hasattr(result.aliases, "all"):
|
group_key = (
|
||||||
# result is a typeclassed entity where `.aliases` is an AliasHandler.
|
item.get_display_name(caller)
|
||||||
aliases = result.aliases.all(return_objs=True)
|
if hasattr(item, "get_display_name")
|
||||||
# remove pluralization aliases
|
|
||||||
aliases = [alias.db_key for alias in aliases if alias.db_category != "plural_key"]
|
|
||||||
else:
|
|
||||||
# result is likely a Command, where `.aliases` is a list of strings.
|
|
||||||
aliases = result.aliases
|
|
||||||
|
|
||||||
error += _MULTIMATCH_TEMPLATE.format(
|
|
||||||
number=num + 1,
|
|
||||||
name=(
|
|
||||||
result.get_display_name(caller)
|
|
||||||
if hasattr(result, "get_display_name")
|
|
||||||
else query
|
else query
|
||||||
),
|
)
|
||||||
aliases=" [{alias}]".format(alias=";".join(aliases)) if aliases else "",
|
grouped_matches[group_key].append(item)
|
||||||
info=result.get_extra_info(caller),
|
|
||||||
)
|
for key, match_list in grouped_matches.items():
|
||||||
|
for num, result in enumerate(match_list):
|
||||||
|
# we need to consider that result could be a Command, where .aliases
|
||||||
|
# is a list of strings
|
||||||
|
if hasattr(result.aliases, "all"):
|
||||||
|
# result is a typeclassed entity where `.aliases` is an AliasHandler.
|
||||||
|
aliases = result.aliases.all(return_objs=True)
|
||||||
|
# remove pluralization aliases
|
||||||
|
aliases = [alias.db_key for alias in aliases if alias.db_category != "plural_key"]
|
||||||
|
else:
|
||||||
|
# result is likely a Command, where `.aliases` is a list of strings.
|
||||||
|
aliases = result.aliases
|
||||||
|
|
||||||
|
error += _MULTIMATCH_TEMPLATE.format(
|
||||||
|
number=num + 1,
|
||||||
|
name=key,
|
||||||
|
aliases=" [{alias}]".format(alias=";".join(aliases)) if aliases else "",
|
||||||
|
info=result.get_extra_info(caller),
|
||||||
|
)
|
||||||
matches = None
|
matches = None
|
||||||
else:
|
else:
|
||||||
# exactly one match
|
# exactly one match
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue