Как записать сообщение от пользователя в переменную?
Доброго времени суток!
Учусь писать чат-бота для 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 шт):
Здесь 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()
Если у Вас в коде будет несколько таких запросов разных данных от пользователя, то лучше использовать 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)