Обработка многоуровневого меню ReplyKeyboardMarkup


Столкнулся с проблемой обработки второго и последующих уровней многоуровневого меню ReplyKeyboardMarkup.
Суть вопроса в том как сделать обработку второго и последующих уровней меню.
Пример того меню которое я пытаюсь сделать.

  • Исходный язык
    • Английский
    • Русский
    • Другой язык
    • Другой язык
    • Назад(переход к перовому уровню меню)
  • Язык перевода
    • Английский
    • Русский
    • Другой язык
    • Другой язык
    • Назад(переход к перовому уровню меню)

Первые уровень меню отлично обрабатывается, но вот с последующими возникает проблема, использовал bot.register_next_step_handler(), но вызывается данная функция единожды, и обработка сообщения с текстом не из кнопки простым else сработает единожды после чего вернется к @bot.message_handler(content_types=['text']), где функция будет ожидать текст из первого уровня меню.
При этом меню с выбором языка остаётся, и при выборе из меню @bot.message_handler(content_types=['text']) начинает обрабатывать исключение else, а хотелось бы чтобы бот прислал сообщение по типу "выберите язык перевода" и чтоб у каждого уровня это сообщение было уникальным. И если человек выберет пункт из меню то чтоб бот отлично отработал это действие и другие сообщения не помешали процессу выбора.

Сначала подумал сделать все обработки в одной функции (@bot.message_handler(content_types=['text'])), но потом понял что идея явно плохая. Ведь будет достаточно сообщения с текстом чтоб чтобы без всякого меню чтобы сменить выбранный язык , независимо скрыто меню или сейчас вообще отображается другой уровень меню.

Так же была идея вызывать в else функцию из bot.register_next_step_handler() но и эта идея тоже отпала на этапе обдумывания.

Сколько не пытался искать информации по этому вопросу, ничего толком найти мне не удалось.

Уже задавал тут вопрос но после одного ответа осознал, что максимально не корректно описал суть проблемы да и самого вопроса.

Вот код самого бота

import config
import telebot
import translate
from telebot import types

bot = telebot.TeleBot(config.TOKEN)

Source_Language = 'Русский'
Target_Language = 'Английский'
@bot.message_handler(command = 'start')
def menu(message):
    start_menu = types.ReplyKeyboardMarkup(True,True)
    start_menu.row('Исходный язык','Язык перевода')
    bot.send_message(message.chat.id,'Меню',start_menu)

@bot.message_handler(content_types=['text'])
def handle_text(message):
    if message.text == 'Исходный язык':
        source_language_menu = types.ReplyKeyboardMarkup(True, True)
        source_language_menu.row('Английский', 'Русский')
        source_language_menu.row('Другой', 'Другой 1')
        source_language_menu.row('Назад')
        bot.send_message(message.chat.id, 'Исходный язык - меню', reply_markup=source_language_menu)

    elif message.text == 'Язык перевода':
        translation_language_menu = types.ReplyKeyboardMarkup(True, True)
        translation_language_menu.row('Английский', 'Русский')
        translation_language_menu.row('Другой', 'Другой 1')
        translation_language_menu.row('Назад')
        bot.send_message(message.chat.id, 'Язык перевода - меню', reply_markup=translation_language_menu)

    elif message.text == 'Назад':
        menu(message)

    else:
        bot.send_message(message.chat.id,'Извините не понял')

if __name__ == '__main__':
    bot.infinity_polling()

Ответы (0 шт):