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

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

t.me/PishemBota

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

В этот раз я продолжаю предыдущий пост про альтернативных ботов.

Как поменять текст, который меняется после нажатия на подсказку?

Берем код из предыдущего поста:

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

И находим строчку:

    input_message_content=types.InputTextMessageContent(
    message_text="Test"))

"Test" - можно заменить на другой текст, можно заменить на текст пользователя (q.query):

    input_message_content=types.InputTextMessageContent(
    message_text=q.query))

Однако, бот начнет чаще вылетать, ведь пользователь может не вписать никакой текст! Чтобы этого избежать - нужно ловить ошибки с помощью конструкции try > except > else:

@bot.inline_handler(func=lambda q: True)
def inlinehandler(q):
  answer = types.InlineQueryResultArticle(
    id='1', title="Название",
    description="Описание",
    input_message_content=types.InputTextMessageContent(
    message_text=q.query))
  try:
    bot.answer_inline_query(q.id, [answer])
  except:
    return
  else:
    bot.answer_inline_query(q.id, [answer])

Как добавить Inline-клавиатуру в этот текст?

На самом деле, всё так-же просто как и с обычным ботом.

Берём и вставляем в нужную функцию код из другого моего поста:

  keyboard = types.InlineKeyboardMarkup()
  keyboard.add(types.InlineKeyboardButton(text='<Текст>',
    callback_data = '<Обратный текст>'))

И добавляем к InlineQueryResult параметр "reply_markup=keyboard":

  answer = types.InlineQueryResultArticle(
    id='1', title="Название",
    description="Описание",
    input_message_content=types.InputTextMessageContent(
    message_text=q.query),
    reply_markup=keyboard)

Мой пример для использования Inline-бота

Я сделал за пару минут бота, который делает Inline-кнопку URL из текста:

Его код:

@bot.inline_handler(func=lambda q: True)
def inlinehandler(q):
  keyboard = types.InlineKeyboardMarkup()
  keyboard.add(types.InlineKeyboardButton(text='Перейти по ссылке',
    url = q.query))

  answer = types.InlineQueryResultArticle(
    id='1', title="Сделать ссылку",
    input_message_content=types.InputTextMessageContent(
    message_text='Перейти по ссылке: ' + q.query),
    reply_markup=keyboard)
  try:
    bot.answer_inline_query(q.id, [answer])
  except:
    return
  else:
    bot.answer_inline_query(q.id, [answer])


Четвертая часть выйдет завтра, там мы рассмотрим большее количество подсказок и обработчиков для них)

Report Page