Уведомления

Группа в Telegram: @pythonsu

#1 Июль 1, 2022 05:01:29

LUPER
Зарегистрирован: 2022-06-29
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите! Как в боте Телеграм назначить на одну кнопку два действия?

Столкнулся с проблемой. Пишу бота на библиотеке python telegram bot, в котором будут различные меню. Выход из них будет осуществляться нажатием по кнопке “Назад”. Мне нужно, чтобы каждый раз возврат происходил на предыдущее меню, а не на какое-то определенное. Но к кнопке ReplyKeyboardMarkup можно привязать только одно название, которое и будет передаваться боту. Как тогда можно обойти это ограничение.

Постараюсь пояснить на примере. Я в Телеграме вхожу в свой бот, в котором сразу есть основное меню с кнопками: “Запустить таймер” и “Настройки”. Перехожу в настройки с кнопками: “Изменить основной таймер”, “Изменить время перерыва” и “Назад”. Из него перехожу в меню для изменения основного таймера, в котором есть одна кнопка “Назад”.

Как видно, в двух разных меню есть две кнопки “Назад”, нажатие на которые провоцирует отправку в чат сообщения “Назад”. Но в коде на это сообщение можно назначить только одну функцию, например, “start”, которое вернет меню в самое первое меню. А я хочу сделать так, чтобы возврат из последнего меню с изменением времени таймера происходил в меню настроек, где нужно выбирать, что изменять.

Прошу прощения за много текста, хотелось объяснить все в деталях, чтобы была понятна проблема.

Офлайн

#2 Июль 1, 2022 05:08:39

LUPER
Зарегистрирован: 2022-06-29
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите! Как в боте Телеграм назначить на одну кнопку два действия?

Прикрепляю код для наглядности. Он не дописан и там много всего лишнего, прошу ответить только на главный вопрос.

 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version