🎛 Делаем бота удобным: Кнопки и Меню Никто не любит вводить команды вручную (/settings, /help).
Никто не любит вводить команды вручную (/settings, /help). Пользователи любят тыкать пальцем! В Telegram есть два вида кнопок:
1. Reply-кнопки: Находятся под полем ввода. Идеальны для главного меню.
2. Inline-кнопки: Прикреплены к конкретному сообщению. Идеальны для ссылок, лайков или навигации.
Давайте добавим оба вида в нашего бота!
🛠 Код:
from aiogram.types import KeyboardButton, InlineKeyboardButton
from aiogram.utils.keyboard import ReplyKeyboardBuilder, InlineKeyboardBuilder
# --- 1. Создаем Reply-клавиатуру (Главное меню) ---
def get_main_menu():
# Инициализируем билдер
builder = ReplyKeyboardBuilder()
# Добавляем кнопки
builder.add(KeyboardButton(text="🔥 Профиль"))
builder.add(KeyboardButton(text="⚙️ Настройки"))
builder.add(KeyboardButton(text="📈 Статистика"))
# Настраиваем сетку: 2 кнопки в первом ряду, 1 во втором
builder.adjust(2, 1)
# resize_keyboard=True делает кнопки компактными
return builder.as_markup(resize_keyboard=True)
# --- 2. Создаем Inline-клавиатуру (Ссылка) ---
def get_url_keyboard():
builder = InlineKeyboardBuilder()
builder.row(InlineKeyboardButton(
text="↗️ Подписаться на канал",
url="https://t.me/pythonofff"
))
return builder.as_markup()
# --- Используем в хэндлере ---
@dp.message(Command("start"))
async def cmd_start(message: types.Message):
await message.answer(
"Привет! Вот твое меню 👇",
reply_markup=get_main_menu()
)
await message.answer(
"А это инлайн-кнопка со ссылкой:",
reply_markup=get_url_keyboard()
)
💡 В чем сила Builders?
Метод .adjust(2, 1) позволяет одной строчкой настроить "сетку" кнопок. Раньше для этого приходилось писать сложные циклы списков!
Сохраняй, чтобы не гуглить синтаксис каждый раз! 💾
Подписывайтесь на канал 👉 @python_of