При выборе языка в телеграмм боте выдает ошибку
import telebot
from forex_python.converter import CurrencyRates
from fuzzywuzzy import fuzz
# Initialize the Telegram Bot
bot = telebot.TeleBot('TOKEN')
# Initialize the CurrencyRates object
c = CurrencyRates()
# Supported currencies
currencies = {
'usd': ('$','dollars'),
'eur': ('€','euros'),
'rub': ('₽','rubles'),
'uah': ('₴','hryvnias'),
'pln': ('zł','zlotys')
}
# Response messages
response_messages = {
'en': {
'start_message': 'Welcome to the Currency Converter Bot! Please select your preferred language:',
'language_selected': 'Language selected: English',
'conversion_success': 'Conversion from {} to {}:\n\n{} {} is approximately equal to {} {}',
'invalid_currency': 'I\'m sorry, I couldn\'t recognize the currency. Please try again.'
},
'ru': {
'start_message': 'Добро пожаловать в бот конвертер валют! Пожалуйста, выберите предпочитаемый язык:',
'language_selected': 'Выбран язык: Русский',
'conversion_success': 'Конвертация из {} в {}:\n\n{} {} примерно равно {} {}',
'invalid_currency': 'Извините, я не смог распознать валюту. Пожалуйста, попробуйте еще раз.'
},
'uk': {
'start_message': 'Ласкаво просимо до бота конвертера валют! Будь ласка, виберіть бажану мову:',
'language_selected': 'Вибрана мова: Українська',
'conversion_success': 'Конвертація з {} в {}:\n\n{} {} приблизно дорівнює {} {}',
'invalid_currency': 'Вибачте, я не зміг розпізнати валюту. Будь ласка, спробуйте ще раз.'
}
}
# Handler for /start command
@bot.message_handler(commands=['start'])
def handle_start(message):
keyboard = telebot.types.ReplyKeyboardMarkup(row_width=2, one_time_keyboard=True)
keyboard.add('English', 'Русский', 'Українська')
bot.reply_to(message, response_messages['en']['start_message'], reply_markup=keyboard)
# Handler for language selection
@bot.message_handler(func=lambda message: message.text in ['English', 'Русский', 'Українська'])
def handle_language_selection(message):
language = message.text.lower()
response = response_messages[language]['language_selected']
bot.reply_to(message, response)
bot.send_message(message.chat.id, "Please enter your currency conversion request.")
# Handler for currency conversion request
@bot.message_handler(func=lambda message: True)
def handle_conversion_request(message):
text = message.text.lower()
language = 'en' # Default language is English
if message.from_user.language_code in ['ru', 'uk']:
language = message.from_user.language_code
elif message.from_user.language_code == 'ru':
language = 'ru'
elif message.from_user.language_code == 'uk':
language = 'uk'
source_currency = None
target_currency = None
# Check for currency codes or names in the user's message
for code, (symbol, name) in currencies.items():
if fuzz.partial_ratio(text, code) >= 80 or fuzz.partial_ratio(text, name) >= 80 or symbol in text:
if source_currency is None:
source_currency = code
else:
target_currency = code
break
if source_currency is not None and target_currency is not None:
converted_amount = c.convert(source_currency, target_currency, 1)
if converted_amount is not None:
response = response_messages['en']['conversion_success'].format(
source_currency.upper(),
target_currency.upper(),
source_currency.upper(),
1,
target_currency.upper(),
round(converted_amount, 2)
)
bot.reply_to(message, response)
else:
bot.reply_to(message, response_messages['en']['invalid_currency'])
else:
bot.reply_to(message, response_messages['en']['invalid_currency'])
# Start the bot
bot.polling()
При выборе любого языка выдает ошибку:
Traceback (most recent call last):
File "c:\bot.py", line 99, in <module>
bot.polling()
File "C:\Users\artem\AppData\Local\Programs\Python\Python311\Lib\site-packages\telebot\__init__.py", line 1043, in polling
self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "C:\Users\artem\AppData\Local\Programs\Python\Python311\Lib\site-packages\telebot\__init__.py", line 1118, in __threaded_polling
raise e
File "C:\Users\artem\AppData\Local\Programs\Python\Python311\Lib\site-packages\telebot\__init__.py", line 1074, in __threaded_polling
self.worker_pool.raise_exceptions()
File "C:\Users\artem\AppData\Local\Programs\Python\Python311\Lib\site-packages\telebot\util.py", line 148, in raise_exceptions
raise self.exception_info
File "C:\Users\artem\AppData\Local\Programs\Python\Python311\Lib\site-packages\telebot\util.py", line 91, in run
task(*args, **kwargs)
File "C:\Users\artem\AppData\Local\Programs\Python\Python311\Lib\site-packages\telebot\__init__.py", line 6428, in _run_middlewares_and_handler
result = handler['function'](message)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\bot.py", line 53, in handle_language_selection
response = response_messages[language]['language_selected']
~~~~~~~~~~~~~~~~~^^^^^^^^^^
KeyError: 'english'