From ac8e7371e98ad035de2f3cd2b295a9847b71a0ca Mon Sep 17 00:00:00 2001 From: hikariatama Date: Mon, 6 Jun 2022 16:54:31 +0000 Subject: [PATCH] 1.2.4 - Show current options in module config - Add new validators: `loader.validators.Union`, `loader.validators.NoneType` --- hikka/modules/hikka_config.py | 16 +++++++++--- hikka/modules/hikka_info.py | 5 +++- hikka/validators.py | 47 +++++++++++++++++++++++++++++++++++ hikka/version.py | 2 +- 4 files changed, 64 insertions(+), 6 deletions(-) diff --git a/hikka/modules/hikka_config.py b/hikka/modules/hikka_config.py index 8ded92f..6a8f2d0 100755 --- a/hikka/modules/hikka_config.py +++ b/hikka/modules/hikka_config.py @@ -29,7 +29,7 @@ class HikkaConfigMod(loader.Module): strings = { "name": "HikkaConfig", "configure": "🎚 Here you can configure your modules' configs", - "configuring_mod": "🎚 Choose config option for mod {}", + "configuring_mod": "🎚 Choose config option for mod {}\n\nCurrent options:\n\n{}", "configuring_option": "🎚 Configuring option {} of mod {}\nℹ️ {}\n\nDefault: {}\n\nCurrent: {}\n\n{}", "option_saved": "🎚 Option {} of mod {} saved!\nCurrent: {}", "option_reset": "♻️ Option {} of mod {} has been reset to default\nCurrent: {}", @@ -38,7 +38,7 @@ class HikkaConfigMod(loader.Module): "no_option": "🚫 Configuration option doesn't exist", "validation_error": "🚫 You entered incorrect config value. \nError: {}", "try_again": "🔁 Try again", - "typehint": "🕵️ Must be a {}", + "typehint": "🕵️ Must be the {}", "set": "set", "set_default_btn": "♻️ Reset default", "enter_value_btn": "✍️ Enter value", @@ -53,7 +53,7 @@ class HikkaConfigMod(loader.Module): strings_ru = { "configure": "🎚 Здесь можно управлять настройками модулей", - "configuring_mod": "🎚 Выбери параметр для модуля {}", + "configuring_mod": "🎚 Выбери параметр для модуля {}\n\nТекущие настройки:\n\n{}", "configuring_option": "🎚 Управление параметром {} модуля {}\nℹ️ {}\n\nСтандартное: {}\n\nТекущее: {}\n\n{}", "option_saved": "🎚 Параметр {} модуля {} сохранен!\nТекущее: {}", "option_reset": "♻️ Параметр {} модуля {} сброшен до значения по умолчанию\nТекущее: {}", @@ -500,7 +500,15 @@ class HikkaConfigMod(loader.Module): ] await call.edit( - self.strings("configuring_mod").format(utils.escape_html(mod)), + self.strings("configuring_mod").format( + utils.escape_html(mod), + "\n".join( + [ + f"▫️ {utils.escape_html(key)}: {self.prep_value(value)}" + for key, value in self.lookup(mod).config.items() + ] + ), + ), reply_markup=list(utils.chunks(btns, 2)) + [ [ diff --git a/hikka/modules/hikka_info.py b/hikka/modules/hikka_info.py index 76c06e9..dfb2b3c 100755 --- a/hikka/modules/hikka_info.py +++ b/hikka/modules/hikka_info.py @@ -67,7 +67,10 @@ class HikkaInfoMod(loader.Module): "custom_button", ["🌘 Support chat", "https://t.me/hikka_talks"], lambda: self.strings("_cfg_cst_btn"), - validator=loader.validators.Series(fixed_len=2), + validator=loader.validators.Union( + loader.validators.Series(fixed_len=2), + loader.validators.NoneType(), + ), ), loader.ConfigValue( "disable_banner", diff --git a/hikka/validators.py b/hikka/validators.py index df55b6a..81ef158 100644 --- a/hikka/validators.py +++ b/hikka/validators.py @@ -451,3 +451,50 @@ def TelegramID() -> Validator: "Telegram ID", _internal_id="TelegramID", ) + + +def _Union(value: Any, /, *, validators: list): + for validator in validators: + try: + return validator.validate(value) + except ValidationError: + pass + + raise ValidationError(f"Passed value ({value}) is not valid") + + +def Union(*validators) -> Validator: + doc = { + "en": "one of the following:\n", + "ru": "одним из следующего:\n", + } + + case = lambda x: x[0].upper() + x[1:] + + for validator in validators: + doc["en"] += f"- {case(validator.doc['en'])}\n" + doc["ru"] += f"- {case(validator.doc['ru'])}\n" + + doc["en"] = doc["en"].strip() + doc["ru"] = doc["ru"].strip() + + return Validator( + functools.partial(_Union, validators=validators), + doc, + _internal_id="Union", + ) + + +def _NoneType(value: Any, /) -> None: + if value not in {None, False, ""}: + raise ValidationError(f"Passed value ({value}) is not None") + + return None + + +def NoneType() -> Validator: + return Validator( + _NoneType, + "`None`", + _internal_id="NoneType", + ) diff --git a/hikka/version.py b/hikka/version.py index bda09e5..9f4c7f0 100644 --- a/hikka/version.py +++ b/hikka/version.py @@ -1,2 +1,2 @@ """Represents current userbot version""" -__version__ = (1, 2, 3) +__version__ = (1, 2, 4)