Задать вопрос
@prog_beginner

Telegram bot. Inline кнопки. Проблема с обработкой нажатия?

Бот должен конвертировать криптовалюту в доллары или евро. Для выбора между этими валютами создана команда /main при вводе которой добавляются кнопки "Доллар" или "Евро". Когда я нажимаю на кнопку "Доллар" и затем пишу, например, 1 bitcoin, то он работает. Но когда выбираю "Евро", то он все равно конвертирует в доллары. Заранее спасибо. Вот код:

@bot.message_handler(commands=["main"])
def maincur(message):
    markup = types.InlineKeyboardMarkup(row_width=2)
    item1 = types.InlineKeyboardButton("Доллар", callback_data="usd")
    item2 = types.InlineKeyboardButton("Евро", callback_data="eur")
    markup.add(item1, item2)
    bot.send_message(message.chat.id, "Выберите основную валюту для конвертирования", reply_markup=markup)
    
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    try:
        if call.message:
            if call.data == "usd":
                bot.send_message(call.message.chat.id, "Основная валюта - доллар")
            elif call.data == "eur":
                bot.send_message(call.message.chat.id, "Основная валюта - евро")
            bot.delete_message(chat_id=call.message.chat.id, message_id=call.message.message_id)
            bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
                                      text="Основная валюта перевыбрана")
    except Exception as ex:
        print(repr(ex))

    @bot.message_handler(content_types=["text"])
    def send_message(message):
        try:
            num = float(message.text.split(' ')[0])
            curr = message.text.split(' ')[1]
            req = requests.get(f"https://api.coingecko.com/api/v3/coins/{curr.lower()}")
            response = req.json()
            sell_price_usd = response["market_data"]["current_price"]["usd"]
            sell_price_eur = response["market_data"]["current_price"]["eur"]
            if call.data == "usd":
                bot.send_message(
                    message.chat.id,
                    dol_format(float(sell_price_usd) * num)
                )
            elif call.data == "eur":
                bot.send_message(
                    message.chat.id,
                    str('{:,}'.format(okr(float(sell_price_eur) * num)))
                )
        except ValueError as ve:
            print(ve)
            bot.send_message(
                message.chat.id,
                "Неправильный формат"
            )
        except Exception as ex:
            print(ex)
            bot.send_message(
                message.chat.id,
                "Такой криптовалюты нет"
            )
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
Lord_of_Rings
@Lord_of_Rings
Дунадан - северный странник. Злой, но очень добрый
Да, проблема
Ответ написан
nki
@nki
bezkart.ru готовая система лояльности
У вас в send_message откуда call.data взялось?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы