Inline клавиатура цифры от 1 до 20

Как сделать Inline клавиатура в Телеграмм боте в виде цифры к примеру от 1 до 20? После выбора цифры данные запишутся в базу (тут я знаю) и клавиатура удалилась.

key = telebot.types.InlineKeyboardMarkup(row_width=6)
b1 = telebot.types.InlineKeyboardButton('1', callback_data='b1')
b2 = telebot.types.InlineKeyboardButton('2', callback_data='b2')
b24 = telebot.types.InlineKeyboardButton('24', callback_data='b24')
key.add(b1, b2, b24)

@bot.callback_query_handler(func=lambda message: True)
def logic_inline(call):
    if call.data == 'b1':
        bot.send_message(call.from_user.id, '1')
    elif call.data == 'b2':
        bot.send_message(call.from_user.id, '2')
    elif call.data == 'b24':
        bot.send_message(call.from_user.id, '24')

Начало

@bot.message_handler(content_types=["text"])
def main_menu(message):
    if message.text == KEYBOARD['PEREF_OBSL']:
        msg = "Добавь описание:"
        sent = bot.send_message(message.chat.id, msg)
        bot.register_next_step_handler(sent, add_desc)

вожу описание и вызывается клавиатура

def add_desc(message):
    conn = sqlite3.connect(settings.DATABASE)
    cursor = conn.cursor()   
    try:
        sql = f"""UPDATE user_statistics SET desc = ? WHERE user_id = {message.from_user.id} AND request_id = (SELECT MAX(request_id) FROM user_statistics);"""
        query = message.text
        cursor.execute(sql, (query,))
        result = cursor.fetchall()
        msg =  'Выверите число'
        now = datetime.datetime.now()
        sent = bot.send_message(message.chat.id, msg, reply_markup=key )
        bot.register_next_step_handler(sent, add_point)
    except sqlite3.DatabaseError as error:
        msg = f'Ошибка: <b>{message.text}</b>.'
        bot.send_message(message.from_user.id, msg, reply_markup=keyboard, parse_mode='HTML')
    
    conn.commit()
    conn.close()

Функция в которую нужно добавить значение с Inline клавиатуры

def add_point(message):
    conn = sqlite3.connect(settings.DATABASE)
    cursor = conn.cursor()   
    try:
        sql = f"""UPDATE user_statistics SET point = ? WHERE user_id = {message.from_user.id} AND request_id = (SELECT MAX(request_id) FROM user_statistics);"""
        message.text = message.data
        query = message.text
        cursor.execute(sql, (query,))
        result = cursor.fetchall()
        msg =  'Дата'
        now = datetime.datetime.now()
        sent = bot.send_message(message.from_user.id, msg, parse_mode='HTML')
        bot.register_next_step_handler(sent, add_date)
    except sqlite3.DatabaseError as error:
        msg = f'Ошибка: <b>{message.text}</b>.'
        bot.send_message(message.from_user.id, msg, reply_markup=keyboard, parse_mode='HTML')
    
    conn.commit()
    conn.close()

Ответы (1 шт):

Автор решения: Denis Rudnitskiy

На самом деле - нет ничего сложного. Покажу пример для pytelegrambotapi. Для того чтобы создать inline-клавиатуру - сначала требуется инициализировать её, и затем уже добавить ей кнопки. Делается это примерно таким образом:

from telebot import types
import telebot

bot = telebot.TeleBot('token')


@bot.message_handler(commands=['start'])
def start_msg(message):
    keyboard = types.InlineKeyboardMarkup(row_width=1) # вывод кнопок в 1 колонку
    one = types.InlineKeyboardButton('1', callback_data='one')
    two = types.InlineKeyboardButton('2', callback_data='two')
    three = types.InlineKeyboardButton('3', callback_data='three')
    # и так далее либо же сделать через цикл for, но у каждой кнопки должен быть свой callback
    keyboard.add(one, two, three)
    bot.send_message(message.chat.id, 'Вывод inline-клавиатуры', reply_markup=keyboard)


#обработка callback клавиатуры
@bot.callback_query_handler(func=lambda message: True)
def logic_inline(call):
    if message.data == 'one':
          bot.send_message(call.message.chat.id, 'Ты нажал на кнопку 1')
    elif message.data == 'two':
          bot.send_message(call.message.chat.id, 'Ты нажал на кнопку 2')
    elif message.data == 'three':
          bot.send_message(call.message.chat.id, 'Ты нажал на кнопку 3')


bot.polling()
→ Ссылка