# Кнопки и клавиатуры

## `buttons.KeyboardBuilder`

Для создания клавиатуры необходимо инициализировать класс `buttons.KeyboardBuilder`.

Для добавления кнопок на клавиатуру можно использовать следующие функции, передав им `CallbackButton`, `LinkButton`, `GeolocationButton`, `ContactButton` или `ChatButton`:

### `KeyboardBuilder.row(*buttons: List[Button])`

Добавляет новый ряд кнопок с переданными кнопкой / кнопками.

### `KeyboardBuilder.add(*buttons: List[Button])`

Добавляет кнопку / кнопки на последний ряд клавиатуры.

### KeyboardBuilder.table(in\_row: int, \*buttons: List\[Button])

Добавляет кнопки так, чтобы в каждом ряду было `in_row` кнопок

### `KeyboardBuilder.to_list()`

Конвертирует клавиатуру в сериализуемый список, который можно использовать при отправке сообщения. Но функции для отправки сообщения вызывают это автоматически.

## Типы кнопок

### `CallbackButton(text: str, payload: str, intent: Literal['default', 'positive', 'negative'] = 'default')`

Кнопка, при нажатии которой боту придёт ивент `message_callback`, который можно поймать декоратором `on_button_callback`.

* `text: str` - текст кнопки
* `payload: str` - Payload, который передастся в `message_callback`
* `intent: Literal['default', 'positive', 'negative']` - намерение кнопки. Влияет на отображение клиентом

### `LinkButton(text: str, url: str)`

Кнопка-ссылка, при нажатии на которую у пользователя откроется веб-страница.

* `text: str` - текст кнопки
* `url: str` - ссылка, на которую ведет кнопка

### `GeolocationButton(text: str, quick: bool = False)`

Кнопка, при нажатию которой пользователь сможет отправить геолокацию.

* `text: str` - текст кнопки
* `quick: bool` - если `False`, то пользователь сможет просмотреть и выбрать геолокацию в открытом окне. Если `True`, то пользователю покажется только быстрое подтверждение о том, отправлять ли свою геолокацию. `False` по умолчанию

### `ContactButton(text: str)`

Кнопка, при нажатию которой пользователь сможет отправить свою контактную информацию.

* `text: str` - текст кнопки

### `ChatButton(text: str, title: str, description: str | None = None, payload: str | None = None, uuid: int | None = None)`

Кнопка, при нажатию которой пользователь сможет создать новый чат. Бот будет автоматически добавлен в новый чат.

* `text: str` - текст кнопки
* `title: str` - название нового чата
* `description: str | None` - описание нового чата. `None` по умолчанию
* `payload: str | None` - Payload, который будет передан функциям с декоратором `Bot.on_button_chat_create` при создании чата. `None` по умолчанию
* `uuid: int | None` - UUID, который будет создан автоматически при отправке сообщения. Каждый отдельный UUID создаёт отдельный чат, чтобы при нажатию на одну и ту же кнопку несколько раз открывался или создавался один и тот же чат. **Укажите UUID, стоявший на прошлой кнопке при редактировании сообщения - при отправке сообщения указывать UUID не надо.**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dpnspn.gitbook.io/aiomax/buttons.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
