inlineQuery
Метод inlineQuery
в GramIO позволяет вашему боту отвечать на инлайн-запросы, отправленные пользователями. Инлайн-запрос - это особый тип сообщения, когда пользователи могут искать контент от вашего бота, введя запрос в поле ввода сообщения, не взаимодействуя напрямую с ботом.
WARNING
Вам необходимо включить эту опцию через @BotFather. Отправьте команду /setinline
, выберите бота и укажите текст-заполнитель, который пользователь увидит в поле ввода после ввода имени вашего бота.
Основное использование
Ответ на инлайн-запрос с использованием регулярного выражения
Вы можете настроить бота на прослушивание определенных инлайн-запросов, соответствующих регулярному выражению, и ответить результатами. Вот пример:
bot.inlineQuery(/search (.*)/i, async (context) => {
if (context.args) {
await context.answer([
InlineQueryResult.article(
"id-1",
`Результат для ${context.args.at(1)}`,
InputMessageContent.text(
`Это результат сообщения для запроса ${context.args.at(1)}`
)
),
]);
}
});
В этом примере:
- Бот прослушивает инлайн-запросы, соответствующие шаблону
search (.*)
. - Если соответствие найдено, бот извлекает поисковый запрос и возвращает список результатов инлайн-запроса.
Параметры
trigger
: Условие, которому должен соответствовать инлайн-запрос. Это может быть регулярное выражение, строка или пользовательская функция.- Регулярное выражение: Соответствует запросам, которые соответствуют определенному шаблону.
- Строка: Соответствует точной строке запроса.
- Функция: Оценивает запрос на основе пользовательской логики. Должна возвращать true для соответствия.
handler
: Функция, которая обрабатывает инлайн-запрос. Она получает объектcontext
, который включает детали о запросе и предоставляет методы для ответа.options
: Дополнительные опции для обработки выбора результата.onResult
: Функция, которая вызывается, когда пользователь выбирает результат инлайн-запроса. Она может использоваться для изменения или обновления сообщения после выбора. Использует ChosenInlineResult под капотом.
IMPORTANT
Вы можете изменять только сообщения, которые содержат InlineKeyboard. Подробнее о ChosenInlineResult.
Как работает inlineQuery
Сопоставление запроса: Когда пользователь вводит инлайн-запрос, метод
inlineQuery
проверяет, соответствует ли запрос предоставленномуtrigger
. Это может быть прямое соответствие (строка), соответствие шаблону (регулярное выражение) или проверка условия (функция).Обработка запроса: Если запрос соответствует, вызывается функция
handler
. Внутри этой функции вы можете получить доступ к параметрам запроса, сгенерировать результаты и отправить их обратно пользователю, используяcontext.answer()
.Реагирование на выбор результата: Если предоставлена опция
onResult
, бот прослушивает, когда пользователь выбирает один из результатов инлайн-запроса. Затем предоставленная функция может, например, изменить текст сообщения.
Пример: Пользовательский обработчик инлайн-запросов
Вот более подробный пример, демонстрирующий использование как триггера инлайн-запроса, так и обработки выбора результата:
bot.inlineQuery(
/search (.*)/i,
async (context) => {
if (context.args) {
await context.answer(
[
InlineQueryResult.article(
"result-1",
`Результат для ${context.args[1]}`,
InputMessageContent.text(
`Вы искали: ${context.args[1]}`
),
{
reply_markup: new InlineKeyboard().text(
"Получить подробности",
"details-callback"
),
}
),
],
{
cache_time: 0,
}
);
}
},
{
onResult: (context) => context.editText("Вы выбрали результат!"),
}
);
В этом примере:
- Бот прослушивает инлайн-запросы, которые начинаются с
search
, за которыми следует поисковый термин. - Бот отвечает результатом инлайн-запроса, который включает кнопку с надписью "Получить подробности."
- Когда пользователь выбирает этот результат, бот редактирует сообщение, чтобы указать, что был сделан выбор.