@Daniil879506

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

import telebot
from telebot import types

bot = telebot.TeleBot('6290635063:AAGKCmtYXL063NzdbnKw69kUCZjvF-AJZ7g')

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width = 3)
    matem = types.KeyboardButton('Математика')
    fiz = types.KeyboardButton('Физика')
    help = types.KeyboardButton('Помощь')
    markup.add(matem, fiz, help)
    mess = f'Привет, {message.from_user.first_name}. Этот бот создан для упрощения школьной жизни, ниже вы видите мой список команд, который в будущем будет пополняться'
    bot.send_message(message.chat.id, mess, parse_mode='html', reply_markup=markup)

@bot.message_handler()
def get_user_text(message):
    if message.text == 'Математика':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width = 3)
        disk = types.KeyboardButton('Посчитать дискриминант')
        kvyr = types.KeyboardButton('Решить квадратное уравнение')
        start = types.KeyboardButton('Назад')
        markup.add(disk, kvyr, start)
        bot.send_message(message.chat.id, 'Что именно нужно сделать?', reply_markup=markup)
    else:
        bot.send_message(message.chat.id, 'Я вас не понимаю')
        
@bot.message_handler()
def get_user_text(message):
    if message.text == 'Посчитать дискриминант':
        bot.send_message(message.chat.id, a=int(input('Введите коэффициент a')))
        bot.send_message(message.chat.id, b=int(input('Введите коэффициент b')))
        bot.send_message(message.chat.id, c=int(input('Введите коэффициент с')))
        d = b**2 - 4 * a * c
        bot.send_message(message.chat.id, f'Дискриминант равен {d}')

    elif message.text == 'Решить квадратное уравнение':
        bot.send_message(message.chat.id, a=int(input('Введите коэффициент a')))
        bot.send_message(message.chat.id, b=int(input('Введите коэффициент b')))
        bot.send_message(message.chat.id, c=int(input('Введите коэффициент с')))
        d = b**2 - 4 * a * c
        if d > 0:
            x1 = (-b - d**0.5)/(2 * a)
            x2 = (-b + d**0.5)/(2 * a)
            bot.send_message(message.chat.id, f'Корни уравнения {x1}, {x2}')

        elif d == 0:
            x = (-b) / (2 * a)
            bot.send_message(message.chat.id, f'Корень уравнения {x}')

        else:
            bot.send_message(message.chat.id, 'У данного уравнения нет корней')

bot.polling(none_stop=True)


/start
Привет, {message.from_user.first_name}. Этот бот создан для упрощения школьной жизни, ниже вы видите мой список команд, который в будущем будет пополняться
Математика
Что именно нужно сделать?
Решить квадратное уравнение
Я вас не понимаю #(Неправльно, должен написать коэф а и т.д.)
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Ищи инфу по finite state machine (FSM) и как она реализуется в pyTelegramBotAPI.

Если коротко - для каждого пользователя нужно хранить его текущий шаг (начало, выбор предмета, выбор задания, и т.п.) и ассоциированные с этим шагом данные. Т.е. нужно хранилище вида ключ-значение. Ключом будет ID пользователя.
В качестве такого хранилища можно использовать и обычный словарь (если допустимо, чтобы бот всё забывал при перезапуске), или базу данных.

И да, ты спалил токен бота. Меняй его теперь.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы