Сегодня я расскажу вам о том, как сделать inline-кнопки, которые будет нажимать пользователь на вопросы бота. Это как минимум - удобно, а как максимум уберегает нас о того чтобы пользователь не ввёл "что-нибудь не то", от чего программа может рухнуть или отработать как-нибудь не так.
Итак, в прошлой (четвертой) части мы добрались до того что получили словарь с возможными вариантами городов. Теперь нам нужно, как оказалось Рим (в тестовом режиме я использую ранее сохраненный запрос к серверу в фай.json) у нас не один, и вариантов бывает много.
У меня это сделано так:
Пользователь видит список городов и нажимает соответствующую кнопку, а мы в свою очередь получаем соответствующий destination_id, для того чтобы уже искать отель в конкретно определенном населенном пункте.
Как же это работает?! Всё довольно таки просто:
Я создал файл cities_buttons.py и поместил его в подпапку inline в директории keyboards. В котором используются два модуля (from telebot import types, from loader import bot). Первый используется для создания inline кнопок, а второй за отправку сообщений пользователю.
Функция buttons_generator(message, cities): принимает в качестве аргументов сообщение и словарь с возможными вариантами городов, пройдя по элементам этого словаря циклом мы создаем блок кнопок, который посылаем пользователю в чат.
Пользователь, нажав на одну из кнопок, нужного ему города, создает реакцию, на которую реагирует декоратор @bot.callback_query_handler(func=lambda call: True), запуская в обработку полученный destination_id. Сохраняя полученный id и в тоже время удаляя сообщение с кнопками, чтобы пользователь не нажал второй раз на кнопку.
У нас есть idшник нужного нам города, переходим уже непосредственно к поиску отеля в этом городе. Для поиска нам нужны будут еще несколько переменных checkIn и checkOut (это будут даты, в формате "год-месяц-день"), для того чтобы пользователь ввел правильно дату, в правильном формате я использовал готовый модуль telegram_bot_calendar, который можно установить командой:
- pip install python-telegram-bot-calendar
Вызывается календарь довольно таки просто:
Помимо checkIn и checkOut нам понадобятся еще несколько переменных для запроса: pageNumber, pageSize, adults1, priceMin, priceMax, но это уже будет без использования такого механизма как inline-кнопки и в следующей части публикации.
Данная публикация не претендует на экспертное мнение, это всего лишь мой вариант создания бота, он находится в стадии написания и окончательный вариант может поменяться. Это скорее попытка осмыслить то, что я делаю, в первую очередь для самого себя. А если ещё принесет кому-то пользу - я буду только рад!
Всем всех благ, пурпурного настроения и счастья вагон с тележкой!