Как создавать клавиатуры в aiogram3?

Для создания клавиатур в библиотеке aiogram3 вам понадобятся два основных компонента: объекты класса ReplyKeyboardMarkup или InlineKeyboardMarkup для создания клавиатуры и объекты класса KeyboardButton или InlineKeyboardButton для создания кнопок в клавиатуре.

Начнем с создания объекта класса ReplyKeyboardMarkup для создания основной клавиатуры:

from aiogram.types import ReplyKeyboardMarkup, KeyboardButton

# Создание объекта ReplyKeyboardMarkup
keyboard = ReplyKeyboardMarkup(resize_keyboard=True)

# Создание кнопок для клавиатуры
button1 = KeyboardButton('Кнопка 1')
button2 = KeyboardButton('Кнопка 2')

# Добавление кнопок в клавиатуру
keyboard.add(button1, button2)

Параметр resize_keyboard=True позволяет менять размер клавиатуры в зависимости от количества кнопок.

Теперь создадим объект класса InlineKeyboardMarkup для создания встроенной клавиатуры:

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

# Создание объекта InlineKeyboardMarkup
inline_keyboard = InlineKeyboardMarkup()

# Создание кнопок для встроенной клавиатуры
inline_button1 = InlineKeyboardButton('Встроенная кнопка 1', callback_data='button1')
inline_button2 = InlineKeyboardButton('Встроенная кнопка 2', callback_data='button2')

# Добавление кнопок в встроенную клавиатуру
inline_keyboard.add(inline_button1, inline_button2)

Как видите, встроенная клавиатура немного отличается от основной клавиатуры. В кнопках встроенной клавиатуры вы можете передать callback_data, который будет использоваться для обработки нажатий кнопок.

Использование созданных клавиатур в aiogram3 выглядит следующим образом:

from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage

bot = Bot(token='YOUR_TOKEN')
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

@dp.message_handler(commands=['start'])
async def start_handler(message: types.Message):
    await message.answer('Привет, выбери действие:', reply_markup=keyboard)

@dp.callback_query_handler(lambda c: c.data == 'button1')
async def button1_handler(callback_query: types.CallbackQuery):
    await callback_query.answer('Нажата кнопка 1')

@dp.callback_query_handler(lambda c: c.data == 'button2')
async def button2_handler(callback_query: types.CallbackQuery):
    await callback_query.answer('Нажата кнопка 2')

if __name__ == '__main__':
    from aiogram import executor

    executor.start_polling(dp, skip_updates=True)

В приведенном примере функция start_handler отправляет пользователю сообщение с клавиатурой. Обработчики button1_handler и button2_handler реагируют на нажатия кнопок встроенной клавиатуры и отправляют ответы.

Теперь вы знаете, как создавать клавиатуры в aiogram3 и использовать их в боте на платформе Telegram. Удачи!