maxapi/wiki/keyboard.md

125 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Клавиатуры и кнопки
Есть два способа построения клавиатур для сообщений: через **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)