Проблема с телеграм-ботом (Python, Telebot)
Идея бота: В небольшой группе в телеграм будет несколько пользователей из трех стран и бот. Пользователь пишет сообщение на любом из трёх языков - русский, английский, турецкий. В ответ получает клавиатуру с выбором трёх языков. Выбирает свой язык, после чего получает в ответ сообщение на своём языке + его же переведенное на остальные два языка. (кому интересно, как буду осуществлять перевод, могу поделиться, из кода методы убрал, но они работают отлично, с ними ник проблема не связана. Я долго подбирал переводчик с бесплатным API, но в итоге придумал своё решение. А также отказался от идеи анализа языка написанного сообщения, в пользу нажатия кнопочки, потому что не придумал идеальный алгоритм, который безошибочно определял бы язык сообщения, без использования нейросети. Встроенная в питоне библиотека работала некорректно.)
Итак, что работает на данный момент.
- При запуске бота он отправляет сообщение "бот запущен"
- Пользователь вводит сообщение
- В ответ на это приходит сообщение "выберите язык"
- Пользователь выбирает язык, выбранный язык пишется в чат
- В ответ на это бот снова присылает "выберите язык" и так до бесконечности может продолжаться
т.е. он не воспринимает отправленное ему сообщение и никак не обрабатывает его с последующей отправкой. Помогите, пожалуйста, чем это можно пофиксить? Что я не учёл? Бота пишу впервые
import telebot
# Ключи, токены и id
BOT_TOKEN = "Цензура:)"
chat_id = Цензура:)
# Устанавливаем токен бота
bot = telebot.TeleBot(BOT_TOKEN)
# Словарь для хранения выбранного языка для каждого чата
language_dict = {}
# Метод для перевода текста
def translate_russian(message):
translation = "Текст на русском, английском и турецком языках."
return translation
def translate_english(message):
translation = "Text in English, Russian, and Turkish languages."
return translation
def translate_turkish(message):
translation = "Türkçe, İngilizce ve Rusça dillerinde metin."
return translation
# Обработчик команды /start
@bot.message_handler(commands=['start'])
def start(message):
bot.reply_to(message, "Бот запущен. Пожалуйста, напишите сообщение.")
# Обработчик текстовых сообщений
@bot.message_handler(func=lambda message: True)
def text_message(message):
# Проверяем, был ли выбран язык для текущего чата
if message.chat.id in language_dict:
# Если язык выбран, переходим к отправке соответствующего метода
send_method(message)
else:
# Если язык не выбран, отправляем сообщение с просьбой выбрать язык
bot.reply_to(message, "Выберите язык.", reply_markup=generate_language_keyboard())
# Генерируем клавиатуру с кнопками выбора языка
def generate_language_keyboard():
keyboard = telebot.types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
keyboard.add("Русский", "Английский", "Турецкий")
return keyboard
# Обработчик выбора русского языка
@bot.message_handler(func=lambda message: message.text.lower() == 'русский')
def choose_russian(message):
language_dict[message.chat.id] = 'русский'
bot.reply_to(message, "Выбран язык: русский")
send_method(message)
# Обработчик выбора английского языка
@bot.message_handler(func=lambda message: message.text.lower() == 'английский')
def choose_english(message):
language_dict[message.chat.id] = 'английский'
bot.reply_to(message, "Выбран язык: английский")
send_method(message)
# Обработчик выбора турецкого языка
@bot.message_handler(func=lambda message: message.text.lower() == 'турецкий')
def choose_turkish(message):
language_dict[message.chat.id] = 'турецкий'
bot.reply_to(message, "Выбран язык: турецкий")
send_method(message)
# Метод для отправки соответствующего метода перевода
def send_method(message):
# Получаем выбранный язык для текущего чата
language = language_dict[message.chat.id]
# Получаем текст сообщения от пользователя
message_text = message.text
# Выбираем соответствующий метод перевода
if language == "русский":
translation = translate_russian(message_text)
elif language == "английский":
translation = translate_english(message_text)
elif language == "турецкий":
translation = translate_turkish(message_text)
# Отправляем перевод пользователю
bot.send_message(message.chat.id, f"Перевод:\n{translation}")
# Запускаем бота
if __name__ == "__main__":
bot.send_message(chat_id, "Бот запущен. Пожалуйста, напишите сообщение.")
bot.polling()