Фитнес бот в телеграм
Это Telegram-бот, написанный на Python с использованием библиотеки python-telegram-bot. Его основная цель — предоставлять пользователям программы тренировок на основе их пола, цели (похудение, набор массы и т.д.), роста и веса. Для взаимодействия с пользователем бот использует пошаговый диалог (ConversationHandler), что делает процесс интуитивно понятным.
Основные компоненты и их назначение
Библиотека python-telegram-bot: Это основа, которая обеспечивает взаимодействие с Telegram API. Код использует ее асинхронную версию (async def), что является современной практикой.
ConversationHandler: Это ключевой элемент логики бота. Он позволяет создать "диалог" с пользователем, который состоит из нескольких шагов или "состояний". Бот последовательно задает вопросы и ждет ответов, переходя от одного состояния к другому.
Состояния (States):
Переменные SELECT_GENDER, GET_HEIGHT и т.д. — это уникальные идентификаторы для каждого шага разговора. Они помогают ConversationHandler понять, на каком этапе диалога находится пользователь и какую функцию вызывать следующей.
Клавиатуры (ReplyKeyboardMarkup):
Вместо того, чтобы заставлять пользователя вводить текст ("Мужчина", "Похудение"), бот предлагает готовые кнопки. Это уменьшает вероятность ошибок и делает интерфейс удобнее. В коде есть три разные клавиатуры: для выбора пола, для выбора цели мужчиной и женщиной.
Данные тренировок (male_programs, female_programs):
Это два больших словаря (dictionaries), которые являются "базой данных" бота. Они содержат готовые программы тренировок, структурированные по полу, цели и дням недели. В настоящее время эти данные жестко прописаны в коде.
Функции-обработчики (Handlers):
start: Запускает диалог, приветствует пользователя и предлагает выбрать пол.
select_gender, select_male_goal, select_female_goal: Обрабатывают выбор пользователя с клавиатуры, сохраняют данные (context.user_data) и задают следующий вопрос.
get_height, get_weight: Получают текстовые сообщения, преобразуют их в числа, проверяют на корректность и сохраняют.
show_workout_program: Финальная функция. Она собирает все сохраненные данные, рассчитывает Индекс Массы Тела (ИМТ) и находит соответствующую программу тренировок в словарях. После этого она формирует большое текстовое сообщение и отправляет его пользователю.
cancel: Позволяет пользователю в любой момент прервать диалог командой /cancel.
Логика работы (Пошаговый сценарий)
Пользователь отправляет команду /start.
Бот отвечает приветственным сообщением и показывает клавиатуру с кнопками "Мужчина" и "Женщина". Диалог переходит в состояние SELECT_GENDER.
Пользователь нажимает одну из кнопок.
В зависимости от выбора, бот показывает новую клавиатуру:
Для мужчин: "Похудение", "Набор".
Для женщин: "Похудение", "Тонус мышц".
Диалог переходит в состояние SELECT_MALE_GOAL или SELECT_FEMALE_GOAL.
Пользователь выбирает цель.
Бот сохраняет цель и просит ввести рост. Диалог переходит в состояние GET_HEIGHT.
Пользователь отправляет свой рост в сантиметрах. Бот проверяет, является ли это числом, и сохраняет его.
Бот просит ввести вес. Диалог переходит в состояние GET_WEIGHT.
Пользователь отправляет свой вес. Бот проверяет, является ли это числом, и сохраняет его.
Бот вызывает функцию show_workout_program, которая:
Рассчитывает ИМТ по формуле вес / (рост в метрах)².
Определяет категорию ИМТ ("Норма", "Ожирение" и т.д.).
На основе пола и цели находит нужную программу тренировок.
Формирует и отправляет финальное сообщение с ИМТ и программой на 3 дня.
Диалог завершается (ConversationHandler.END)
Основные компоненты и их назначение
Библиотека python-telegram-bot: Это основа, которая обеспечивает взаимодействие с Telegram API. Код использует ее асинхронную версию (async def), что является современной практикой.
ConversationHandler: Это ключевой элемент логики бота. Он позволяет создать "диалог" с пользователем, который состоит из нескольких шагов или "состояний". Бот последовательно задает вопросы и ждет ответов, переходя от одного состояния к другому.
Состояния (States):
Переменные SELECT_GENDER, GET_HEIGHT и т.д. — это уникальные идентификаторы для каждого шага разговора. Они помогают ConversationHandler понять, на каком этапе диалога находится пользователь и какую функцию вызывать следующей.
Клавиатуры (ReplyKeyboardMarkup):
Вместо того, чтобы заставлять пользователя вводить текст ("Мужчина", "Похудение"), бот предлагает готовые кнопки. Это уменьшает вероятность ошибок и делает интерфейс удобнее. В коде есть три разные клавиатуры: для выбора пола, для выбора цели мужчиной и женщиной.
Данные тренировок (male_programs, female_programs):
Это два больших словаря (dictionaries), которые являются "базой данных" бота. Они содержат готовые программы тренировок, структурированные по полу, цели и дням недели. В настоящее время эти данные жестко прописаны в коде.
Функции-обработчики (Handlers):
start: Запускает диалог, приветствует пользователя и предлагает выбрать пол.
select_gender, select_male_goal, select_female_goal: Обрабатывают выбор пользователя с клавиатуры, сохраняют данные (context.user_data) и задают следующий вопрос.
get_height, get_weight: Получают текстовые сообщения, преобразуют их в числа, проверяют на корректность и сохраняют.
show_workout_program: Финальная функция. Она собирает все сохраненные данные, рассчитывает Индекс Массы Тела (ИМТ) и находит соответствующую программу тренировок в словарях. После этого она формирует большое текстовое сообщение и отправляет его пользователю.
cancel: Позволяет пользователю в любой момент прервать диалог командой /cancel.
Логика работы (Пошаговый сценарий)
Пользователь отправляет команду /start.
Бот отвечает приветственным сообщением и показывает клавиатуру с кнопками "Мужчина" и "Женщина". Диалог переходит в состояние SELECT_GENDER.
Пользователь нажимает одну из кнопок.
В зависимости от выбора, бот показывает новую клавиатуру:
Для мужчин: "Похудение", "Набор".
Для женщин: "Похудение", "Тонус мышц".
Диалог переходит в состояние SELECT_MALE_GOAL или SELECT_FEMALE_GOAL.
Пользователь выбирает цель.
Бот сохраняет цель и просит ввести рост. Диалог переходит в состояние GET_HEIGHT.
Пользователь отправляет свой рост в сантиметрах. Бот проверяет, является ли это числом, и сохраняет его.
Бот просит ввести вес. Диалог переходит в состояние GET_WEIGHT.
Пользователь отправляет свой вес. Бот проверяет, является ли это числом, и сохраняет его.
Бот вызывает функцию show_workout_program, которая:
Рассчитывает ИМТ по формуле вес / (рост в метрах)².
Определяет категорию ИМТ ("Норма", "Ожирение" и т.д.).
На основе пола и цели находит нужную программу тренировок.
Формирует и отправляет финальное сообщение с ИМТ и программой на 3 дня.
Диалог завершается (ConversationHandler.END)