python telegram bot: код бежит не остонавливаясь на register_next_step_handler
Не могу понять как сделать так чтобы код остановился на register_next_step_handler. Проблема в том что эта функция как будто асинхронно действует, и берет сразу 2 register_next_step_handler и завершает код Надо чтобы она получила результат от юзера и только тогда пошла дальше
import os
from telebot import TeleBot
from dotenv import load_dotenv
from telebot.types import ReplyKeyboardMarkup, KeyboardButton
from db_postgres import BotDB
from func.bzu_func import Bzu_func
load_dotenv()
bot = TeleBot(os.getenv('API_KEY'))
BotDB = BotDB()
Bzu_func = Bzu_func()
FUNC_BUTTON = ["Посмотреть че сьел", "Записать че сьел"]
@bot.message_handler(commands=['start'])
def first_message(message):
if (not BotDB.user_exsistis(message.from_user.id)):
BotDB.add_user(message.from_user.id, message.from_user.first_name)
else:
BotDB.user_update_last_time(message.from_user.id)
bot.send_message(message.chat.id, f"Привет {message.from_user.first_name}. Этот бот считает прогресс дневной нормы калорий и белка(может и не считает)")
markup = ReplyKeyboardMarkup(row_width=2)
for button_name in FUNC_BUTTON:
item_button = KeyboardButton(button_name)
markup.add(item_button)
bot.send_message(message.chat.id, "Кнопочку нажмите", reply_markup=markup)
@bot.message_handler(func= lambda call:True)
def send_kall_status(message):
if message.text == "Записать че сьел":
answer_msg = bot.send_message(message.chat.id,"Напишите количество калорий")
bot.register_next_step_handler(answer_msg, Bzu_func.calc_info) #берет 1 хендлер и сразу же берит выполнять код дальше
answer_msg = bot.send_message(message.chat.id, "Напишите количество белка")
bot.register_next_step_handler(answer_msg, Bzu_func.calc_info) #берет 2 хендлер и все то же
BotDB.add_bzu_info(message.from_user.id, Bzu_func.protein, Bzu_func.all_calories)
user_bzu_info = BotDB.get_bzu_info(message.from_user.id)
bot.send_message(message.chat.id, f"Количество калории: {user_bzu_info[1]}, Количество белка: {user_bzu_info[0]}")
elif message.text == "Посмотреть че сьел":
pass
bot.infinity_polling()
то что в Bzu_func если это поможет:
import os
from telebot import TeleBot
from dotenv import load_dotenv
load_dotenv()
bot = TeleBot(os.getenv('API_KEY'))
class Bzu_func:
def __init__(self):
self.state = 'kalories'
self.all_calories = 0
self.protein = 0
self.writen_calories = 0
def calc_info(self, message):
message_kall_info = message.text
if message_kall_info.isdigit() == True:
if self.state == 'kalories':
self.state = "protein"
self.writen_calories = int(message_kall_info)
self.all_calories += self.writen_calories
bot.send_message(message.chat.id, "калории записаны")
self.state = 'protein'
elif self.state == 'protein':
self.state = "kalories"
count_protein = int(message_kall_info)
self.protein += count_protein
bot.send_message(message.chat.id, "белки записаны")
else:
self.state = "none"
bot.send_message(message.chat.id, "Вы ввели не цифрууууууууууууууууууууууу")