Проверка сообщения пользователя на число в Telegram - telebot

@bot.message_handler(commands=['realtyvalue'])
def rvalue(message):
    bot.send_message(message.chat.id, 'Приступаем к оценке вашей недвижимости...', reply_markup=None)
    bot.send_message(message.chat.id, 'Пришлите боту число - площадь квартиры (м²):', reply_markup=None)
    square_realty = message.text
    while square_realty.isdigit() == False:
      bot.send_message(message.chat.id, 'Пришлите боту только число - площадь квартиры (м²):', reply_markup=None)
      square_realty = message.text
    bot.send_message(message.chat.id, 'Данные приняты! \n  площадь квартиры:',square_realty, reply_markup=None)

Мне нужно, чтобы сообщение, хранящееся в переменной square_realty проверялось на то, чтобы быть числом. И если введено не число площади квартиры, то бот просил прислать площадь еще раз.


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

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

Как вам уже правильно говорили, нужно использовать register_next_step_handler.

Вот небольшой пример:

import telebot

TOKEN = 'TOKEN'
bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands=['realtyvalue'])
def rvalue(message):
    bot.send_message(message.chat.id, 'Приступаем к оценке вашей недвижимости...', reply_markup=None)
    bot.send_message(message.chat.id, 'Пришлите боту число - площадь квартиры (м²):', reply_markup=None)
    bot.register_next_step_handler(message, callback=calculation)
    
@bot.message_handler(func=lambda message: True)
def handle_messages(message):
    bot.reply_to(message, "Привет, что бы приступить к оценке вашей недвижимости - /realtyvalue")        

def calculation(message):
    square_realty = message.text
    if square_realty.isdigit():
        #bot.clear_step_handler_by_chat_id(message.chat.id) - а так можно удалять step_handler
        bot.send_message(message.chat.id, 'Данные приняты! \nПлощадь квартиры: ' + square_realty, reply_markup=None, parse_mode=None)

    else:
        bot.send_message(message.chat.id, 'Пришлите боту только число - площадь квартиры (м²):', reply_markup=None)
        bot.register_next_step_handler(message, callback=calculation)
       
bot.polling()
→ Ссылка