как добавить кнопку "вернуться назад" у бота telebot, чтобы перекидывало в главное меню

Рейтинг: 1Ответов: 3Опубликовано: 17.02.2023
# add the button and greeting
@bot.message_handler(commands=["start"])
def start_message(message):
    menu1 = types.InlineKeyboardMarkup()
    button1 = types.InlineKeyboardButton(text="Приступить к подготовке", callback_data="preparation")
    button2 = types.InlineKeyboardButton(text="Отзывы", callback_data="reviews")
    button3 = types.InlineKeyboardButton(text="Техподдержка", callback_data="tech")
    button4 = types.InlineKeyboardButton(text="Бесплатные материалы", callback_data="free")
    menu1.add(button1, button2, button3, button4)
    bot.send_message(message.chat.id,
                     text="Добро пожаловать, {0.first_name}!, лялялялля".format(message.from_user), reply_markup=menu1)


# add inline buttons
@bot.callback_query_handler(func=lambda call: True)
def answer(call):
    if call.data == "preparation":
        markup_inline = types.InlineKeyboardMarkup()
        key1 = types.InlineKeyboardButton(text="ЮKassa", url="некая ссылка1", callback_data="pay1")
        key2 = types.InlineKeyboardButton(text="Какой то другой способ", url="некая ссылка2",
                                          callback_data="pay2")
        key3 = types.InlineKeyboardButton(text="Вернуться назад", callback_data="back_menu1")
        markup_inline.add(key1, key2, key3)
        bot.send_message(call.message.chat.id, text="Выбери удобный способ оплаты: ", reply_markup=markup_inline)
        if call.data == "back_menu1":
            aa = types.InlineKeyboardMarkup()
            button1 = types.InlineKeyboardButton(text="Приступить к подготовке", callback_data="preparation")
            button2 = types.InlineKeyboardButton(text="Отзывы", callback_data="reviews")
            button3 = types.InlineKeyboardButton(text="Техподдержка", callback_data="tech")
            button4 = types.InlineKeyboardButton(text="Бесплатные материалы", callback_data="free")
            aa.add(button1, button2, button3, button4)
            bot.send_message(call.message.chat.id,
                             text="Выбери, что тебя интересует", reply_markup=aa)

Ответы

▲ 0Принят

Это решение может Вам подойти. Немного подкоректирровал Ваш исходный код, чтобы оно возвращало в главное меню при нажатии на кнопку "Вернуться назад".

import telebot
from telebot import types


API_TOKEN = '{Ваш токен}'

bot = telebot.TeleBot(API_TOKEN)

# add the button and greeting
markup_inline = types.InlineKeyboardMarkup()
key1 = types.InlineKeyboardButton(text="ЮKassa", url="https://google.com", callback_data="pay1")
key2 = types.InlineKeyboardButton(text="Какой то другой способ", url="https://google.com", callback_data="pay2")
key3 = types.InlineKeyboardButton(text="Вернуться назад", callback_data="back_menu1")
markup_inline.add(key1, key2, key3)

# add inline buttons
menu1 = types.InlineKeyboardMarkup()
button1 = types.InlineKeyboardButton(text="Приступить к подготовке", callback_data="preparation")
button2 = types.InlineKeyboardButton(text="Отзывы", callback_data="reviews")
button3 = types.InlineKeyboardButton(text="Техподдержка", callback_data="tech")
button4 = types.InlineKeyboardButton(text="Бесплатные материалы", callback_data="free")
menu1.add(button1, button2, button3, button4)


@bot.message_handler(commands=["start"])
def start_message(message):
    bot.send_message(message.chat.id, text="Добро пожаловать, {0.first_name}!, лялялялля".format(message.from_user), reply_markup=menu1)


@bot.callback_query_handler(func=lambda call: True)
def answer(call):
    if call.data == "preparation":
        bot.send_message(call.message.chat.id, text="Выбери удобный способ оплаты: ", reply_markup=markup_inline)
    elif call.data == "back_menu1":
        bot.send_message(call.message.chat.id, text="Выбери, что тебя интересует", reply_markup=menu1)


if __name__ == '__main__':
    bot.polling(none_stop=True)
▲ 0
@bot.callback_query_handler(func=lambda call: call.data == 'back_to_main')
def back_to_main_callback(query):
    main_menu_keyboard = types.InlineKeyboardMarkup()
    button1 = types.InlineKeyboardButton(text="Приступить к подготовке", callback_data="preparation")
    button2 = types.InlineKeyboardButton(text="Отзывы", callback_data="reviews")
    button3 = types.InlineKeyboardButton(text="Техподдержка", callback_data="tech")
    button4 = types.InlineKeyboardButton(text="Бесплатные материалы", callback_data="free")
    main_menu_keyboard.add(button1, button2, button3, button4)
    bot.send_message(query.message.chat.id, "Выбери, что тебя интересует", reply_markup=main_menu_keyboard)
▲ 0

Делаете самую обычную функцию без декораторов и на вход она должна принимать message создаете переменную - markup=types. ...Markup, где будут находится кнопки, делаете кнопки какие нужно, добавляете кнопки - markup.add(button1, button2...) пишете в конце bot.send_message(..., reply_markup=markup).

А дальше уже когда нужно будет вернуться в главное меню просто вызываешь эту функцию и передаешь аргумент message.

Надеюсь понятно объяснил.