Фітнес бот в телеграм
Це 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).