Учимся писать ботов: Пишем бота с альтернативным взаимодействием (InlineQuery, встраиваемый бот). Часть 1.
t.me/PishemBotaВсем привет! Сегодня я продолжаю серию постов про написание ботов для Telegram.
Сегодня я начинаю серию постов про альтернативных ботов.
Как они работают?
Inline, встраиваемые, боты с "альтернативным взаимодействием" - новый тип ботов, которые работают по вызову никнейма:

И после этого можно выбрать действие, начать поиск и т.д.:

Более подробно про это - в вступлении в API ботов и документации от Telegram.
Как активировать режим "Inline"?
Для работы такого функционала - сначала нужно активировать режим Inline в @BotFather. Прописываем команду /mybots, находим нужного бота и делаем всё по скриншотам:




Как сделать подсказку при призыве бота?
Чтобы сделать это - возьмите мой код:
@bot.inline_handler(func=lambda q: True)
def inlinehandler(q):
answer = types.InlineQueryResultArticle(
id='1', title="Название",
description="Описание",
input_message_content=types.InputTextMessageContent(
message_text="Test"))
bot.answer_inline_query(q.id, [answer])
Эта строчка - отвечает за хэндлер для сигнала при призыве бота, т.е. она указывает в какой функции есть ответ для сигнала:
@bot.inline_handler(func=lambda q: True)
Сама функция, название её может быть любым, но в скобках желательно тоже (q), чтобы мой код работал:
def inlinehandler(q):
Основная часть ответа на призыв, про неё можно посмотреть в документации.
answer = types.InlineQueryResultArticle(
Тут номер подсказки (если будете добавлять их больше - меняйте его) и название:
id='1', title="Название",
Описание:
description="Описание",
Действие после нажатия на подсказку в этих строчках. Конкретно тут будет меняться сообщение на "test", можно заменить на любое другое, или даже пропустить через re:
input_message_content=types.InputTextMessageContent(
message_text="Test"))
Последняя строчка - основная, выдает ответ на призыв:
bot.answer_inline_query(q.id, [answer])


Следующий пост завтра, в нем мы рассмотрим другие типы действий и подсказок)