lopphopp
@lopphopp
Студент

Что исправить, чтобы callback.data обновлялась после каждого нового нажатия кнопки?

Здравствуйте, не понимаю, почему не обновляется callback.data у меня в боте. После первого нажатия кнопки всегда выполняется только действие выбранное в первом проходе, т.е. если я запустил бота и решил сложить числа, что бы я дальше не нажимал выполняется именно сложение. Не могли бы вы указать на мои ошибки в коде?
def get_num(message):
    global a
    a = float(message.text)
    question = 'Что будем с ним делать?'
    keyboard = types.InlineKeyboardMarkup()
    key_plus = types.InlineKeyboardButton(text='+', callback_data='plus')
    key_minus = types.InlineKeyboardButton(text='-', callback_data='minus')
    key_divide = types.InlineKeyboardButton(text='/', callback_data='divide')
    key_multiply = types.InlineKeyboardButton(text='*', callback_data='multiply')
    key_sqrt = types.InlineKeyboardButton(text='sqrt', callback_data='sqrt')
    key_log = types.InlineKeyboardButton(text='log', callback_data='log')
    key_sin = types.InlineKeyboardButton(text='sin', callback_data='sin')
    key_cos = types.InlineKeyboardButton(text='cos', callback_data='cos')
    keyboard.row(key_plus, key_minus, key_multiply, key_divide)
    keyboard.row(key_sqrt, key_log, key_sin, key_cos)
    bot.send_message(message.from_user.id, text=question, reply_markup=keyboard)

@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
    mes = call.data
    global a
    global b
    if mes == 'plus':
        bot.send_message(call.message.chat.id, 'С чем будем складывать?')

        @bot.message_handler(content_types=['text'])
        def plus(message):
            b = float(message.text)
            b = a + b
            str(b)
            bot.send_message(call.message.chat.id, b)
    elif mes == "minus":
        bot.send_message(call.message.chat.id, 'Что будем вычитать?')

        @bot.message_handler(content_types=['text'])
        def minus(message):
            b = float(message.text)
            b = a - b
            str(b)
            bot.send_message(message.chat.id, b)
    elif mes == 'divide':
        bot.send_message(call.message.chat.id, 'На что будем делить?')

        @bot.message_handler(content_types=['text'])
        def divide(message):
            b = float(message.text)
            b = a / b
            str(b)
            bot.send_message(message.chat.id, b)
    elif mes == 'multiply':
        bot.send_message(call.message.chat.id, 'На что будем умножать?')

        @bot.message_handler(content_types=['text'])
        def multiply(message):
            b = float(message.text)
            b = a * b
            str(b)
            bot.send_message(message.chat.id, b)
    elif mes == 'sqrt':
        bot.send_message(call.message.chat.id, 'Корень какой степени вы хотите извлечь?')

        @bot.message_handler(content_types=['text'])
        def sqrt(message):
            b = float(message.text)
            b = math.pow(a, 1 / b)
            str(b)
            bot.send_message(message.chat.id, b)
    elif mes == 'log':
        bot.send_message(call.message.chat.id, 'Какое основание будет у логарифма?')

        @bot.message_handler(content_types=['text'])
        def log(message):
            b = float(message.text)
            b = math.log(a, b)
            str(b)
            bot.send_message(message.chat.id, b)
    elif mes == 'sin':
        a = math.radians(a)
        b = math.sin(a)
        b = str(b)
        bot.send_message(call.message.chat.id, b)
    elif mes == 'cos':
        a = math.radians(a)
        b = math.cos(a)
        b = str(b)
        bot.send_message(call.message.chat.id, b)
    elif mes == 'float':
        bot.send_message(call.message.chat.id,
                         'Введите нижний и верхний предел предел (два вещественных числа (пример - 5.43), через пробел)')

        @bot.message_handler(content_types=['text'])
        def get_lower(message):
            b = message.text
            c = b.split()
            b = float(c[1])
            a = float(c[0])
            b = random.uniform(a, b)
            bot.send_message(call.message.chat.id, str(b))
    elif mes == 'int':
        bot.send_message(call.message.chat.id, 'Введите нижний и верхний предел предел (два целых числа, через пробел)')

        @bot.message_handler(content_types=['text'])
        def get_lower(message):
            b = message.text
            c = b.split()
            b = int(c[1])
            a = int(c[0])
            b = random.randint(a, b)
            bot.send_message(call.message.chat.id, str(b))
    else:
        help()
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
otsuJS
@otsuJS
21
Чтобы изменить значение callback_data, нужно редактировать reply_markup (editMessageReplyMarkup). Там уже подставишь нужное значение callback_data.
Ответ написан
Ваш ответ на вопрос

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

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