Форум сайта python.su
Столкнулся с проблемой. Пишу бота на библиотеке python telegram bot, в котором будут различные меню. Выход из них будет осуществляться нажатием по кнопке “Назад”. Мне нужно, чтобы каждый раз возврат происходил на предыдущее меню, а не на какое-то определенное. Но к кнопке ReplyKeyboardMarkup можно привязать только одно название, которое и будет передаваться боту. Как тогда можно обойти это ограничение.
Постараюсь пояснить на примере. Я в Телеграме вхожу в свой бот, в котором сразу есть основное меню с кнопками: “Запустить таймер” и “Настройки”. Перехожу в настройки с кнопками: “Изменить основной таймер”, “Изменить время перерыва” и “Назад”. Из него перехожу в меню для изменения основного таймера, в котором есть одна кнопка “Назад”.
Как видно, в двух разных меню есть две кнопки “Назад”, нажатие на которые провоцирует отправку в чат сообщения “Назад”. Но в коде на это сообщение можно назначить только одну функцию, например, “start”, которое вернет меню в самое первое меню. А я хочу сделать так, чтобы возврат из последнего меню с изменением времени таймера происходил в меню настроек, где нужно выбирать, что изменять.
Прошу прощения за много текста, хотелось объяснить все в деталях, чтобы была понятна проблема.
Офлайн
Прикрепляю код для наглядности. Он не дописан и там много всего лишнего, прошу ответить только на главный вопрос.
import logging from telegram.ext import Updater, CommandHandler from telegram import InlineQueryResultArticle, InputTextMessageContent, ReplyKeyboardMarkup from telegram.ext import MessageHandler, Filters, InlineQueryHandler updater = Updater(token=TOKEN, use_context=True) dispatcher = updater.dispatcher logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) def start(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text="Я бот, пожалуйста, поговори со мной!", reply_markup=start_menu) def getSetting(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text="Выберите, какой параметр изменить", reply_markup=settings) # ~ def getWorkTime(update, context): def echo(update, context): text = 'ECHO: ' + update.message.text context.bot.send_message(chat_id=update.effective_chat.id, text=text) def caps(update, context): if context.args: text_caps = ' '.join(context.args).upper() context.bot.send_message(chat_id=update.effective_chat.id, text=text_caps) else: context.bot.send_message(chat_id=update.effective_chat.id, text='В команде нет аргументов') context.bot.send_message(chat_id=update.effective_chat.id, text='Правильный синтаксис: /caps аргументы через пробел') def inline_caps(update, context): query = update.inline_query.query if not query: return results = list() results.append( InlineQueryResultArticle( id=query.upper(), title='Перевести слова в верхний регистр', input_message_content=InputTextMessageContent(query.upper()) ) ) context.bot.answer_inline_query(update.inline_query.id, results) def unknown(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text="Sorry, I didn't understand that command.") ##### НАСТРОЙКИ ТАЙМЕРА ##### pomodoro = 10 shortBreak = 5 longBreak = 15 cycle = 0 pause = False jumper = False ##### КНОПКИ ##### buttons_start_menu = [['Запустить таймер'], ['Настройки']] start_menu = ReplyKeyboardMarkup(keyboard=buttons_start_menu, resize_keyboard=True) buttons_settings = [['Время работы'], ['Короткий перерыв', 'Длинный перерыв'], ['Назад']] settings = ReplyKeyboardMarkup(keyboard=buttons_settings, resize_keyboard=True) ##### ОБРАБОТКА КОМАНД ##### start_handler = CommandHandler('start', start) dispatcher.add_handler(start_handler) back_handler = MessageHandler(Filters.text(['Назад']) & (~Filters.command), start) dispatcher.add_handler(back_handler) settings_handler = MessageHandler(Filters.text(['Настройки']) & (~Filters.command), getSetting) dispatcher.add_handler(settings_handler) echo_handler = MessageHandler(Filters.text & (~Filters.command), echo) dispatcher.add_handler(echo_handler) caps_handler = CommandHandler('caps', caps) dispatcher.add_handler(caps_handler) inline_caps_handler = InlineQueryHandler(inline_caps) dispatcher.add_handler(inline_caps_handler) unknown_handler = MessageHandler(Filters.command, unknown) dispatcher.add_handler(unknown_handler) ##### КОНЕЦ ##### updater.start_polling() updater.idle()
Отредактировано LUPER (Июль 1, 2022 05:09:13)
Офлайн