Динамическая inline клавиатура в telegram на Python
Как создать клавиатуру из списка? Список формируется из SQL запроса. Например:
list_of_animals = ['cat','dog','mouse']
Ниже привел пример статической клавиатуры.
kb = types.InlineKeyboardMarkup()
kb_dog = types.InlineKeyboardButton(text='Собаку', callback_data='dog')
kb_cat = types.InlineKeyboardButton(text='Кошку', callback_data='cat')
kb_mouse = types.InlineKeyboardButton(text='Мышь', callback_data='mouse')
kb.add(kb_dog, kb_cat, kb_mouse)
@dp.message_handler(commands=['start'])
async def start(message):
await bot.send_message(message.chat.id, 'Привет', reply_markup=kb)
@dp.callback_query_handler(lambda call: True)
async def callback_inline(call):
if call.data == 'dog':
await bot.send_message(call.message.chat.id, 'Собаку так собаку')
elif call.data == 'cat':
await bot.send_message(call.message.chat.id, 'Котиков все любят')
elif call.data == 'mouse':
await bot.send_message(call.message.chat.id, 'Серьёзно, мышь?')
Ответы (1 шт):
Автор решения: Данила Граф
→ Ссылка
Здравствуй! Сам давно задаюсь этим вопросом, что написать более качественный код. На данный момент времени могу тебе предложить пойти в лоб решения данной проблемы:
kb = types.InlineKeyboardMarkup()
for item in list_of_animals:
kb.add(types.InlineKeyboardButton(text=item, callback_data=item))
@dp.callback_query_handler(lambda call: True)
async def callback_inline(call):
if call.data == 'dog':
await bot.send_message(call.message.chat.id, 'Собаку так собаку')
elif call.data == 'cat':
await bot.send_message(call.message.chat.id, 'Котиков все любят')
elif call.data == 'mouse':
await bot.send_message(call.message.chat.id, 'Серьёзно, мышь?')`
Как только я найду более продуктивный способ реализации, обязательно отвечу! Успехов тебе. Надеюсь, я тебе помог