From f94ea9acbb7e5ec9f35ea40112530fbcd15488f8 Mon Sep 17 00:00:00 2001 From: Bibo-Joshi Date: Sat, 28 Mar 2020 12:07:23 +0100 Subject: [PATCH] Answer CQs and use edit_message_text in examples (#1721) --- examples/inlinekeyboard.py | 4 ++++ examples/inlinekeyboard2.py | 39 +++++++++++-------------------- examples/nestedconversationbot.py | 14 ++++++++++- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/examples/inlinekeyboard.py b/examples/inlinekeyboard.py index b734815c5..9748d4439 100644 --- a/examples/inlinekeyboard.py +++ b/examples/inlinekeyboard.py @@ -29,6 +29,10 @@ def start(update, context): def button(update, context): query = update.callback_query + # CallbackQueries need to be answered, even if no notification to the user is needed + # Some clients may have trouble otherwise. See https://core.telegram.org/bots/api#callbackquery + query.answer() + query.edit_message_text(text="Selected option: {}".format(query.data)) diff --git a/examples/inlinekeyboard2.py b/examples/inlinekeyboard2.py index b81eaa17d..2befc8a1a 100644 --- a/examples/inlinekeyboard2.py +++ b/examples/inlinekeyboard2.py @@ -55,8 +55,9 @@ def start_over(update, context): """Prompt same text & keyboard as `start` does but not as new message""" # Get CallbackQuery from Update query = update.callback_query - # Get Bot from CallbackContext - bot = context.bot + # CallbackQueries need to be answered, even if no notification to the user is needed + # Some clients may have trouble otherwise. See https://core.telegram.org/bots/api#callbackquery + query.answer() keyboard = [ [InlineKeyboardButton("1", callback_data=str(ONE)), InlineKeyboardButton("2", callback_data=str(TWO))] @@ -65,9 +66,7 @@ def start_over(update, context): # Instead of sending a new message, edit the message that # originated the CallbackQuery. This gives the feeling of an # interactive menu. - bot.edit_message_text( - chat_id=query.message.chat_id, - message_id=query.message.message_id, + query.edit_message_text( text="Start handler, Choose a route", reply_markup=reply_markup ) @@ -77,15 +76,13 @@ def start_over(update, context): def one(update, context): """Show new choice of buttons""" query = update.callback_query - bot = context.bot + query.answer() keyboard = [ [InlineKeyboardButton("3", callback_data=str(THREE)), InlineKeyboardButton("4", callback_data=str(FOUR))] ] reply_markup = InlineKeyboardMarkup(keyboard) - bot.edit_message_text( - chat_id=query.message.chat_id, - message_id=query.message.message_id, + query.edit_message_text( text="First CallbackQueryHandler, Choose a route", reply_markup=reply_markup ) @@ -95,15 +92,13 @@ def one(update, context): def two(update, context): """Show new choice of buttons""" query = update.callback_query - bot = context.bot + query.answer() keyboard = [ [InlineKeyboardButton("1", callback_data=str(ONE)), InlineKeyboardButton("3", callback_data=str(THREE))] ] reply_markup = InlineKeyboardMarkup(keyboard) - bot.edit_message_text( - chat_id=query.message.chat_id, - message_id=query.message.message_id, + query.edit_message_text( text="Second CallbackQueryHandler, Choose a route", reply_markup=reply_markup ) @@ -113,15 +108,13 @@ def two(update, context): def three(update, context): """Show new choice of buttons""" query = update.callback_query - bot = context.bot + query.answer() keyboard = [ [InlineKeyboardButton("Yes, let's do it again!", callback_data=str(ONE)), InlineKeyboardButton("Nah, I've had enough ...", callback_data=str(TWO))] ] reply_markup = InlineKeyboardMarkup(keyboard) - bot.edit_message_text( - chat_id=query.message.chat_id, - message_id=query.message.message_id, + query.edit_message_text( text="Third CallbackQueryHandler. Do want to start over?", reply_markup=reply_markup ) @@ -132,15 +125,13 @@ def three(update, context): def four(update, context): """Show new choice of buttons""" query = update.callback_query - bot = context.bot + query.answer() keyboard = [ [InlineKeyboardButton("2", callback_data=str(TWO)), InlineKeyboardButton("4", callback_data=str(FOUR))] ] reply_markup = InlineKeyboardMarkup(keyboard) - bot.edit_message_text( - chat_id=query.message.chat_id, - message_id=query.message.message_id, + query.edit_message_text( text="Fourth CallbackQueryHandler, Choose a route", reply_markup=reply_markup ) @@ -151,10 +142,8 @@ def end(update, context): """Returns `ConversationHandler.END`, which tells the ConversationHandler that the conversation is over""" query = update.callback_query - bot = context.bot - bot.edit_message_text( - chat_id=query.message.chat_id, - message_id=query.message.message_id, + query.answer() + query.edit_message_text( text="See you next time!" ) return ConversationHandler.END diff --git a/examples/nestedconversationbot.py b/examples/nestedconversationbot.py index 263841cc3..b1bbeaf7c 100644 --- a/examples/nestedconversationbot.py +++ b/examples/nestedconversationbot.py @@ -66,6 +66,7 @@ def start(update, context): # If we're starting over we don't need do send a new message if context.user_data.get(START_OVER): + update.callback_query.answer() update.callback_query.edit_message_text(text=text, reply_markup=keyboard) else: update.message.reply_text('Hi, I\'m FamiliyBot and here to help you gather information' @@ -83,6 +84,7 @@ def adding_self(update, context): button = InlineKeyboardButton(text='Add info', callback_data=str(MALE)) keyboard = InlineKeyboardMarkup.from_button(button) + update.callback_query.answer() update.callback_query.edit_message_text(text=text, reply_markup=keyboard) return DESCRIBING_SELF @@ -118,6 +120,7 @@ def show_data(update, context): ]] keyboard = InlineKeyboardMarkup(buttons) + update.callback_query.answer() update.callback_query.edit_message_text(text=text, reply_markup=keyboard) ud[START_OVER] = True @@ -133,6 +136,8 @@ def stop(update, context): def end(update, context): """End conversation from InlineKeyboardButton.""" + update.callback_query.answer() + text = 'See you around!' update.callback_query.edit_message_text(text=text) @@ -151,6 +156,8 @@ def select_level(update, context): InlineKeyboardButton(text='Back', callback_data=str(END)) ]] keyboard = InlineKeyboardMarkup(buttons) + + update.callback_query.answer() update.callback_query.edit_message_text(text=text, reply_markup=keyboard) return SELECTING_LEVEL @@ -172,8 +179,9 @@ def select_gender(update, context): InlineKeyboardButton(text='Show data', callback_data=str(SHOWING)), InlineKeyboardButton(text='Back', callback_data=str(END)) ]] - keyboard = InlineKeyboardMarkup(buttons) + + update.callback_query.answer() update.callback_query.edit_message_text(text=text, reply_markup=keyboard) return SELECTING_GENDER @@ -201,6 +209,8 @@ def select_feature(update, context): if not context.user_data.get(START_OVER): context.user_data[FEATURES] = {GENDER: update.callback_query.data} text = 'Please select a feature to update.' + + update.callback_query.answer() update.callback_query.edit_message_text(text=text, reply_markup=keyboard) # But after we do that, we need to send a new message else: @@ -215,6 +225,8 @@ def ask_for_input(update, context): """Prompt user to input data for selected feature.""" context.user_data[CURRENT_FEATURE] = update.callback_query.data text = 'Okay, tell me.' + + update.callback_query.answer() update.callback_query.edit_message_text(text=text) return TYPING