Фабрики и фильтры Callback Data для кнопок под сообщением в Telegram | aiogram | Inline Keyboard

YOUTUBE · 26.11.2025 04:35

Ключевые темы и таймкоды

Введение

0:00
  • Приветствие от Сурена.
  • Объяснение темы видео: работа с Telegram-ботом на Python и онлайн-кнопками.
  • Упоминание о телеграм-канале для обсуждения программирования.

Создание кнопок с фиксированными числами

1:04
  • Создание клавиатуры с кнопкой для генерации случайного числа.
  • Добавление кнопок с фиксированными числами через колбек-фабрику.
  • Определение класса `FixedRandomNumberCallbackData` как наследника `CallbackData`.

Настройка свойств кнопки

1:58
  • Импорт `CallbackData` и указание префикса.
  • Объявление свойств кнопки: `number: int`.
  • Возможность указания сепаратора вместо двоеточия.

Генерация случайных чисел и сохранение в колбек-дате

2:56
  • Генерация случайных чисел с помощью `RandomInt`.
  • Сохранение случайных чисел в колбек-дате с помощью метода `pack`.
  • Проверка максимальной длины колбек-даты 64 байта.

Создание второй кнопки

4:48
  • Создание второй кнопки с текстом «hidden».
  • Проверка отображения кнопок в Telegram-боте.

Обработка нажатий на кнопки

6:35
  • Добавление обработчика нажатий на кнопки.
  • Использование фильтра `CallbackData.filter` для обработки запросов.
  • Получение данных из кнопки через аннотацию `CallbackData.set`.

Завершение обработки запросов

8:17
  • Добавление строки для отображения структуры колбек-даты.
  • Обработка всех запросов по кнопке.

Перезапуск бота и тестирование кнопок

8:42
  • Перезапускаем бот и возвращаемся в Telegram.
  • Нажимаем на кнопки с фиксированным числом, например, «рендом на 58».
  • Добавляем «шоу аллерт тру» для отображения уведомлений.
  • Устанавливаем «кейч-тайм» на 30 секунд для отладки.

Использование фильтров для поиска чисел

9:42
  • Используем магический фильтр `f` для поиска нужного числа или числа в диапазоне.
  • Добавляем обработчик для числа 66, чтобы возвращать другой ответ.
  • Создаём отдельный хендлер для логики обработки.

Обработка «джек-пота»

10:41
  • В тексте ответа пишем «джек-пот» и добавляем эмодзи.
  • Фильтруем данные с помощью `f.numb == 66`.
  • Перезапускаем бот и проверяем работу кнопки.

Валидация данных и использование префиксов

12:33
  • Валидируем данные с помощью аннотаций.
  • Указываем префиксы для разделения действий по группам.
  • Используем помощник для упаковки и распаковки данных.

Создание enum для параметров

13:04
  • Создаём enum `renderNumAction` с значениями `dice` и `model`.
  • Импортируем enum из `enum`.
  • Создаём класс `renderNumCallbackData` с префиксом `renderNum`.

Применение enum в обработчиках

15:13
  • Заменяем константы на `renderNumCallbackData` в обработчиках.
  • Фильтруем данные по `renderNumAction.dice` и `renderNumAction.model`.
  • Сохраняем изменения и перезапускаем бот для проверки.

Преимущества использования префиксов

17:02
  • Префиксы обеспечивают уникальность данных.
  • Можно выносить префиксы в отдельные настройки для дополнительной безопасности.
  • В кнопки можно складывать несколько полей данных, соблюдая лимит в 64 байта.

Хранение данных о товарах в кнопке

17:43
  • Данные о товарах будут храниться в базе данных, но некоторые данные можно закодировать на уровне кнопки.
  • Пример данных: название и цена товара.
  • Добавление нового обработчика в `user_com` для вызова `shop_comment`.

Создание клавиатуры для кнопок

18:29
  • Получение обычного сообщения и отправка клавиатуры с сообщением.
  • Создание модуля `shop_keyboard` и объявление новой клавиатуры.
  • Использование `inline_keyboard_builder` для создания клавиатуры.

Добавление кнопок на клавиатуру

19:04
  • Использование `callback_data` для передачи данных в кнопки.
  • Объявление класса `shop_actions` с методами `product` и `address`.
  • Добавление кнопок `show_product` и `my_address` на клавиатуру.

Обработка кнопок в боте

21:49
  • Регистрация роутера в `callback_handlers`.
  • Обработка запроса на кнопку `my_address` с использованием фильтра.
  • Исправление проблемы с фильтрацией запросов.

Обработка второго экшена

25:38
  • Добавление обработки второго экшена для отображения списка товаров.
  • Создание новой клавиатуры `product_keyboard`.
  • Добавление кнопки `back_to_root` для возврата на главную страницу.

Вывод товаров на клавиатуру

29:05
  • Использование цикла `for` для создания списка товаров.
  • Добавление информации о товарах в кнопки клавиатуры.
  • Генерация индексов для товаров с помощью `enumerate`.

Завершение настройки клавиатуры

30:02
  • Распаковка списка товаров и добавление информации о товарах в кнопки.
  • Создание индексов для товаров с помощью `enumerate` и параметра `start`.

Создание класса ProductCallbackData

30:32
  • Объявляем новый класс ProductCallbackData, наследующий CallbackData.
  • Добавляем свойства: ID, Name, Price.
  • Указываем префикс для удобства работы.

Объявление действий

31:29
  • Создаём класс ProductAction с свойствами: details, update, delete.
  • В действии на кнопку указываем Action: ProductAction.details.

Обработка действий в Telegram

32:28
  • Добавляем обработчик для действий в ShoppingKeyboard.
  • Объявляем RouterCallbackQuery с фильтром по товарам.
  • Запрашиваем детали товара через ProductAction.details.

Формирование текста сообщения

33:16
  • Объявляем переменную messageText для построения текста сообщения.
  • Используем помощник markdown для сборки текста.
  • Включаем ID, Title и Price товара в текст сообщения.

Создание клавиатуры для деталей товара

35:57
  • Создаём клавиатуру ProductDetailsKeyboard.
  • Добавляем кнопку для возврата к списку товаров.
  • Создаём кнопки для обновления и удаления товара.

Передача данных в кнопки

36:52
  • Передаём информацию о товаре в кнопку обновления.
  • Выбираем между явной передачей данных и распаковкой объекта.
  • Исключаем ненужные поля или явно указываем необходимые.

Создание кнопок обновления и удаления

38:26
  • Копируем код для создания кнопки обновления.
  • Создаём аналогичную кнопку для удаления товара.
  • Используем цикл for для создания списка пар label, action.

Добавление кнопок в клавиатуру

39:22
  • Добавляем две кнопки: «Апдейт» и «Делит».
  • Изменяем текст и действие кнопок.
  • Используем клавиатуру для ответа, передавая объект «продакт дитейлс кейборд».

Обработка кнопок в Telegram

40:19
  • Нажимаем на кнопку «Таблетт» и получаем информацию о товаре.
  • Возвращаемся к списку товаров через кнопку «Бэкту продакс».
  • Добавляем обработчики для кнопок «Апдейт» и «Делит».

Обработка кнопки «Апдейт»

41:17
  • Создаём обработчик для кнопки «Апдейт».
  • Редактируем клавиатуру с помощью метода «кол точка бот эдит месседж реплай марка».
  • Передаём информацию по товару в функцию «билд апдейт продакт кейборд».

Создание клавиатуры для обновления

42:15
  • Создаём функцию «билд апдейт продакт кейборд» для создания клавиатуры.
  • Добавляем кнопки «Назад» и «Апдейт» в клавиатуру.
  • Указываем колбек дата для обработки действий.

Обработка кнопки «Назад»

44:09
  • Создаём кнопку «Назад» с указанием колбек дата и экшна.
  • Прокидываем информацию о товаре в кнопку.
  • Проверяем работу кнопок в Telegram.

Применение колбек дата фабрики

46:03
  • Обсуждаем удобство использования колбек дата фабрики для временных данных.
  • Приводим пример использования для ручной модерации пользователей.
  • Подчёркиваем преимущества работы с колбек дата как с Python объектами.

Заключение

47:00
  • Подводим итоги использования колбек дата фабрики.
  • Делимся впечатлениями от работы с колбек дата.
  • Приглашаем к обсуждению в Telegram-чате и на Boosty.