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

Код не работает. В чем проблема?

Код не работает и застревает на моменте выбора пары валют. В чем проблема?
Все работало нормально, пока я не добавил многоязычность
import telebot
from currency_converter import CurrencyConverter
from telebot import types

bot = telebot.TeleBot('token')
currency = CurrencyConverter()
amount = 0

@bot.message_handler(commands=['start'])
def welcome(message):
    lang_mark = types.InlineKeyboardMarkup(row_width=2)
    b1 = types.InlineKeyboardButton('English', callback_data='en')
    b2 = types.InlineKeyboardButton('Русский', callback_data='ru')
    lang_mark.add(b1, b2)
    bot.send_message(message.chat.id, 'Выберите язык', reply_markup=lang_mark)

@bot.callback_query_handler(func=lambda call: True)
def callback(call):
    if call.data == 'en':
        bot.send_message(call.message.chat.id, "Hi!\nI'm Currency Converter Bot\nSend me amount you want to convert")
        bot.register_next_step_handler(call.message, cash)
    elif call.data == 'ru':
        bot.send_message(call.message.chat.id, "Привет!\nЯ БОТ Конвертер валют\nОтправьте мне cумму, которую хотите просмотреть")
        bot.register_next_step_handler(call.message, cash)

def cash(message):
    global amount
    try:
        amount = int(message.text.strip())
    except ValueError:
        if message.from_user.language_code == 'ru':
            bot.send_message(message.chat.id, 'Ошибка! Пожалуйста, введите правильное число.')
        elif message.from_user.language_code == 'en':
            bot.send_message(message.chat.id, 'Error! Please, write a correct number.')
        bot.register_next_step_handler(message, cash)
        return

    if amount > 0:
        mark = types.InlineKeyboardMarkup(row_width=2)
        if message.from_user.language_code == 'ru':
            b1 = types.InlineKeyboardButton('USD/EUR', callback_data='usd/eur')
            b2 = types.InlineKeyboardButton('EUR/USD', callback_data='eur/usd')
            b3 = types.InlineKeyboardButton('USD/PLN', callback_data='usd/pln')
            b4 = types.InlineKeyboardButton('PLN/USD', callback_data='pln/usd')
            b5 = types.InlineKeyboardButton('EUR/PLN', callback_data='eur/pln')
            b6 = types.InlineKeyboardButton('PLN/EUR', callback_data='pln/eur')
            b7 = types.InlineKeyboardButton('Другое значение', callback_data='else')
            bot.send_message(message.chat.id, 'Пожалуйста, выберите', reply_markup=mark)
        elif message.from_user.language_code == 'en':
            b1 = types.InlineKeyboardButton('USD/EUR', callback_data='usd/eur')
            b2 = types.InlineKeyboardButton('EUR/USD', callback_data='eur/usd')
            b3 = types.InlineKeyboardButton('USD/PLN', callback_data='usd/pln')
            b4 = types.InlineKeyboardButton('PLN/USD', callback_data='pln/usd')
            b5 = types.InlineKeyboardButton('EUR/PLN', callback_data='eur/pln')
            b6 = types.InlineKeyboardButton('PLN/EUR', callback_data='pln/eur')
            b7 = types.InlineKeyboardButton('Another value', callback_data='else')
            bot.send_message(message.chat.id, 'Please, choose', reply_markup=mark)
        mark.add(b1, b2, b3, b4, b5, b6, b7)
    else:
        if message.from_user.language_code == 'ru':
            bot.send_message(message.chat.id, 'Ошибка! Пожалуйста, введите правильное число.')
        elif message.from_user.language_code == 'en':
            bot.send_message(message.chat.id, 'Error! Please, write a correct number.')
        bot.register_next_step_handler(message, cash)
@bot.callback_query_handler(func=lambda call: True)

def callback(call):
    if call.data != 'else':
        value = call.data.upper().split('/')
        result = currency.convert(amount, value[0], value[1])
        bot.send_message(call.message.chat.id, f'Result: {round(result, 4)}. You can repeat')
        bot.register_next_step_handler(call.message, cash)
    else:
        bot.send_message(call.message.chat.id, 'Write pair through "/"')
        bot.register_next_step_handler(call.message, mycurrency)
def mycurrency(message):
    try:
        value = message.text.upper().split('/')
        result = currency.convert(amount, value[0], value[1])
        if message.from_user.language_code == 'ru':
            bot.send_message(message.chat.id, f'Результат: {round(result, 3)}. Вы можете повторить')
        elif message.from_user.language_code == 'en':
            bot.send_message(message.chat.id, f'Result: {round(result, 3)}. You can repeat')
            bot.register_next_step_handler(message, cash)
    except Exception:
        bot.send_message(message.chat.id, f'Oops... try again')
        bot.register_next_step_handler(message, mycurrency)


bot.polling(none_stop=True)
  • Вопрос задан
  • 94 просмотра
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

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

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