Bot fitness w Telegramie
To jest bot Telegram, napisany w Pythonie z wykorzystaniem biblioteki python-telegram-bot. Jego głównym celem jest dostarczanie użytkownikom programów treningowych na podstawie ich płci, celu (utrata wagi, przyrost masy itp.), wzrostu i wagi. W celu interakcji z użytkownikiem bot wykorzystuje dialog krok po kroku (ConversationHandler), co sprawia, że proces jest intuicyjny.
Główne komponenty i ich przeznaczenie
Biblioteka python-telegram-bot: To podstawa, która zapewnia interakcję z Telegram API. Kod wykorzystuje jej asynchroniczną wersję (async def), co jest nowoczesną praktyką.
ConversationHandler: To kluczowy element logiki bota. Pozwala na stworzenie "dialogu" z użytkownikiem, który składa się z kilku kroków lub "stanów". Bot kolejno zadaje pytania i czeka na odpowiedzi, przechodząc od jednego stanu do drugiego.
Stany (States):
Zmienne SELECT_GENDER, GET_HEIGHT itd. — to unikalne identyfikatory dla każdego kroku rozmowy. Pomagają ConversationHandler zrozumieć, na jakim etapie dialogu znajduje się użytkownik i którą funkcję wywołać następnie.
Klawiatury (ReplyKeyboardMarkup):
Zamiast zmuszać użytkownika do wpisywania tekstu ("Mężczyzna", "Utrata wagi"), bot oferuje gotowe przyciski. Zmniejsza to prawdopodobieństwo błędów i sprawia, że interfejs jest bardziej przyjazny. W kodzie znajdują się trzy różne klawiatury: do wyboru płci, do wyboru celu przez mężczyzn i kobiety.
Dane treningów (male_programs, female_programs):
To dwa duże słowniki (dictionaries), które stanowią "bazę danych" bota. Zawierają gotowe programy treningowe, uporządkowane według płci, celu i dni tygodnia. Obecnie te dane są na stałe zapisane w kodzie.
Funkcje-obsługiwacze (Handlers):
start: Uruchamia dialog, wita użytkownika i proponuje wybór płci.
select_gender, select_male_goal, select_female_goal: Obsługują wybór użytkownika z klawiatury, zapisują dane (context.user_data) i zadają następne pytanie.
get_height, get_weight: Odbierają wiadomości tekstowe, przekształcają je w liczby, sprawdzają poprawność i zapisują.
show_workout_program: Ostateczna funkcja. Zbiera wszystkie zapisane dane, oblicza Wskaźnik Masy Ciała (BMI) i znajduje odpowiedni program treningowy w słownikach. Następnie formułuje dużą wiadomość tekstową i wysyła ją do użytkownika.
cancel: Pozwala użytkownikowi w dowolnym momencie przerwać dialog komendą /cancel.
Logika działania (Krok po kroku)
Użytkownik wysyła komendę /start.
Bot odpowiada powitalną wiadomością i pokazuje klawiaturę z przyciskami "Mężczyzna" i "Kobieta". Dialog przechodzi w stan SELECT_GENDER.
Użytkownik naciska jeden z przycisków.
W zależności od wyboru, bot pokazuje nową klawiaturę:
Dla mężczyzn: "Utrata wagi", "Przyrost".
Dla kobiet: "Utrata wagi", "Tonizacja mięśni".
Dialog przechodzi w stan SELECT_MALE_GOAL lub SELECT_FEMALE_GOAL.
Użytkownik wybiera cel.
Bot zapisuje cel i prosi o podanie wzrostu. Dialog przechodzi w stan GET_HEIGHT.
Użytkownik wysyła swój wzrost w centymetrach. Bot sprawdza, czy to liczba, i zapisuje ją.
Bot prosi o podanie wagi. Dialog przechodzi w stan GET_WEIGHT.
Użytkownik wysyła swoją wagę. Bot sprawdza, czy to liczba, i zapisuje ją.
Bot wywołuje funkcję show_workout_program, która:
Oblicza BMI według wzoru waga / (wzrost w metrach)².
Określa kategorię BMI ("Norma", "Otyłość" itd.).
Na podstawie płci i celu znajduje odpowiedni program treningowy.
Formułuje i wysyła ostateczną wiadomość z BMI i programem na 3 dni.
Dialog kończy się (ConversationHandler.END).
Główne komponenty i ich przeznaczenie
Biblioteka python-telegram-bot: To podstawa, która zapewnia interakcję z Telegram API. Kod wykorzystuje jej asynchroniczną wersję (async def), co jest nowoczesną praktyką.
ConversationHandler: To kluczowy element logiki bota. Pozwala na stworzenie "dialogu" z użytkownikiem, który składa się z kilku kroków lub "stanów". Bot kolejno zadaje pytania i czeka na odpowiedzi, przechodząc od jednego stanu do drugiego.
Stany (States):
Zmienne SELECT_GENDER, GET_HEIGHT itd. — to unikalne identyfikatory dla każdego kroku rozmowy. Pomagają ConversationHandler zrozumieć, na jakim etapie dialogu znajduje się użytkownik i którą funkcję wywołać następnie.
Klawiatury (ReplyKeyboardMarkup):
Zamiast zmuszać użytkownika do wpisywania tekstu ("Mężczyzna", "Utrata wagi"), bot oferuje gotowe przyciski. Zmniejsza to prawdopodobieństwo błędów i sprawia, że interfejs jest bardziej przyjazny. W kodzie znajdują się trzy różne klawiatury: do wyboru płci, do wyboru celu przez mężczyzn i kobiety.
Dane treningów (male_programs, female_programs):
To dwa duże słowniki (dictionaries), które stanowią "bazę danych" bota. Zawierają gotowe programy treningowe, uporządkowane według płci, celu i dni tygodnia. Obecnie te dane są na stałe zapisane w kodzie.
Funkcje-obsługiwacze (Handlers):
start: Uruchamia dialog, wita użytkownika i proponuje wybór płci.
select_gender, select_male_goal, select_female_goal: Obsługują wybór użytkownika z klawiatury, zapisują dane (context.user_data) i zadają następne pytanie.
get_height, get_weight: Odbierają wiadomości tekstowe, przekształcają je w liczby, sprawdzają poprawność i zapisują.
show_workout_program: Ostateczna funkcja. Zbiera wszystkie zapisane dane, oblicza Wskaźnik Masy Ciała (BMI) i znajduje odpowiedni program treningowy w słownikach. Następnie formułuje dużą wiadomość tekstową i wysyła ją do użytkownika.
cancel: Pozwala użytkownikowi w dowolnym momencie przerwać dialog komendą /cancel.
Logika działania (Krok po kroku)
Użytkownik wysyła komendę /start.
Bot odpowiada powitalną wiadomością i pokazuje klawiaturę z przyciskami "Mężczyzna" i "Kobieta". Dialog przechodzi w stan SELECT_GENDER.
Użytkownik naciska jeden z przycisków.
W zależności od wyboru, bot pokazuje nową klawiaturę:
Dla mężczyzn: "Utrata wagi", "Przyrost".
Dla kobiet: "Utrata wagi", "Tonizacja mięśni".
Dialog przechodzi w stan SELECT_MALE_GOAL lub SELECT_FEMALE_GOAL.
Użytkownik wybiera cel.
Bot zapisuje cel i prosi o podanie wzrostu. Dialog przechodzi w stan GET_HEIGHT.
Użytkownik wysyła swój wzrost w centymetrach. Bot sprawdza, czy to liczba, i zapisuje ją.
Bot prosi o podanie wagi. Dialog przechodzi w stan GET_WEIGHT.
Użytkownik wysyła swoją wagę. Bot sprawdza, czy to liczba, i zapisuje ją.
Bot wywołuje funkcję show_workout_program, która:
Oblicza BMI według wzoru waga / (wzrost w metrach)².
Określa kategorię BMI ("Norma", "Otyłość" itd.).
Na podstawie płci i celu znajduje odpowiedni program treningowy.
Formułuje i wysyła ostateczną wiadomość z BMI i programem na 3 dni.
Dialog kończy się (ConversationHandler.END).