Inline Keyboard
Inline Keyboard прикрепляется к сообщению. Представляет собой встроенную клавиатуру, которая появляется рядом с сообщением, к которому она принадлежит.
Смотрите также API Reference и как отвечать на нажатия.
Импорт
С GramIO
import { InlineKeyboard } from "gramio";
Без GramIO
import { InlineKeyboard } from "@gramio/keyboards";
Кнопки (Документация)
Кнопки - это методы, которые собирают inline клавиатуру для вас.
text
Текстовая кнопка с данными, которые будут отправлены в callback query боту при нажатии кнопки, 1-64 байта.
new InlineKeyboard().text("какой-то текст", "payload");
// или
new InlineKeyboard().text("какой-то текст", {
json: "payload",
}); // использует JSON.stringify
url
HTTP или tg:// URL, который будет открыт при нажатии на кнопку. Ссылки tg://user?id=<user_id>
можно использовать для упоминания пользователя по их идентификатору без использования имени пользователя, если это разрешено их настройками конфиденциальности.
new InlineKeyboard().url("GitHub", "https://github.com/gramiojs/gramio");
webApp
Описание Веб-приложения, которое будет запущено, когда пользователь нажмет на кнопку. Веб-приложение сможет отправить произвольное сообщение от имени пользователя, используя метод answerWebAppQuery. Доступно только в приватных чатах между пользователем и ботом.
new InlineKeyboard().webApp("какой-то текст", "https://...");
copy
Тип кнопки, которая копирует указанный текст в буфер обмена.
new InlineKeyboard().copy(
"Скопируй меня",
"Добро пожаловать в буфер обмена Gboard, любой скопированный вами текст будет сохранен здесь. Нажмите на клип для вставки его в текстовое поле. Используйте значок редактирования, чтобы закрепить, добавить или удалить клипы. Нажмите и удерживайте клип, чтобы закрепить его. Незакрепленные клипы будут удалены через 1 час."
);
login
Эта кнопка inline-клавиатуры используется для автоматической авторизации пользователя. Служит отличной заменой Telegram Login Widget, когда пользователь приходит из Telegram. Все, что нужно пользователю, — это нажать на кнопку и подтвердить, что он хочет войти в систему:
Приложения Telegram поддерживают эти кнопки начиная с версии 5.7.
Пример бота: @discussbot
new InlineKeyboard().login("какой-то текст", "https://...");
// или
new InlineKeyboard().login("какой-то текст", {
url: "https://...",
request_write_access: true,
});
Подробнее о параметрах в документации
pay
Отправляет Кнопку оплаты.
new InlineKeyboard().pay("5 монет");
WARNING
Этот тип кнопки всегда должен быть первой кнопкой в первом ряду и может использоваться только в сообщениях со счетом.
switchToChat
Нажатие на кнопку предложит пользователю выбрать один из своих чатов, открыть этот чат и вставить имя пользователя бота и указанный inline-запрос в поле ввода.
По умолчанию пустой, в этом случае будет вставлено только имя пользователя бота.
new InlineKeyboard().switchToChat("Выберите чат");
// или
new InlineKeyboard().switchToChat("Выберите чат", "InlineQuery");
switchToChosenChat
Нажатие на кнопку предложит пользователю выбрать один из своих чатов указанного типа, открыть этот чат и вставить имя пользователя бота и указанный inline-запрос в поле ввода.
new InlineKeyboard().switchToChosenChat("Выберите чат");
// или
new InlineKeyboard().switchToChosenChat("Выберите чат", "InlineQuery");
// или
new InlineKeyboard().switchToChosenChat("Выберите чат", {
query: "InlineQuery",
allow_channel_chats: true,
allow_group_chats: true,
allow_bot_chats: true,
allow_user_chats: true,
});
Подробнее о параметрах в документации
switchToCurrentChat
Нажатие на кнопку вставит имя пользователя бота и указанный inline-запрос в поле ввода текущего чата. Может быть пустым, в этом случае будет вставлено только имя пользователя бота.
Это предлагает пользователю быстрый способ открыть вашего бота в режиме инлайн в том же чате - отлично подходит для выбора чего-либо из нескольких вариантов.
new InlineKeyboard().switchToChosenChat("Открыть инлайн режим");
// или
new InlineKeyboard().switchToChosenChat("Открыть инлайн режим", "InlineQuery");
game
Описание игры, которая будет запущена, когда пользователь нажмет на кнопку.
new InlineKeyboard().game("текст", {}); // ??? нет параметров...
WARNING
Этот тип кнопки всегда должен быть первой кнопкой в первом ряду.
Помощники
Методы, которые помогают вам создать клавиатуру.
row
Добавляет разрыв строки
. Вызовите этот метод, чтобы следующие добавленные кнопки были на новой строке.
new InlineKeyboard()
.text("первая строка", "payload")
.row()
.text("вторая строка", "payload");
columns
Позволяет ограничить количество столбцов в клавиатуре.
new InlineKeyboard()
.columns(1)
.text("первая строка", "payload")
.text("вторая строка", "payload")
.text("третья строка", "payload");
wrap
Кастомный обработчик, который управляет переносом строк.
new InlineKeyboard()
.wrap(({ button }) => button.callback_data === "2")
.text("первая строка", "1")
.text("первая строка", "1")
.text("вторая строка", "2");
обработчик имеет вид
(options: { button: T; index: number; row: T[]; rowIndex: number }) => boolean;
pattern
Массив с количеством столбцов в каждой строке. Позволяет установить «шаблон».
new InlineKeyboard()
.pattern([1, 3, 2])
.text("1", "payload")
.text("2", "payload")
.text("2", "payload")
.text("2", "payload")
.text("3", "payload")
.text("3", "payload");
filter
Обработчик, который помогает фильтровать кнопки клавиатуры.
new InlineKeyboard()
.filter(({ button }) => button.callback_data !== "hidden")
.text("кнопка", "pass")
.text("кнопка", "hidden")
.text("кнопка", "pass");
add
Позволяет добавить несколько кнопок в сыром формате.
const labels = ["какие-то", "кнопки"];
new InlineKeyboard()
.add({ text: "сырая кнопка", callback_data: "payload" })
.add(
InlineKeyboard.text("сырая кнопка через InlineKeyboard.text", "payload")
)
.add(...labels.map((x) => InlineKeyboard.text(x, `${x}payload`)));
addIf
Позволяет динамически подставлять кнопки в зависимости от чего-либо.
const labels = ["какие-то", "кнопки"];
const isAdmin = true;
new InlineKeyboard()
.addIf(1 === 2, { text: "сырая кнопка", callback_data: "payload" })
.addIf(
isAdmin,
InlineKeyboard.text("сырая кнопка через InlineKeyboard.text", "payload")
)
.addIf(
({ index, rowIndex }) => rowIndex === index,
...labels.map((x) => InlineKeyboard.text(x, `${x}payload`))
);
обработчик имеет вид
(options: { rowIndex: number; index: number }) => boolean;
matrix
Позволяет создать матрицу кнопок.
import { randomInt } from "node:crypto";
const bomb = [randomInt(0, 9), randomInt(0, 9)] as const;
new InlineKeyboard().matrix(10, 10, ({ rowIndex, index }) =>
InlineKeyboard.text(
rowIndex === bomb[0] && index === bomb[1] ? "💣" : "ㅤ",
"payload"
)
);
Результатом является клавиатура с бомбой на случайной кнопке.
обработчик имеет вид
(options: { index: number; rowIndex: number }) => T;
combine
Позволяет объединять клавиатуры. Объединяются только клавиатуры. Вам нужно вызвать метод .row()
для переноса строки после объединения.
new InlineKeyboard()
.combine(new InlineKeyboard().text("первая строка", "payload"))
.row()
.combine(
new InlineKeyboard()
.text("вторая строка", "payload")
.row()
.text("третья строка", "payload")
);