From 85e4c086d448f78380ff41661835c51951634dc8 Mon Sep 17 00:00:00 2001 From: Denis Date: Sat, 19 Jul 2025 17:29:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BB=D0=B0=D0=B2=D0=B8=D0=B0=D1=82?= =?UTF-8?q?=D1=83=D1=80=D1=8B=20=D0=B8=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wiki/keyboard.md | 125 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 wiki/keyboard.md diff --git a/wiki/keyboard.md b/wiki/keyboard.md new file mode 100644 index 0000000..1130d41 --- /dev/null +++ b/wiki/keyboard.md @@ -0,0 +1,125 @@ +# Клавиатуры и кнопки + +Есть два способа построения клавиатур для сообщений: через **InlineKeyboardBuilder** и через **pydantic-модели** (ButtonsPayload) + +--- + +## Синтаксис создания клавиатуры + +### Через InlineKeyboardBuilder + +```python +from maxapi.utils.inline_keyboard import InlineKeyboardBuilder + + +@dp.message_created(Command('builder')) +async def builder_process(event: MessageCreated): + + builder = InlineKeyboardBuilder() + builder.row( + LinkButton(text="Сайт", url="https://example.com"), + CallbackButton(text="Нажми меня", payload="some_data"), + ) + # ... добавляйте новые ряды builder.row(...) + await event.message.answer( + text='Вот клавиатура', + attachments=[builder.as_markup()] + ) +``` + +### Через pydantic-модели + +```python +from maxapi.types import ButtonsPayload + + +@dp.message_created(Command('payload')) +async def builder_process(event: MessageCreated): + + buttons = [ + [LinkButton(text="Сайт", url="https://example.com")], + [CallbackButton(text="Callback", payload="some_data")] + ] + payload = ButtonsPayload(buttons=buttons).pack() + await event.message.answer( + text='Вот клавиатура', + attachments=[payload] + ) +``` + +--- + +## Типы кнопок + +Каждый тип кнопки подходит для разных сценариев. Вот основные из них: + +### LinkButton + +* **Назначение:** Переход по ссылке. +* **Пример:** + + ```python + LinkButton(text="Открыть сайт", url="https://example.com") + ``` + +### CallbackButton + +* **Назначение:** Для обработки нажатий через callback. +* **Пример:** + + ```python + CallbackButton(text="Нажми меня", payload="my_payload") + ``` + +### ChatButton + +* **Назначение:** Создание нового чата. +* **Пример:** + + ```python + ChatButton(text="Создать чат", chat_title="Название", chat_description="Описание") + ``` + +### RequestGeoLocationButton + +* **Назначение:** Запрос геолокации у пользователя (на момент публикации этой документации не работает со стороны API MAX). +* **Пример:** + + ```python + RequestGeoLocationButton(text="Геолокация") + ``` + +### MessageButton + +* **Назначение:** Быстрая отправка сообщения. +* **Пример:** + + ```python + MessageButton(text="Сообщение") + ``` + +### RequestContactButton + +* **Назначение:** Запросить контакт у пользователя. +* **Пример:** + + ```python + RequestContactButton(text="Контакт") + ``` + +### OpenAppButton + +* **Назначение:** Открыть встроенное приложение. +* **Пример:** + + ```python + OpenAppButton( + text="Приложение", + web_app="username бота", + contact_id="Идентификатор бота" + ) + ``` + +--- + +## Пример [тут](https://github.com/love-apples/maxapi/blob/main/examples/keyboard/main.py) \ No newline at end of file