Repository navigation
Expand file tree
/
Copy pathcalculators.py
More file actions
81 lines (76 loc) · 5.4 KB
/
Copy pathcalculators.py
File metadata and controls
81 lines (76 loc) · 5.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from telebot.types import Message
from config import bot
import dbconnection as db
from contexts import get_user_context, UserContext
from user_body_profile_classes import UserBodyProfile
import utils
import calculator_formulas
from decorators import cancel_on_message_confusion
import re
from informer import isend
calculators = {'maxhr':('Максимальная частота сердечных сокращений (ЧСС)',
'Формула для расчета максимальной частоты сердечных сокращений (ЧСС) - это способ приближенно определить самое высокое количество сердечных ударов в минуту, которое ваше сердце может достигнуть во время максимального физического усилия. Эта формула основана на средних данных и может использоваться для первоначального предположения значения максимальной ЧСС.'),
'onerm':('Одноповторый максимум', 'Формулы для расчета максимального веса в упражнении, который вы сможете поднять 1 раз')
}
def send_calculators_message(message:Message, again=False):
isend(username=message.from_user.username, chat_id=message.chat.id, func_name='send_calculators_message')
msg = '' if again else 'Нажмите на соответствующую команду слева, чтобы начать расчет:'
for command, data in calculators.items():
name = data[0]
msg += f'\n/{command} - {name}'
bot.send_message(message.chat.id, msg)
bot.clear_step_handler_by_chat_id(message.chat.id)
bot.register_next_step_handler(message, calculator_command_handler)
@cancel_on_message_confusion
def calculator_command_handler(message:Message):
isend(username=message.from_user.username, chat_id=message.chat.id, func_name='calculator_command_handler', inputted_value=message.text)
calculator_command = str(message.text).replace('/', '')
if calculator_command == 'maxhr':
bot.send_message(message.chat.id, 'Введите возраст:')
bot.clear_step_handler_by_chat_id(message.chat.id)
bot.register_next_step_handler(message, age_handler, 'maxhr')
elif calculator_command == 'onerm':
bot.send_message(message.chat.id, 'Введите вес и количество повторений с ним (например: 60x12 или 75.5x5):')
bot.clear_step_handler_by_chat_id(message.chat.id)
bot.register_next_step_handler(message, weight_reps_handler, 'onerm')
else:
bot.send_message(message.chat.id, 'Команда не найдена. Попробуйте еще раз:')
bot.clear_step_handler_by_chat_id(message.chat.id)
bot.register_next_step_handler(message, calculator_command_handler)
@cancel_on_message_confusion
def age_handler(message:Message, formula:str):
isend(text=f'Формула - {formula}', username=message.from_user.username, chat_id=message.chat.id, func_name='age_handler', inputted_value=message.text)
age = str(message.text)
if age.isdigit():
if formula == 'maxhr':
maxhr_str = calculator_formulas.maxhr(age)
bot.send_message(message.chat.id, f'Максимальная ЧСС для вас - <b>{maxhr_str}</b>', parse_mode='HTML')
send_calculators_message(message, True)
else:
bot.send_message(message.chat.id, 'Введите возраст (например: 23):')
bot.clear_step_handler_by_chat_id(message.chat.id)
bot.register_next_step_handler(message, age_handler, formula)
@cancel_on_message_confusion
def weight_reps_handler(message:Message, formula:str):
isend(text=f'Формула - {formula}', username=message.from_user.username, chat_id=message.chat.id, func_name='age_handler', inputted_value=message.text)
if weight_reps_msg := message.text:
if re.match(r'^\d+(\.\d+)?x\d+(\.\d+)?$', weight_reps_msg) is not None:
weight, reps = weight_reps_msg.split('x')
weight = float(weight)
reps = int(reps)
if formula == 'onerm':
onerm_message_text = f'''
Формула №1: {calculator_formulas.onerm_langer_formula(weight, reps)}
Формула №2: {calculator_formulas.onerm_mayhew_watanabe_formula(weight, reps)}
Формула №3: {calculator_formulas.onerm_repsch_formula(weight, reps)}
'''
bot.send_message(message.chat.id, onerm_message_text)
send_calculators_message(message, True)
else:
bot.send_message(message.chat.id, 'Ошибка. Введите вес и количество повторений в формате ВесxПовторения (например: 100x2):')
bot.clear_step_handler_by_chat_id(message.chat.id)
bot.register_next_step_handler(message, weight_reps_handler, formula)
else:
bot.send_message(message.chat.id, 'Введите вес и количество повторений:')
bot.clear_step_handler_by_chat_id(message.chat.id)
bot.register_next_step_handler(message, weight_reps_handler, formula)