Код не работает и застревает на моменте выбора пары валют. В чем проблема?
Все работало нормально, пока я не добавил многоязычность
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)