Как записать сообщение от пользователя в переменную?

Доброго времени суток!

Учусь писать чат-бота для tg с помощью Telebot. Одна из задач - собрать "калькулятор", который будет принимать от пользователя сообщение с числом, записывать его в переменную, производить расчет по формуле (прим. (x * 13 + 1000) + (х * 0,3)) и отправлять ответ пользователю с результатом расчета.

Сейчас мой код выглядит так:

import telebot
#Импорт модулей телебот
from telebot import types
#Привязываем токен тг-бота
bot = telebot.TeleBot('тут есть токен')
#Создаем функцию-обработчик сообщений
@bot.message_handler(commands = ['start'])
def handle_start(message):
    #Создаем клавиатуру
    keyboard = types.ReplyKeyboardMarkup(row_width = 2)
    order = types.KeyboardButton('Сделать заказ?')
    calc = types.KeyboardButton('Рассчитать стоимость?')
    delivery = types.KeyboardButton('Условия доставки')
    send_us = types.KeyboardButton('Написать нам')
    keyboard.add(order, calc, delivery, send_us)
    #Отвечаем на /start и присылаем клавиатуру
    bot.reply_to(message, 'Добро пожаловать в чат-бот <b>PC</b>?\nМы занимаемся <b>выкупом и доставкой</b> товаров из Интернет-магазина.\n', reply_markup=keyboard, parse_mode='html')
@bot.message_handler(func=lambda message: True)
def handler_message(message):
    #Действие при нажатии на 'Сделать заказ'
    if message.text == 'Сделать заказ?':
        bot.reply_to(message, 'Вы нажали на Сделать заказ?')
    #Действие при нажатии 'Рассчитать стоимость'
    elif message.text == 'Рассчитать стоимость?':
        bot.reply_to(message, 'Введите стоимость заказа')

Прошу строго не судить, тк только начал изучать python и ботостроение) PS Я здесь скорее за пояснением, чем за готовым решением, но буду благодарен любому ответу!


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

Автор решения: Muhammed Tangirkul

Здесь user_text и есть текст от пользователя (он в типе строки):

import telebot

bot = telebot.TeleBot("")

@bot.message_handler()
def do(message):
    user_text = message.text
    if user_text.isdigit():
        bot.send_message(message.chat.id, "Вы отправили цифры")
    else:
        bot.send_message(message.chat.id, "Здесь нет цыфр")

bot.polling()
→ Ссылка
Автор решения: Mipsirint

Если у Вас в коде будет несколько таких запросов разных данных от пользователя, то лучше использовать bot.register_next_step_handler():

@bot.message_handler(func=lambda message: True)
def handler_message(message):
    # Действие при нажатии на 'Сделать заказ'
    if message.text == 'Сделать заказ?':
        bot.reply_to(message, 'Вы нажали на Сделать заказ?')
    # Действие при нажатии 'Рассчитать стоимость'
    elif message.text == 'Рассчитать стоимость?':
        bot.reply_to(message, 'Введите стоимость заказа')
        # Ждём ввод от пользователя и передаём его в функцию calculate_price
        bot.register_next_step_handler(message, calculate_price)


def calculate_price(message):
    text = message.text
    # Проверяем, ввёл ли пользователь целое или дробное число
    if text.replace(".", "", 1).isdigit():
        user_number = float(text)
        price = user_number * 13 + 1000 + (user_number * 0.3)
        # Если цена оканчивается на .0, переводим в целое число без потерь
        if int(price) == price:
            price = int(price)
        bot.reply_to(message, f"Итоговая стоимость заказа: {price}")
    else:
        bot.reply_to(message, "Вы ввели не число, попробуйте ещё раз")
        # Снова запрашиваем от пользователя число
        bot.register_next_step_handler(message, calculate_price)
→ Ссылка