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)