def on_callback_data_0(bot, callback_query): bot.answer_callback_query(callback_query_id=callback_query.id) #replace btn_0 with new_btn keyboard = InlineKeyboard( callback_query.message.reply_markup.inline_keyboard) new_btn = InlineKeyboardButton(text="new data", callback_data="new data") if keyboard.replace(callback_query.data, new_btn): print("replaced") bot.send_message(chat_id=callback_query.from_user.id, text="your select is matched by {}".format( callback_query.data), reply_markup=keyboard.markup()) return bot.stop_call
def on_show_items(bot, message): btn_0 = InlineKeyboardButton(text="some data", callback_data="some data") btn_1 = InlineKeyboardButton(text="my btn 1", callback_data=build_callback_data( "my-btn", "one", 1, True, {"a": 1})) btn_2 = InlineKeyboardButton(text="my btn 2", callback_data=build_callback_data( "my-btn", "two", 2, False, {"b": 2})) keyboard = InlineKeyboard([[btn_0], [btn_1, btn_2]]) bot.send_message(chat_id=message.chat.id, text="select one", reply_markup=keyboard.markup()) return bot.stop_call
def on_query(bot, inline_query: InlineQuery): keyboard = InlineKeyboard([[ InlineKeyboardButton(text="show this article", callback_data="show"), ]]) results = (InlineQueryResultArticle( id="article", title=inline_query.query or "article title", input_message_content=InputTextMessageContent( message_text="article content"), thumb_url= "https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Telegram_logo.svg/1200px-Telegram_logo.svg.png", reply_markup=keyboard.markup()), ) bot.answer_inline_query(inline_query_id=inline_query.id, results=results) return bot.stop_call
def on_submit(bot, callback_query): keyboard = InlineKeyboard( callback_query.message.reply_markup.inline_keyboard) buttons = keyboard.group("switch") for button in buttons: callback_data_name, (value, selected) = parse_callback_data( button.callback_data) message_text = "callback_data_name={0} value={1} selected={2}".format( callback_data_name, value, selected) bot.send_message( chat_id=callback_query.from_user.id, text=message_text, ) return bot.stop_call
def on_change(bot, callback_query, value, selected): keyboard = InlineKeyboard( callback_query.message.reply_markup.inline_keyboard) new_button = InlineKeyboardButton( text="{0}status".format(emoji[1] if selected else emoji[0]), callback_data=build_callback_data("switch", value, not selected)) if keyboard.replace(build_callback_data("switch", value, selected), new_button): bot.edit_message_text(chat_id=callback_query.from_user.id, message_id=callback_query.message.message_id, text="switch status: {0}".format(not selected), reply_markup=keyboard.markup()) return bot.stop_call
def on_callback_data_name(bot, callback_query, *values): bot.answer_callback_query(callback_query_id=callback_query.id) keyboard = InlineKeyboard( callback_query.message.reply_markup.inline_keyboard) # find buttons buttons = keyboard.group("my-btn") print(buttons) # remove this button you click if keyboard.remove(callback_query.data): print("removed") bot.send_message(chat_id=callback_query.from_user.id, text="your select and remove: my-btn: {0}".format(values), reply_markup=keyboard.markup()) return bot.stop_call
def on_callback_data_1(bot, callback_query): bot.answer_callback_query(callback_query_id=callback_query.id) keyboard = InlineKeyboard( callback_query.message.reply_markup.inline_keyboard) # locate the button row_idx, col_idx = keyboard.where(callback_query.data) print(keyboard[row_idx][col_idx]) new_btn = InlineKeyboardButton(text="some data", callback_data="some data") # replace it keyboard[row_idx][col_idx] = new_btn bot.send_message(chat_id=callback_query.from_user.id, text="your select is matched by {}".format( callback_query.data), reply_markup=keyboard.markup()) return bot.stop_call
def on_select_item(bot, callback_query, item_id, selected): keyboard = InlineKeyboard( callback_query.message.reply_markup.inline_keyboard) new_button = InlineKeyboardButton( text="{0}{1}".format(emoji[1] if selected else emoji[0], menu[item_id][0]), callback_data=build_callback_data("select-item", item_id, not selected)) if keyboard.replace(build_callback_data("select-item", item_id, selected), new_button): bot.edit_message_text(chat_id=callback_query.from_user.id, message_id=callback_query.message.message_id, text=callback_query.message.text, reply_markup=keyboard.markup()) return bot.stop_call
def on_submit(bot, callback_query): keyboard = InlineKeyboard( callback_query.message.reply_markup.inline_keyboard) buttons = keyboard.group("select") # filter selected options message_text = "\n".join([ "text={0}, callback_data_name={1}, value={2}".format( text[len(emoji[0]):], callback_data[0], callback_data[1:]) for text, callback_data in tuple( (button.text, parse_callback_data(button.callback_data)) for button in buttons if button.text.startswith(emoji[0])) ]) bot.send_message( chat_id=callback_query.from_user.id, text=message_text or "nothing selected", ) return bot.stop_call
def on_select(bot, callback_query, value, selected): print(value, not selected) if selected: bot.answer_callback_query(callback_query_id=callback_query.id) else: keyboard = InlineKeyboard( callback_query.message.reply_markup.inline_keyboard) buttons = keyboard.group("select") for idx, button in enumerate(buttons, start=1): text, _ = select_options[idx] keyboard.replace( button.callback_data, InlineKeyboardButton(text="{0}{1}".format(emoji[1], text), callback_data=build_callback_data( "select", idx, False))) new_button = InlineKeyboardButton( text="{0}{1}".format(emoji[0], select_options[value][0]), callback_data=build_callback_data("select", value, True)) if keyboard.replace(build_callback_data("select", value, False), new_button): bot.edit_message_text(chat_id=callback_query.from_user.id, message_id=callback_query.message.message_id, text=callback_query.message.text, reply_markup=keyboard.markup()) return bot.stop_call
def on_submit(bot, callback_query): keyboard = InlineKeyboard( callback_query.message.reply_markup.inline_keyboard) selected_items = [] btn_group = keyboard.group("select-item") for button in btn_group: # selected button if button.text.startswith(emoji[0]) and button.callback_data: # title, price selected_items.append( (button.text[len(emoji[0]):], menu[parse_callback_data(button.callback_data)[1][0]][1])) if selected_items: bot.edit_message_reply_markup( chat_id=callback_query.from_user.id, message_id=callback_query.message.message_id, reply_markup=None, ) bot.send_invoice( chat_id=callback_query.from_user.id, title="order detail", description="\n".join([text for text, _ in selected_items]), payload="your-order-id", # https://core.telegram.org/bots/payments#getting-a-token provider_token="<PAYMENT-TOKEN>", start_parameter="random-str-mapping-to-order-id", currency="AUD", prices=tuple( LabeledPrice(label=text, amount=price) for text, price in selected_items), need_name=True, need_phone_number=True, need_shipping_address=True, is_flexible=True, ) return bot.stop_call
def on_show_keyboard(bot, message): keyboard = InlineKeyboard() keyboard.add_buttons( InlineKeyboardButton(text="{0}status".format(emoji[0]), callback_data=build_callback_data( "switch", 123, True))) keyboard.add_buttons( InlineKeyboardButton(text="submit", callback_data="submit")) bot.send_message(chat_id=message.chat.id, text="switch status: {0}".format(True), reply_markup=keyboard.markup()) return bot.stop_call
def on_show_menu(bot, message, *args): keyboard = InlineKeyboard() keyboard.add_buttons(*[ InlineKeyboardButton(text=text, callback_data=build_callback_data( "select-item", item_id, False)) for item_id, (text, _) in menu.items() ]) keyboard.add_buttons( InlineKeyboardButton(text="submit", callback_data="submit")) bot.send_message( chat_id=message.chat.id, text="your menu", reply_markup=keyboard.markup(), ) return bot.stop_call
def on_show_keyboard(bot, message): keyboard = InlineKeyboard() keyboard.add_buttons(*[ InlineKeyboardButton( text="{0}{1}".format(emoji[0] if selected else emoji[1], text), callback_data=build_callback_data("select", value, selected)) for value, (text, selected) in select_options.items() ]) keyboard.add_buttons( InlineKeyboardButton(text="submit", callback_data="submit")) bot.send_message( chat_id=message.chat.id, text="Your selections:", reply_markup=keyboard.markup(), ) return bot.stop_call
def on_submit(bot, callback_query): keyboard = InlineKeyboard( callback_query.message.reply_markup.inline_keyboard) for row in keyboard[:-1]: # no submit button button = row[0] callback_data_name, (value, selected) = parse_callback_data( button.callback_data) if selected: # filter selected options message_text = "text={0}, callback_data_name={1} value={2} status={3}".format( button.text[len(emoji[0]):], callback_data_name, value, selected) bot.send_message( chat_id=callback_query.from_user.id, text=message_text, ) break return bot.stop_call