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()