Не получается вывести итоговую стоимость в телеграм боте
Не получается вывсти итоговую стоимость в telegramm-боте. При выборе категории вписывается стоимость в юанях и идет конвертация в RUB через цб.
Помогите найти ошибку, не супер программист, учусь в тг ботах
import telegram
import requests
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, MessageHandler, Filters, CallbackContext, ConversationHandler
import logging
from telegram import ReplyKeyboardMarkup, Update
TOKEN = 'TOKEN'
def start(update, context):
keyboard = [
[InlineKeyboardButton("Обувь/Пуховики", callback_data='section1')],
[InlineKeyboardButton("Одежда", callback_data='section2')],
[InlineKeyboardButton("Кроссовки", callback_data='section3')]
]
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('Выберите раздел:', reply_markup=reply_markup)
def button(update, context):
query = update.callback_query
query.answer()
if query.data == 'section1':
query.edit_message_text(text="Вы выбрали раздел 'Обувь/Пуховики'")
context.user_data['category'] = "Обувь/Пуховики"
query.message.reply_text("Укажите цену товара в юанях:")
return 'get_price'
elif query.data == 'section2':
query.edit_message_text(text="Вы выбрали раздел 'Одежда'")
context.user_data['category'] = "Одежда"
query.message.reply_text("Укажите цену товара в юанях:")
return 'get_price'
elif query.data == 'section3':
query.edit_message_text(text="Вы выбрали раздел 'Кроссовки'")
context.user_data['category'] = "Кроссовки"
query.message.reply_text("Укажите цену товара в юанях:")
return 'get_price'
def get_price(update, context):
try:
context.user_data['price'] = float(update.message.text)
url = "https://www.cbr-xml-daily.ru/daily_json.js"
response = requests.get(url)
data = response.json()
yuan_rate = data["Valute"]["CNY"]["Value"]
total = context.user_data['price'] * yuan_rate + 1750
context.bot.send_message(chat_id=update.message.chat_id, text=f"Общая стоимость {context.user_data['category']}: {total:.2f} руб.")
print(f"Стоимость товара в юанях: {context.user_data['price']}")
print(f"Курс юаня к рублю: {yuan_rate}")
print(f"Общая стоимость {context.user_data['category']}: {total:.2f} руб.")
return ConversationHandler.END
except ValueError:
update.message.reply_text("Пожалуйста, введите число.")
def cancel(update, context):
update.message.reply_text('Операция отменена')
return ConversationHandler.END
def main():
updater = Updater(TOKEN, use_context=True)
dispatcher = updater.dispatcher
dispatcher.add_handler(CommandHandler('start', start))
dispatcher.add_handler(CallbackQueryHandler(button))
conv_handler = ConversationHandler(
entry_points=[MessageHandler(Filters.text & ~Filters.command, start)],
states={
'get_price': [MessageHandler(Filters.text & ~Filters.command, get_price)]
},
fallbacks=[CommandHandler('cancel', cancel)]
)
dispatcher.add_handler(conv_handler)
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()