Skip to main content
CactusLib предоставляет элегантный способ создания инлайн-клавиатур и обработки нажатий на кнопки. Вся необходимая логика находится в пространстве имен CactusUtils.Inline.

1. Создание клавиатуры

Клавиатура состоит из рядов, а ряды — из кнопок.

CactusUtils.Inline.Button (Source)

Создает одну кнопку.

Иконки и Premium-эмодзи в тексте кнопки

Вы можете использовать иконки и Premium-эмодзи в тексте кнопки. Синтаксис: <emoji id=5427317234403930129/> и <icon id=msg_search/>. Например:
Пример кнопки с premium-эмодзи

Кнопка с премиум эмодзи

Пример кнопки с Drawable-иконкой

Кнопка с Drawable иконкой

Все Drawable иконки (R.Drawable.name) можно найти в плагине DevSettingsIcons

CactusUtils.Inline.CallbackData (Source)

Создает данные для колбэка для кнопки.

CactusUtils.Inline.Markup (Source)

Собирает кнопки в полноценную клавиатуру.
Пример создания клавиатуры

2. Отправка сообщения с клавиатурой

Передайте созданный объект Markup в метод CactusUtils.Command.answer или CactusUtils.send_message.
Создание и отправка кнопок

3. Обработка нажатий (callback)

Для обработки нажатий используется декоратор @CactusUtils.Inline.on_click.
  • @CactusUtils.Inline.on_click(method): Декорирует функцию, которая будет вызвана, когда пользователь нажмет на кнопку с callback_data, где method совпадает с method в CallbackData.
В функцию-обработчик передается объект CactusUtils.Inline.CallbackParams.

Полный пример

counter.plugin
Видео-демонстрация Как это работает:
  1. Пользователь пишет .menu.
  2. Плагин отправляет сообщение “Счетчик: 0” с кнопкой.
  3. Пользователь нажимает на кнопку.
  4. CactusLib перехватывает колбэк и видит, что метод — counter_click.
  5. Вызывается функция _on_counter_click.
  6. Функция обновляет значение в БД и редактирует исходное сообщение, заменяя его на “Счетчик: 1”. Клавиатура остается на месте.

Отправка сообщения с клавиатурой в чат с метаданными внутри

Чтобы отправить сообщение с клавиатурой в чат с метаданными, нужно передать is_global=True в конструктор CactusUtils.Inline.Markup.
clickme.plugin

.items1 - Показывает интерактивное меню всем пользователям обычным способом

.items2 - Показывает интерактивное меню всем пользователям альтернативным способом