Получение нескольких аргументов подряд PyTelegramBotAPI

Пишу Телеграмм-бота на python.

bot = telebot.TeleBot(config.TOKEN)
@bot.message_handler(commands=['discr'])

def discriminant(message):
    bot.send_message(message.chat.id, 'Введите 3 аргумента (a, b, c)')

def discr(a, b, c) -> int:
    discr: float
    discr = int(b) ** 2 - (4 * int(a) * int(c))
    if discr < 0:
        bot.send_message(message.chat.id, 'Дискриминант отрицательный, корней нет')
    else:
        discr **= 0.5
        x1 = (int(-b) + discr) / (2 * int(a))
        x2 = (int(-b) - discr) / (2 * int(a))
        bot.send_message(message.chat.id, "Дискриминант: " + str(discr ** 2))
        bot.send_message(message.chat.id, "Корень из дискриминанта: " + str(discr))
        bot.send_message(message.chat.id, "Результат 1: " + str(x1))
        bot.send_message(message.chat.id, "Результат 2: " + str(x2))

@bot.message_handler(commands=['start'])
def welcome(message):

    bot.send_photo(message.chat.id, open('welcome.png', 'rb'))
    bot.send_message(message.chat.id, "?Здравствуйте, {0.first_name}?!".format(message.from_user, bot.get_me()),
    parse_mode='html')
    bot.send_message(message.chat.id, "?Я - <b>{1.first_name}</b>, бот, который поможет вам с математикой?".format(message.from_user, bot.get_me()),
parse_mode='html')
    bot.send_message(message.chat.id, "Вы можете:")
    bot.send_message(message.chat.id, "Написать команду /discr, чтобы посчитать дискриминант и значения x")
    bot.send_message(message.chat.id, "Написать команду /figures, чтобы узнать формулу площади нужной фигуры") # Присылать картинками
    bot.send_message(message.chat.id, "Написать команду /stepen, чтобы возвести нужное число в любую степень")
    bot.send_message(message.chat.id, "Написать команду /prime, чтобы узнать, простое число или составное")
    bot.send_message(message.chat.id, "Написать команду /gcd, чтобы найти наибольший общий делитель двух чисел")
    bot.send_message(message.chat.id, "Написать команду /random, чтобы сгенерировать случайное число в нужном вам диапазоне")

bot.polling(none_stop=True)`

До def (a, b, c) программа просто не доходит. Почему?


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

Автор решения: Bor-is-luv

Над функцией discr(a, b, c) не стоит @bot.message_handler

→ Ссылка
Автор решения: Oleksandr Bielov

В данном случае аргументы a, b, c будут подаваться как одна строка -> надо написать парсер, который будет преобразовывать из строки, которую вам отправит пользователь, в нужные Вам аргументы. После этого парсер будет просто вызывать нужную вам функцию для обработки уже готовых аргументов. Для написания парсера надо сделать еще одну функцию, которая будет получать от бота текст. Например:

@bot.message_handler(content_types=['text'])
def check_text(message):
    line = message.text  # получаем строку, которую написал пользователь
    a = int(line.split(' ')[0])  # разбиваем строку на элементы, которые написаны через пробел и сразу преобразовываем в тип данных int
    b = int(line.split(' ')[1])
    c = int(line.split(' ')[2])
    discr(a, b, c)  # вызываем функцию, которая обрабатывает аргументы нужным для Вас методом
→ Ссылка