Bots are one of the features of Telegram that have made the messenger so popular. And its built-in keyboards give developers more freedom to interact with users.
Keyboa helps to create built-in keyboards of any complexity for bots developed based on pyTelegramBotAPI .
In this article, we will consider the basic capabilities of the module - creating keyboards from different data sets, automatic and manual distribution of buttons in rows, combining several keyboards into one. We will learn how to create complex, dynamic callbacks, storing in them information about the user's choice.
The article is intended for those who know the basics of the Telegram Bot API and are at least a little familiar with the pyTelegramBotAPI framework.
The module requires> Python 3.5 and is installed via pip:
pip install keyboa
Telegram inline_keyboard
, (Array of Array of InlineKeyboardButton). () - , ( ) - . , - .
, :
import os
from telebot import TeleBot
from keyboa import keyboa_maker
token = os.environ["TELEGRAM_BOT_TOKEN"]
uid = os.environ["TELEGRAM_USER_ID"]
bot = TeleBot(token=token)
, .
fruits = [
"banana", "coconut", "orange",
"peach", "apricot", "apple",
"pineapple", "avocado", "melon"
]
, :
kb_fruits = keyboa_maker(items=fruits, copy_text_to_callback=True)
, - items
. allback_data
( ) , , . callback_data
, copy_text_to_callback
.
:
bot.send_message(
chat_id=uid, reply_markup=kb_fruits,
text="Please select one of the fruit:")
.
items_in_row
, . . Telegram.
:
kb_fruits = keyboa_maker(items=fruits, copy_text_to_callback=True, items_in_row=3)
bot.send_message(
chat_id=uid, reply_markup=kb_fruits,
text="Please select one of the fruit:")
, , . , auto_alignment
. True
, Keyboa , , , [2, 3, 7]
.
reverse_alignment_range
, Keyboa , auto_alignment
.
Keyboa . . : - , - .
fruitscomplex = [
"banana",
["coconut", "orange"],
["peach", "apricot", "apple"],
"pineapple",
["avocado", "melon"],
]
kb_fruits_complex = keyboa_maker(items=fruits_complex, copy_text_to_callback=True)
bot.send_message(
chat_id=uid, reply_markup=kb_fruits_complex,
text="Please select one of the fruit:")
, .
callback
, callback_data - , Telegram . , .
callback_data , , . callback_data .
fruits_with_ids = [
{"banana": "101"}, {"coconut": "102"}, {"orange": "103"},
{"peach": "104"}, {"apricot": "105"}, {"apple": "106"},
{"pineapple": "107"}, {"avocado": "108"}, {"melon": "109"}, ]
# or [
# ("banana", "101"), ("coconut", "102"), ("orange", "103"),
# ("peach", "104"), ("apricot", "105"), ("apple", "106"),
# ("pineapple", "107"), ("avocado", "108"), ("melon", "109"), ]
, callback_data. . , callback_data, copy_text_to_callback
.
kb_fruits = keyboa_maker(items=fruits_with_ids, items_in_row=3)
bot.send_message(
chat_id=uid, reply_markup=kb_fruits,
text="Please select one of the fruit:")
, , , id , callback_data.
{"text": "banana", "callback_data": "101"}, ...
, id. , ? , ?
Keyboa . front_marker
callback_data , back_marker
, , . :
kb_fruits = keyboa_maker(items=fruits_with_ids, front_marker="&fruit_id=")
callback_data front_marker + value, : '&fruit_id=101'
, '&fruit_id=102'
. . , .
, :
# , , "&fruit_id=102"
selected_fruit_id = call.data
available_weight = [1, 2, 5, 10, 100, ]
kb_available_weight = keyboa_maker(
items=available_weight, copy_text_to_callback=True,
front_marker="&weight=", back_marker=selected_fruit_id)
callback_data :
'&weight=1&fruit_id=102'
, '&weight=2&fruit_id=102'
, '&weight=5&fruit_id=102'
âĻ
front_marker
back_marker
, , callback_data . , Telegram callback_data 64 , , - .
, , . . keyboa_combiner()
.
- keyboards
, . , :
from keyboa import keyboa_maker, keyboa_combiner
controls = [["âšī¸", "âĒī¸", "âī¸", "âŠī¸", "âļī¸"], ]
tracks = list(range(1, 13))
keyboard_controls = keyboa_maker(items=controls, copy_text_to_callback=True)
keyboard_tracks = keyboa_maker(items=tracks, items_in_row=4, copy_text_to_callback=True)
keyboard = keyboa_combiner(keyboards=(keyboard_tracks, keyboard_controls))
bot.send_message(
chat_id=uid, reply_markup=keyboard,
text="Please select the track number:")
- , . Telegram.
Telegram Keyboa. Github.
, .