Telebot. Нужно как то разделить 2 сообщения если они в одном message_handler

Немножко далекий. Нужно сделать так, чтобы при первом сообщении шел подсчёт по calories, а при втором уже по protein. Проблема в том, что не получается разделить как то два сообщения. При первом message_handler все сразу идет на 2 переменных.

from telebot import TeleBot

bot = TeleBot("")

class Data:
    calories = 0
    protein = 0


data = Data()


def calc_info(message):
    message_kall_info = message.text
    if message_kall_info.isdigit() == True:
        count_kall = int(message_kall_info)
        data.calories += count_kall
        bot.send_message(message.chat.id, f"Введите количество белка")
        print(f"белок {message.text} ")
    else:
        bot.send_message(message.chat.id, "Вы ввели не цифру")



@bot.message_handler(content_types=['text'])
def send_kall_status(message):
    calc_info(message)


bot.polling()

Ответы (1 шт):

Автор решения: NTA

Можно добавить переменную state в класс Data, и менять переменную взависимости от запрашиваемых данных (калории, белок, протеин и т.д). В функции calc_info высчитывать данные взависимости от значения переменной state

from telebot import TeleBot

bot = TeleBot("")

class Data:
    state = 'none'
    calories = 0
    protein = 0
    belok = 0


data = Data()


def calc_info(message):
    message_kall_info = message.text
    if message_kall_info.isdigit() == True:
        if data.state == 'kallories':
            count_kall = int(message_kall_info)
            data.calories += count_kall
            bot.send_message(message.chat.id, "Введите количество белка")
            print(f"белок {message.text} ")
            data.state = 'belok'
        elif data.state == 'protein':
            #высчитывание протеина, или чего вы там еще хотите
            bot.send_message(message.chat.id, f"Белок: {data.belok}, Калории: {data.kallories}")
    else:
        bot.send_message(message.chat.id, "Вы ввели не цифру")



@bot.message_handler(content_types=['text'])
def send_kall_status(message):
    if data.state == 'none':
        data.state = 'kallories'
        calc_info(message)
    elif data.state == 'belok':
        data.state = 'protein'
        calc_info(message)


bot.polling()
→ Ссылка