Учимся писать ботов: Пишем бота с альтернативным взаимодействием (InlineQuery, встраиваемый бот). Часть 1.

Учимся писать ботов: Пишем бота с альтернативным взаимодействием (InlineQuery, встраиваемый бот). Часть 1.

t.me/PishemBota

Всем привет! Сегодня я продолжаю серию постов про написание ботов для Telegram.

Сегодня я начинаю серию постов про альтернативных ботов.

Как они работают?

Inline, встраиваемые, боты с "альтернативным взаимодействием" - новый тип ботов, которые работают по вызову никнейма:

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

Более подробно про это - в вступлении в API ботов и документации от Telegram.

Как активировать режим "Inline"?

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

Нажимаем на кнопку "Bot Settings"
Нажимаем на кнопку "Inline Mode"
Включаем режим Inline нажатием на кнопку "Turn on"
Готово!

Как сделать подсказку при призыве бота?

Чтобы сделать это - возьмите мой код:

@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])


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

Report Page