Не работает телеграм бот на питоне
Тогда он будет работать круглые сутки, а вы — отдыхать.
Вот что мы сделаем, чтобы бот работал независимо от всего:
- Выберем сервер.
- Подготовим программу для работы на нём.
- Зальём программу на сервер.
- Настроим сервер, чтобы он исполнял программу.
Выбираем сервер
Тот хостинг, который мы выбрали для проектов, уже умеет запускать Python-файлы. Если вы пользуетесь другим сервисом, то проверьте, умеет ли он то же самое.
Готовим программу и отправляем её на сервер
Единственное, что нужно добавить в наш код телеграм-бота, — специальную команду интерпретатору, чтобы он знал, как работать с нашим файлом. Но перед этим нужно проверить, какая версия Python на нём установлена.
Чтобы это узнать, соединимся с сервером по протоколу SSH и спросим у него напрямую. Для этого используем программу Putty , а настройки подключения возьмём в личном кабинете хостинга:
Этих данных достаточно, чтобы управлять сервером по SSH. Этих данных достаточно, чтобы управлять сервером по SSH.Вставляем их в Putty и подключаемся. Помните, что для безопасности во время ввода пароля курсор стоит на месте, чтобы никто не смог выяснить, сколько символов вы набираете. Когда подключились, вводим команду python3.3 -V — она покажет, есть ли на сервере поддержка этой версии Python:
Сервер говорит, что у него установлена версия Python 3.3.5 — нам этого хватит. Сервер говорит, что у него установлена версия Python 3.3.5 — нам этого хватит.Теперь добавляем в самое начало нашего файла с программой такую строчку:
В статье о том, как опубликовать сайт в интернете, мы рассказывали, как залить файлы на сервер. Это умение нам сейчас пригодится: сохраняем нашу программу с гороскопом как файл с расширением .py и отправляем его на сервер в папку cgi-bin (то, что лежит в этой папке, никто не увидит):
Настраиваем сервер
Теперь научим сервер понимать, как работать с нашей программой. Для этого в корне сайта находим файл .htaccess и добавляем в него такую строчку:
AddHandler cgi-script .py
Если у вас такого файла нет — создайте его и не забудьте про точку в самом начале названия.
Последнее, что осталось сделать, — настроить права доступа у файла с программой. Находим её среди файлов хостинга и выставляем права 755 или rwxrwxr-x:
Теперь с помощью Putty снова подключаемся к серверу и настраиваем рабочее окружение. Это как будто виртуальная песочница, где мы сможем ставить нужные модули для Python, чтобы не мешать остальным пользователям сервера.
Всё, что мы будем делать дальше, относится к хостингу SpaceWeb. Если у вас другой хостинг, то, возможно, часть команд вам не пригодится и Python будет работать напрямую. У нас так не работает, поэтому делаем виртуальное окружение.
В SSH-терминале пишем по очереди такие команды (вместо .thecode можно написать название каталога, которое вам по душе):
virtualenv .thecode
source .thecode/bin/activate
Эти две команды создадут виртуальное пространство для запуска Python-файлов.
Теперь установим Python-модуль для работы с Телеграмом:
pip install pytelegrambotapi
Когда установка закончится, пишем такую команду:
nohup python3 /home/t/thecode/osebe/public_html/cgi-bin/telegoroskop.py
/home/t/thecode/osebe/ — это наш путь к папке cgi-bin, а у вас он будет другим. Поменяйте путь на свой и запускайте.
Чтобы программа продолжала работать после того, как мы закроем SSH-клиент, в самом начале пишем команду nohup .
Результат проекта — бот @TheCode_Baboolya_bot.
Что дальше
Мы сделали самые базовые вещи — запустили скрипт на сервере и сделали так, чтобы он работал там постоянно. Но вот как можно это улучшить:
В первой части мы сделали гороскоп на Python, который выдаёт нам прогноз на день по знаку зодиака. Сегодня пойдём дальше: теперь этот же генератор гороскопов будет встроен в Телеграм в виде бота.
Да. То, что обычно на курсах продают за 50 тысяч рублей, мы вам сейчас расскажем за 15 минут бесплатно.
Как всё будет работать
В этом проекте три звена: наш компьютер с Python, сервер Телеграма и Телеграм-клиент.
На компьютере работает интерпретатор Python, а внутри интерпретатора крутится наша программа на Python. Она отвечает за весь контент: в неё заложены все шаблоны текста, вся логика, всё поведение.
Внутри программы на Python работает библиотека, которая отвечает за общение с сервером Телеграма. В библиотеку мы вшили секретный ключ, чтобы сервер Телеграма понимал, что наша программа связана с определённым ботом.
Когда клиент с Телеграмом запрашивает у бота гороскоп, запрос приходит на сервер, а сервер отправляет его на наш компьютер. Запрос обрабатывается программой на Python, ответ идёт на сервер Телеграма, сервер отдаёт ответ клиенту. Изи:
Обратите внимание, что работать наш бот будет только тогда, когда включён компьютер и на нём запущена программа на Python. Если компьютер выключится, пропадёт интернет или вы отключите интерпретатор, то бот работать перестанет: запросы будут приходить, но никто на них не ответит. В одной из следующих частей мы сделаем так, чтобы это всё работало на удалённом сервере и было всегда доступно.
Что будем делать
Если записать пошагово наш план, то он будет выглядеть так:
Теперь по очереди разберём каждый пункт.
В Телеграме находим канал @BotFather — он отвечает за регистрацию новых ботов:
Первый в списке со специальным значком подтверждения — это он.
Нажимаем Start и пишем команду /newbot. Нас по очереди спросят про название бота и его никнейм (мы придумали только с третьей попытки, потому что остальные были заняты):
С третьей попытки нам дали нового бота и токен для управления. Токен нужен для управления ботом, поэтому на экране его нет.
2. Установка библиотеки
Есть два основных способа работать с телеграмом в Python: через библиотеку telebot и с помощью Webhook. Мы будем использовать библиотеку — так проще и быстрее.
Чтобы её установить, запускаем командную строку от имени администратора (если у вас Windows) и пишем команду pip install pytelegrambotapi
Чтобы программа на Python умела управлять Телеграм-ботами, нужно в самое начало кода добавить строки:
Единственное, о чём нужно не забыть — заменить слово «токен» на настоящий токен, который дал нам @BotFather. Открываем программу гороскопа и добавляем.
Теперь научим бота реагировать на слово «Привет». Для этого добавим после строчек с импортом новый метод и сразу пропишем в нём реакцию на нужное слово. Если не знаете, что такое метод и зачем он нужен, — читайте статью про ООП.
И последнее, что нам осталось сделать до запуска, — добавить после метода такую строчку:
Добавляем кнопки
Чтобы пользователям нашего бота было удобно, покажем им сразу все знаки зодиака в виде кнопок. А потом сделаем так, что когда на них нажимаешь — появляется гороскоп для этого знака на сегодня.
Добавляем код с кнопками в раздел, который реагирует на «Привет»:
Кнопки есть, но пока не работают. Сейчас исправим.
Добавляем обработчик кнопок
Скорее всего, вы заметили, что в каждой кнопке у нас написано callback_data='zodiac' . Это значит, что при нажатии на любую кнопку у нас будет вызываться один и тот же метод, который отвечает за гороскоп. Если вы хотите сделать честный гороскоп, придётся в каждой кнопке прописать своё название обработчика, а потом задать его поведение, тоже для каждой кнопки.
Давайте сделаем обработчик кнопок, который будет реагировать на 'zodiac' и выдавать случайный текст, как в исходной программе. Для этого добавим новый метод в программу:
Нажимаем на кнопку — получаем текст гороскопа.
Убираем лишнее
Теперь у нас есть готовый бот, и нам осталось только убрать лишний код, который раньше отвечал за вывод знаков зодиака в консоли. После чистки получаем готовую программу:
Как видно, большую часть кода занимает тупое перечисление всех знаков зодиака. Мы могли бы автоматизировать это через циклы, но на улице такая хорошая погода, что мы это отложим.
Что дальше
- можно сделать индивидуальный гороскоп для каждого знака;
- научить бота новым командам;
- присылать свежий гороскоп каждое утро;
- наладить непрерывную работу на веб-сервере.
Напишите в комментариях, что бы вы хотели от такого бота? Что должен уметь идеальный бот с гороскопом?
«Практикум» вернёт деньги, если после обучения вы пойдёте работать в Яндекс. Изучите самый модный язык программирования и станьте крутым бэкенд-разработчиком. Старт — бесплатно.
Готовый код с уникальным алгоритмом шифрования. Возьми и сделай.
Поручите это машине.
Добавляем секретный уровень в пинг-понг на JavaScriptМини-проект для тех, кому всё ещё просто.
Устанавливаем MAMP за 10 минут
Всё как на старых приставках.
(и в программировании)
Время дурацких проектов.
Настало время настоящего программирования — собираем приложение из исходников.
Решил немного погрузиться в изучение Python, в процессе поставил задачу отойти от стандартного Hello World и попытаться написать сразу простого бота для Telegram. В итоге, бот может отвечать на заданные фразы, присылать внешний ip адрес и делать снимок с камеры. Скажу сразу, код не идеальный, но в процессе отладки ни один котик не пострадал.
Для начала сразу оговорюсь писать будем на Python версии 3 и будем использовать модули для облегчения жизни нашего проекта.
Пишем мы на Ubunru 19.10, поэтому надо учитывать, что есть две версии установленного Python.
Установим PIP и необходимые пакеты:
Как было указано выше, пишем мы на Ubuntu, поэтому в директории пользователя /home/users-name/ создаем файлы bot-file.py и config.py
Файл bot-file содержит код бота, а файл config необходим для конфигурации бота. В конфигурации необходимо будет указать список пользователей, которым разрешено взаимодействие с ботом.
Начнем с файла конфигурации, там все просто, необходимо просто указать id пользователя Telegram.
Переходим к файлу бота.
formatter = logging . Formatter ( "%(asctime)s | %(levelname)-7s | %(message)s" ) file_info = bot . get_file ( message . document . file_id ) downloaded_file = bot . download_file ( file_info . file_path ) src = '/home/users-name/received/' + message . document . file_name ; file_info = bot . get_file ( message . photo [ len ( message . photo ) - 1 ] . file_id ) downloaded_file = bot . download_file ( file_info . file_path ) bot . send_message ( message . chat . id , 'Привет, ' + user_name + ' Что ты хочешь от меня, собака сутулая!' , reply_markup = keyboard1 ) bot . send_sticker ( message . chat . id , 'CAADAgAD6CQAAp7OCwABx40TskPHi3MWBA' ) bot . send_message ( message . chat . id , 'Тебе сюда нельзя. Твой ID: ' + str ( message . chat . id ) ) bot . send_sticker ( message . chat . id , 'CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE' ) bot . send_message ( message . chat . id , 'Фото с камеры' ) bot . send_photo ( message . chat . id , img , caption = 'Фото с камеры' , reply_markup = keyboard1 ) bot . send_message ( message . chat . id , 'Тебе сюда нельзя. Твой ID: ' + str ( message . chat . id ) ) bot . send_sticker ( message . chat . id , 'CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE' ) bot . send_message ( message . chat . id , docum , reply_markup = keyboard1 ) bot . send_sticker ( message . chat . id , 'CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE' ) bot . send_message ( message . chat . id , 'Тебе сюда нельзя. Твой ID: ' + str ( message . chat . id ) ) bot . send_sticker ( message . chat . id , 'CAADAgADcQMAAkmH9Av0tmQ7QhjxLRYE' )Разберем некоторые интересные моменты, на которые следует обратить внимание.
Прокси
В данном примере используется Socks 5 прокси:
Достаточно указать свои данные и запустить бот.
Token ID
В начале пытался брать Token из файла конфигурации, но бот так и не запустился. Пришлось оставить в коде, поэтому Token бота вписывать придется в сам код.
Авторизация
Клавиатура
Красивые кнопочки любят все. 🙂
Прием документов и фотографий
Бот умеет сохранять документы и фотографии, которые скачиваются в папку received. Папку предварительно необходимо будет создать в профиле пользователя, где создавали файлы бота и файла конфигурации.
С вопросом получения картинки с камеры и внешнего ip адреса пришлось повозить подольше. Но в итоге через папку temp и вызов через bash wget все получилось.
Планировщик crontab
Бот запускается через планировщик задач, каждые пять минут происходит проверка запущенного процесса. Так как бот использует прокси и может произойти обрыв канала интернет, то повторный запуск бота не сможет произойти.
Для начала необходимо точно определить где и какая версия Python установлена.
В моем случае Python версии 3.7, поэтому в файле я буду указывать именно его.
Создаем bash скрипт для crontab
/ usr / bin / python3 . 7 / home / users - name / bot - file . pyНе забываем проверить пути до бота и Python.
Делаем файл исполняемым:
Открываем планировщик и вносим задачу:
Делал под пользователем, не под root.
Проверить запустился ли бот, можно командой:
Должен будет выдать номер запущенного процесса, если строка пустая, то бот не запущен.
Заключение
В итоге получили бота, который в случае чего может и документ принять и фоточку с камеры наблюдения прислать. В интернете полно статей на данную тематику, есть и powershell боты и другие. Но мне было интересно решить именно такую задачу. В процессе эксплуатации буду наращивать потенциал бота.
Файлы примера бота можно скачать тут: python-bot
Если есть замечания по коду и его оптимизации, то буду рад вашим комментариям. Так как тема для меня слишком новая и код скорее всего далек от идеала!
Напишем простой диалоговый Telegram-бот на Python, который в дальнейшем можно дополнить различными функциями, и задеплоим его.
Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.
Настройка
Откройте Telegram, найдите @BotFather и начните беседу. Отправьте команду /newbot и следуйте инструкциям. Вы получите:
Обязательно сохраните токен, так как это ключ для взаимодействия с ботом.
Примечание Хранение токена должно быть локальным: ни в коем случае не выгружайте его в общий доступ, например в GitHub-репозиторий .
Установка Python
Для написания Telegram-бота на Python, нужно установить сам язык. Если вы пользуетесь Windows, скачать Python можно с официального сайта. Версия важна. Нам подойдет Python не ниже версии 3.7. Если же у вас Linux или macOS, то, скорее всего, у вас стоит Python 3.6. Как обновиться, можете почитать здесь.
Тем, кто только начал изучение этого языка, будет также полезна дорожная карта Python-разработчика.
Установка pip
Это менеджер пакетов. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить это можно командой pip --version в терминале. Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:
Установка aiogram
Установить данный фреймворк для Telegram Bot API с помощью pip:
Hello, bot!
Давайте напишем простенькую программу приветствия. Для начала следует импортировать библиотеки и создать экземпляры Телеграм бота и диспетчера:
Запускаем Telegram бота, написанного на Python, следующим образом:
Cube Dev , Удалённо , От 8000 $
Ну вот и всё, простенький бот в Телеграмме на языке Python готов.
Docker
Сейчас мало кто не слышал про Docker, но если вдруг не слышали — вот хорошая статья. Для нашего проекта потребуется самый простой Dockerfile:
Каталог проекта должны при этом содержать следующие файлы:
Для локальных тестов достаточно установить Docker (linux, mac, windows), после чего в папке проекта собрать и запустить контейнер с помощью команд:
my_app — это просто название нашего контейнера, вместо которого можно использовать другое имя.
-d — специальный флаг, который запускает контейнер в фоне и позволяет дальше работать в терминале. Это называется detached mode.
Деплой на AWS
Прежде всего нам понадобится аккаунт на Docker Hub. Это аналог GitHub, только не с исходниками кода, а с уже созданными контейнерами. Работа с Docker Hub выглядит достаточно просто:
- Локально или с помощью пайплайнов собрали контейнер.
- Загрузили его на докер хаб.
- В любом удобном месте скачали его. Это может быть локальная машина, VPS сервер или облачный провайдер по типу AWS.
- Запустили.
Пройдёмся по этим шагам. Везде, где указано <docker_hub_username> , надо вставлять свой юзернейм, использованный при регистрации на докерхабе. Если это ваша первая публикация на докерхаб, для начала потребуется залогиниться с помощью docker login.
Загружаем его на докерхаб:
Для проверки успешности загрузки можете запустить контейнер из Docker Hub с помощью команды:
Далее загрузим наш контейнер в AWS Elastic Beanstalk. Для этого потребуется аккаунт на AWS. Если его нет, необходимо зарегистрироваться. Вас попросят ввести данные карты для верификации, но переживать не стоит, ведь мы воспользуемся бесплатным годовым триалом. Чтобы поиграться, этого более чем достаточно, а вот если вы захотите вывести проект в продакшен, следует перейти на VPS — это даст больше контроля и гибкости.
- Переходим в Elastic Beanstalk, на вкладку Applications, и создаём новое приложение:
- В пункте Application code нужно загрузить JSON-файл с конфигурацией Docker-образа. Сам файл:
- AWS начинает создавать окружение, просто ждём завершения процесса:
- Если всё прошло успешно, вы увидите индикатор успешного запуска приложения:
Проверяем работу нашего Telegram bot:
Заключение
Поздравляем! Теперь вы знаете, как писать роботов для Telegram на Python.
Бота можно дополнять другими функциями, например, добавить отправку файлов, опрос или клавиатуру.
Кстати, в телеграмме есть аж целых два типа клавиатур:
Но и это полностью рабочий Телеграм-бот на Python: дополните словарём, и получите полноценную беседу. Также можете опробовать функциональность нашего Telegram-бота.
В «настоящих проектах» не обойтись без базы данных. Тут на помощь приходит docker-compose, который позволяет объединить несколько контейнеров в один сервис. Таким образом, например, можно создать приложение и положить его в контейнер, а базу данных, как отдельный сервис, поместить в другой контейнер, и с помощью docker-compose наладить между ними связь.
Также для более серьёзной разработки лучше использовать выделенный виртуальный сервер (VPS): он даёт гораздо больше гибкости и свободы, чем тот же AWS. А самое главное, он более приближён к «боевой» разработке. Схема работы тут будет даже проще, чем с AWS: вам просто нужно установить Docker, спуллить образ с Docker Hub и запустить его.
Это пошаговое руководство по созданию бота для Telegram. Бот будет показывать курсы валют, разницу между курсом раньше и сейчас, а также использовать современные встроенные клавиатуры.
Время переходить к делу и узнать наконец, как создавать ботов в Telegram.
Шаг №0: немного теории об API Telegram-ботов
Начать руководство стоит с простого вопроса: как создавать чат-ботов в Telegram?
Токен — уникальная строка из символов, которая нужна для того, чтобы установить подлинность бота в системе. Токен генерируется при создании бота. METHOD_NAME — это метод, например, getUpdates , sendMessage , getChat и так далее.
Токен выглядит приблизительно так:
Для выполнения запросов используются как GET, так и POST запросы. Многие методы требуют дополнительных параметров (методу sendMessage , например, нужно передать chat_id и текст). Эти параметры могут быть переданы как строка запроса URL, application/x-www-form-urlencoded и application-json (кроме загрузки файлов). Еще одно требование — кодировка UTF-8.
После отправки запроса к API, вы получаете ответ в формате JSON. Например, если извлечь данные с помощью метода getME , ответ будет такой:
Список всех типов данных и методов API Telegram-бота можно найти здесь (ENG) или с переводом здесь (ру) .
Есть два варианта.
Первый — вручную создавать запросы с помощью метода getUpdates . В качестве объекта вы получите массив объектов Update . Этот метод работает как технология длинных опросов (long polling), когда вы отправляете запрос, обрабатываете данные и начинаете повторяете процесс. Чтобы избежать повторной обработки одних и тех же данных рекомендуется использовать параметр offset .
Как выбрать оптимальный метод? Метод getUpdates лучше всего подходит, если:
Метод с Webhook лучше подойдет в таких случаях:
- Вы используете веб-языки (например, PHP).
- У бота низкая нагрузка, и нет смысла делать запросы вручную.
- Бот на постоянной основе интегрирован в веб-сервер.
В этом руководстве будет использоваться метод getUpdates .
Еще один вопрос: как создать зарегистрировать бота?
@BotFather используется для создания ботов в Telegram. Он также отвечает за базовую настройку (описание, фото профиля, встроенная поддержка и так далее).
Существует масса библиотек, которые облегчают процесс работы с API Telegram-бота. Вот некоторые из них:
По своей сути, все эти библиотеки — оболочки HTML-запросов. Большая часть из них написана с помощью принципов ООП. Типы данных Telegram Bot API представлены в виде классов.
В этом руководстве будет использоваться библиотека pyTelegramBotApi.
Шаг №1: реализовать запросы курсов валют
Весь код был проверен на версии Python==3.7 c использование библиотек:
pyTelegramBotAPI==3.6.6
pytz==2019.1
requests==2.7.0
Создадим файл pb.py со следующим кодом:
Были реализованы три метода:
- load_exchange : загружает курсы валют по указанному URL-адресу и возвращает их в формате словаря(dict).
- get_exchange : возвращает курсы валют по запрошенной валюте.
- get_exchanges : возвращает список валют в соответствии с шаблоном (требуется для поиска валют во встроенных запросах).
Шаг №2: создать Telegram-бота с помощью @BotFather
Его нужно сразу настроить. Необходимо добавить описание и текст о боте (команды /setdescription и /setabouttext ), фото профиля ( /setuserpic ), включить встроенный режим ( /setinline ), добавить описания команд ( /setcommands ). Потребуется использовать две команды: /help и /exchange . Стоит описать их в /setcommands .
Теперь, когда настройка закончена, можно переходить к написанию кода. Прежде чем двигаться дальше, рекомендуется почитать об API и ознакомиться с документацией библиотеки, чтобы лучше понимать то, о чем пойдет речь дальше.
Шаг №3: настроить и запустить бота
Начнем с создания файла config.py для настройки:
Создадим файл bot.py . Нужно импортировать все необходимые библиотеки, файлы с настройками и предварительно созданный pb.py . Если каких-то библиотек не хватает, их можно установить с помощью pip .
Создадим бота с помощью библиотеки pyTelegramBotAPI. Для этого конструктору нужно передать токен:
Шаг №4: написать обработчик команды /start
Теперь чат-бот на Python работает и постоянно посылает запросы с помощью метода getUpdates . Параметр none_stop отвечает за то, чтобы запросы отправлялись, даже если API возвращает ошибку при выполнении метода.
Из переменной бота возможно вызывать любые методы API Telegram-бота.
Начнем с написания обработчика команды /start и добавим его перед строкой bot.polling(none_stop=True) :
Это было просто, не так ли?
Шаг №5: создать обработчик команды /help
Давайте оживим обработчик команды /help с помощью встроенной кнопки со ссылкой на ваш аккаунт в Telegram. Кнопку можно озаглавить “Message the developer”.
Как видно в примере выше, был использован дополнительный параметр ( reply_markup ) для метода send_message . Метод получил встроенную клавиатуру ( InlineKeyboardMarkup ) с одной кнопкой ( InlineKeyboardButton ) и следующим текстом: “Message the developer” и url='telegram.me/artiomtb' .
Код выше выглядит вот так:
Шаг №6: добавить обработчик команды /exchange
Обработчик команды /exchange отображает меню выбора валюты и встроенную клавиатуру с 3 кнопками: USD, EUR и RUR (это валюты, поддерживаемые API банка).
Вот как работает InlineKeyboardButton . Когда пользователь нажимает на кнопку, вы получаете CallbackQuery (в параметре data содержится callback-data ) в getUpdates . Таким образом вы знаете, какую именно кнопку нажал пользователь, и как ее правильно обработать.
Вот как работает ответ /exchange:
Шаг №7: написать обработчик для кнопок встроенной клавиатуры
В библиотеке pyTelegramBot Api есть декоратор @bot.callback_query_handler , который передает объект CallbackQuery во вложенную функцию.
Давайте реализуем метод get_ex_callback :
Все довольно просто.
Сперва отправим состояние ввода в чат, так чтобы бот показывал индикатор «набора текста», пока API банка получает запрос. Теперь вызовем метод get_exchange из файла pb.py , который получит код валюты (например, USD). Также нужно вызвать два новых метода в send_message: serialize_ex , сериализатор валюты и get_update_keyboard (который возвращает клавиатуре кнопки “Update” и “Share”).
Запишем в get_update_keyboard текущий курс валют в callback_data в форме JSON. JSON сжимается, потому что максимальный разрешенный размер файла равен 64 байтам.
Кнопка t значит тип, а e — обмен. Остальное выполнено по тому же принципу.
У кнопки Share есть параметр switch_inline_query . После нажатия кнопки пользователю будет предложено выбрать один из чатов, открыть этот чат и ввести имя бота и определенный запрос в поле ввода.
Методы serialize_ex и дополнительный serialize_exchange_diff нужны, чтобы показывать разницу между текущим и старыми курсами валют после нажатия кнопки Update .
Как видно, метод serialize_ex получает необязательный параметр diff . Ему будет передаваться разница между курсами обмена в формате . Это будет происходить во время сериализации после нажатия кнопки Update . Когда курсы валют отображаются первый раз, он нам не нужен.
Вот как будет выглядеть бот после нажатия кнопки USD:
Шаг №8: реализовать обработчик кнопки обновления
Теперь можно создать обработчик кнопки Update . После дополнения метода iq_callback_method он будет выглядеть следующим образом:
Если данные обратного вызова начинаются с get- ( get-USD , get-EUR и так далее), тогда нужно вызывать get_ex_callback , как раньше. В противном случае стоит попробовать разобрать строку JSON и получить ее ключ t . Если его значение равно u , тогда нужно вызвать метод edit_message_callback . Реализуем это:
Как это работает? Очень просто:
Метод get_ex_from_iq_data разбирает JSON из callback_data :
Метод get_exchange_diff получает старое и текущее значение курсов валют и возвращает разницу в формате :
get_edited_signature генерирует текст “Updated…”:
И вот так — если изменились:
Шаг №9: реализовать встроенный режим
Реализация встроенного режима значит, что если пользователь введет @ + имя бота в любом чате, это активирует поиск введенного текста и выведет результаты. После нажатия на один из них бот отправит результат от вашего имени (с пометкой “via bot”).
Обработчик встроенных запросов реализован.
Библиотека передаст объект InlineQuery в функцию query_text . Внутри используется функция answer_line , которая должна получить inline_query_id и массив объектов (результаты поиска).
Используем get_exchanges для поиска нескольких валют, подходящих под запрос. Нужно передать этот массив методу get_iq_articles , который вернет массив из InlineQueryResultArticle :
Теперь при вводе “@exchangetestbost + пробел” вы увидите следующее:
Попробуем набрать usd, и результат мгновенно отфильтруется:
Проверим предложенный результат:
Кнопка “Update” тоже работает:
Отличная работа! Вы реализовали встроенный режим!
Выводы
Читайте также: