@DeusExe

Как добавить кнопку «Назад» в telegram бота?

Не могу понять как реализовать кнопку "Назад", которая бы возвращала к предыдущему меню. Я пытался использовать стек для отслеживания предыдущих состояний, но это малоэффективно и работает не всегда. Есть ли способ реализации такой функции ? Чтоб допустим кнопка "Назад-2" возвращала меня к меню с кнопкой "Настройка каналов-источников", а кнопка Назад-1 к "Настройка бота".

@dp.message(Command('start'))
async def bot_settings(message: Message):
    keyboard = ReplyKeyboardMarkup(keyboard=[
        [KeyboardButton(text="Настройка бота")],
    ])
    await message.answer("Выберите действие:", reply_markup=keyboard)


@dp.message(lambda message: message.text == "Настройка бота")
async def bot_settings_menu(message: Message):
    keyboard = ReplyKeyboardMarkup(keyboard=[
        [KeyboardButton(text="Настройка каналов-источников")],
        [KeyboardButton(text="Назад-1")]
    ])
    await message.answer(text="Выберите действие:", reply_markup=keyboard)


@dp.message(lambda message: message.text == "Настройка каналов-источников")
async def configure_source_channels(message: Message):
    keyboard = ReplyKeyboardMarkup(keyboard=[
        [KeyboardButton(text="Добавить канал-источник", request_chat=KeyboardButtonRequestChat(
            request_id=1,
            user_is_bot=False,
            chat_is_channel=True,
            chat_is_forum=False
        ))],
        [KeyboardButton(text="Список каналов-источников")],
        [KeyboardButton(text="Назад-2")]
    ])
    await message.answer(text="Выберите действие:", reply_markup=keyboard)
  • Вопрос задан
  • 365 просмотров
Пригласить эксперта
Ответы на вопрос 1
MicroProger
@MicroProger
Работает - не трогай
Здравствуйте.
Я бы сделал массив, состоящий из трех элементов:
0: Меню, в котором находится пользователь сейчас
1: Меню, в котором находился пользователь шаг назад
2: Меню, в котором находился пользователь два шага назад

C каждым изменением меню, массив сдвигался вправо с изменением 0-го элемента. Например:
menus = [menu1, menu2, menu3]
print(menus)  # [menu1, menu2, menu3]
def menu_select(menu):
    menus[2] = menus[1]
    menus[1] = menus[0]
    menus[0] = menu
# смена меню на menu4
menu_select(menu4)
print(menus)  # [menu4, menu1, menu2]

А при нажатии кнопок, будут меняться кнопки на соответствующие меню
Надеюсь, этот код вам поможет
Ответ написан
Ваш ответ на вопрос

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

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