Метод callbackQuery
Метод callbackQuery
в GramIO используется для обработки обновлений, которые возникают, когда пользователи взаимодействуют с кнопками инлайн-клавиатуры в вашем Telegram боте. Когда пользователь нажимает на кнопку с полезной нагрузкой (callback_data
), Telegram отправляет обновление callback_query
вашему боту. Этот метод позволяет зарегистрировать обработчик для таких обновлений, давая возможность выполнять действия на основе взаимодействия пользователя.
Основное использование
Обработка Callback Query
Чтобы использовать метод callbackQuery
, вам нужно определить триггер и обработчик. Триггер определяет, когда обработчик должен выполняться на основе полученных callback_data
, а обработчик выполняет нужное действие.
const someData = new CallbackData("example").number("id");
bot.callbackQuery(someData, (context) => {
return context.send(`Вы нажали кнопку с ID: ${context.queryData.id}`);
});
В этом примере:
someData
- это экземплярCallbackData
, определяющий схему для callback data.- Метод
callbackQuery
регистрирует обработчик, который вызывается, когда callback data соответствуютsomeData
. - Внутри обработчика
context.queryData
предоставляет типо-безопасный доступ к callback data.
Типы триггеров
Метод callbackQuery
поддерживает несколько типов триггеров:
- Строковый триггер: Обработчик вызывается, если
callback_data
точно соответствует указанной строке.
bot.callbackQuery("my_callback", (context) => {
return context.editText("Кнопка нажата!");
});
- RegExp триггер: Обработчик вызывается, если
callback_data
соответствует регулярному выражению.
bot.callbackQuery(/my_(.*)/, (context) => {
const match = context.queryData;
context.send(`Совпадающие данные: ${match[1]}`);
});
- Экземпляр CallbackData: Обработчик вызывается, если
callback_data
соответствуют схемеCallbackData
.
const someData = new CallbackData("example").number("id");
bot.callbackQuery(someData, (context) => {
context.send(`Data ID: ${context.queryData.id}`);
});
Обработка Callback Data
Когда получен callback_query
, объект context
включает следующие релевантные свойства:
context.data
: Сырая полезная нагрузкаcallback_data
.context.queryData
: Десериализованные данные, если для триггера использовался экземплярCallbackData
.
Пример сценария
Рассмотрим сценарий, где вы хотите отправить сообщение с инлайн-клавиатурой и обработать нажатия на кнопки:
const buttonData = new CallbackData("action").number("action_id");
bot.command("start", (context) =>
context.send("Выберите действие:", {
reply_markup: new InlineKeyboard().text(
"Выполнить действие 1",
buttonData.pack({ action_id: 1 })
),
})
).callbackQuery(buttonData, (context) => {
context.send(`Вы выбрали действие с ID: ${context.queryData.action_id}`);
});
В этом примере:
- Команда
/start
отправляет сообщение с кнопкой инлайн-клавиатуры. callback_data
кнопки упаковываются с помощьюbuttonData.pack()
.- Метод
callbackQuery
слушаетcallback_query
, которые соответствуютbuttonData
. - Обработчик отвечает ID выбранного действия.