From c326566bd29ea8146c9ba4789db05a29bf0697ab Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Tue, 26 Apr 2022 02:28:43 -0700 Subject: [PATCH] Show "did you mean 'item/location_name'" in invalid item/location error. (#469) --- Options.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Options.py b/Options.py index 5ff5a675..ea1b7eed 100644 --- a/Options.py +++ b/Options.py @@ -6,6 +6,7 @@ import typing import random from schema import Schema, And, Or +from thefuzz import process as fuzzy_process class AssembleOptions(abc.ABCMeta): @@ -456,13 +457,17 @@ class VerifyKeys: if self.verify_item_name: for item_name in self.value: if item_name not in world.item_names: + picks = fuzzy_process.extract(item_name, world.item_names, limit=2) raise Exception(f"Item {item_name} from option {self} " - f"is not a valid item name from {world.game}") + f"is not a valid item name from {world.game}. " + f"Did you mean '{picks[0][0]}' ({picks[0][1]}% sure)") elif self.verify_location_name: for location_name in self.value: if location_name not in world.location_names: + picks = fuzzy_process.extract(location_name, world.location_names, limit=2) raise Exception(f"Location {location_name} from option {self} " - f"is not a valid location name from {world.game}") + f"is not a valid location name from {world.game}. " + f"Did you mean '{picks[0][0]}' ({picks[0][1]}% sure)") class OptionDict(Option[typing.Dict[str, typing.Any]], VerifyKeys):