Перейти к содержимому

KeyboardRegistry

KeyboardRegistry — реестр функций-фабрик, каждая из которых создаёт InlineKeyboard по ключу и набору данных.

from edgebot import KeyboardRegistry
registry = KeyboardRegistry()

Декоратор для регистрации фабрики клавиатуры.

@registry.register("main_menu")
def kb_main_menu() -> InlineKeyboard:
kb = InlineKeyboard()
kb.button("📋 Профиль", callback_data="profile")
kb.button("⚙️ Настройки", callback_data="settings")
return kb
ПараметрОписание
keyСтроковый ключ для получения клавиатуры

Контракт фабрики:

  • Обязана возвращать InlineKeyboard (не dict)
  • Объявляет только нужные параметры
  • Лишние kwargs отбрасываются автоматически

Вызывает фабрику и возвращает нефинализированный InlineKeyboard.

registry.get(key: str, **kwargs) -> InlineKeyboard
RaisesУсловие
KeyboardNotFoundКлюч не зарегистрирован
TypeErrorФабрика вернула не InlineKeyboard
registry.has(key: str) -> bool

Фабрика может принимать параметры для генерации кнопок:

@registry.register("profile_main")
def kb_profile(is_active: bool) -> InlineKeyboard:
kb = InlineKeyboard()
toggle_text = "❌ Выключить" if is_active else "✅ Включить"
kb.button(toggle_text, callback_data="toggle")
kb.row()
kb.button("↺ Сбросить", callback_data="reset")
kb.button("🗑 Удалить", callback_data="delete")
return kb

Рекомендуемая структура:

bot/
keyboards/
__init__.py # создаёт registry, импортирует модули
profile.py # @registry.register("profile_main")
settings.py # @registry.register("settings_main")
keyboards/__init__.py
from edgebot import KeyboardRegistry
registry = KeyboardRegistry()
from . import profile # noqa: E402,F401
from . import settings # noqa: E402,F401
__all__ = ["registry"]