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
Exemple #9
0
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
Exemple #10
0
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
Exemple #14
0
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
Exemple #15
0
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