Как написать бота для телеграмм на php для локал Биткоин

Бот продвигает объявления по цене на бирже Localbitcoins.com
Автоматическая или полуавтоматическая торговля по:
-QIWI
-Yandex
-Payeer
-ADVCash
-Perfect Money
-WebMoney
-Банковские карты РФ через SMS -оповещения
—API Privatbak UA, TELE2, Megafon, MTС
Оповещения, управление через Telegram-бота
Подключение нескольких аккаунтов Localbitcoins
Отчеты

Бот написан на платформе 1С 8.3, исходные коды в поставку не входят.
Установка исключительно на Windows компьютер
Возможна индивидуальная доработка по тех. заданию

В этом руководстве мы разберём процесс написания простого Telegram-бота на Python и его запуска на сервере Heroku. Но сперва давайте выясним, зачем вообще нужны боты и почему вам стоит написать своего.

На первый взгляд, Telegram — это просто очередной мессенджер. Реклама гласит, что он быстр, защищён, в нём нет рекламы и всё такое. Но у него есть важная фича — боты!

Бот — это не просто «автоответчик». Его правильнее считать автоматизированным помощником. Представим, что вы хотите поделиться в групповом чате видео с YouTube, но ссылки у вас нет.

Вот стандартный алгоритм действий без бота:

  • открываем YouTube в браузере;
  • находим видео;
  • нажимаем на «Поделиться» (и надеемся, что в списке будет наш мессенджер);
  • если нашего мессенджера в списке не оказалось, копируем ссылку на видео;
  • возвращаемся в мессенджер и делимся ссылкой.

Да, многие привыкли делать именно так. Однако бот позволит действовать следующим образом:

  • переписываемся в мессенджере;
  • вводим @vid и название видео, которое вы хотите найти и скинуть в беседу;
  • отправляем его.

Удобно, не правда ли? И это лишь одна из возможностей.

Telegram позволяет пользователям создавать своих ботов. Ответим на вопрос «Почему мне стоит написать своего?» — это, пожалуй, самый простой способ понять, что такое API.

Обо всём по порядку. Сперва нужно зарегистрироваться в Telegram. Наиболее удобно использовать веб-клиент для знакомства с основными принципами работы ботов и API.

Откройте приложение, найдите @BotFather и начните беседу. Отправьте команду /newbot и следуйте инструкциям. После выполнения первых шагов вы получите:

Собственно, вот и всё. На данном этапе ваш бот полностью пассивен.

Вам нужно начать беседу с ботом. Введите в поисковой строке его имя и нажмите на кнопку /start . Отправьте сообщение, например, «Привет». Это первое сообщение очень важно, поскольку оно станет первым обновлением, которое получит ваш бот.

Если вы в первый раз работаете с API, то разобраться вам поможет браузер. Откройте новую вкладку и воспользуйтесь Telegram API, перейдя по ссылке:

Открыв этот адрес в браузере, вы отправите запрос на сервер Telegram, и он ответит вам в формате JSON. Ответ чем-то похож на словарь в Python. Вы увидите что-то вроде такого:

Если вы изучите раздел метода /sendMessage в документации, то увидите, что он принимает два параметра: chat_id и text . Вы можете создавать цепочки параметров в адресной строке браузера, используя ? для первого и & для всех последующих. Команда для отправки сообщения будет выглядеть так:

Попробуйте получить ответ от вашего бота, подставив в качестве chat_id значение, полученное после вызова /getUpdates (в нашем примере — 303262877 ). Текст сообщения может быть любым. Запрос должен выглядеть примерно так:

Если вы пользуетесь Windows и у вас не установлен Python, скачать его можно с официального сайта. Вообще версия не важна, но в этой статье будет использоваться Python 3.x. Если же у вас Linux или macOS, то обе версии (или, как минимум, Python 2.x) уже установлены.

Затем нужно установить pip. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить это можно командой pip —version в терминале. Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:

Читайте также:  Сколько стоит Биткоин в беларуси

Загвоздка в том, что разные версии Python используют разные pip. Если у вас macOS, вы можете попробовать следовать советам со Stack Overflow. В случае с Windows вам нужно скачать get-pip.py, открыть командную строку, перейти в директорию со скачанным файлом и выполнить команду:

Самое сложное позади. Установим пакет requests при помощи pip:

Теперь, когда вы поняли, что такое API, и установили все необходимые инструменты, напишем скрипт, который будет проверять обновления и отвечать на новые сообщения.

Сперва бот должен проверить обновления. Первое сообщение можно расценивать как самое свежее, но getUpdates возвращает все обновления за последние 24 часа. Напишем небольшой скрипт, чтобы получить самое последнее обновление:

Словарь обновлений состоит из двух элементов: ok и results . Нас интересует вторая часть — список всех обновлений, полученных ботом за последние 24 часа.

Узнать больше о библиотеке requests можно, прочитав документацию. По сути, каждый раз, когда вам нужно получить, обновить или удалить информацию, хранящуюся на сервере, вы отправляете запрос и получаете ответ.

Теперь нужно добавить ещё 2 функции. Первая будет доставать chat_id из обновления, а вторая — отправлять сообщение.

Помните, как мы объединяли параметры при помощи ? и & ? Вы можете сделать то же самое, добавив словарь в качестве второго дополнительного параметра в функциях get / post из пакета requests.

Скрипт готов, но он не идеален. Главным минусом является необходимость запускать его каждый раз, когда мы хотим, чтобы бот отправил сообщение. Исправим это. Чтобы бот слушал сервер и получал обновления, нам нужно запустить основной цикл. На новой строке, после import requests , добавьте from time import sleep . После этого замените две последние строки на следующий код:

Хотя мы и добавили таймаут в 1 секунду, пример выше можно использовать только в обучающих целях, поскольку он использует частые опросы (short polling). Это плохо влияет на сервера Telegram, поэтому их нужно избегать. Есть ещё два способа получения обновлений через API — длинные опросы (long polling) и вебхуки (webhooks). Если мы будем использовать способ получения обновлений через getUpdates без параметров, то запросы будут происходить слишком часто.

Поскольку мы начали использовать в скрипте основной цикл, мы должны переключиться на длинные опросы. Сперва изменим первую функцию, добавив в неё параметр timeout . Сам по себе он не уменьшит частоту проверки обновлений и будет работать только в том случае, когда обновлений нет. Чтобы помечать уже просмотренные обновления, нужно добавить параметр сдвига offset :

Теперь бот должен работать нормально, но его всё ещё можно улучшить. Давайте инкапсулируем все функции в один класс. Должно получиться что-то вроде этого:

Последний штрих — объявим переменные и научим бота приличным манерам. Сделаем так, чтобы бот приветствовал вас раз в день, при этом фраза должна зависеть от времени суток. Для этого добавьте следующий код в ваш скрипт:

Теперь вы можете улучшать бота так, как захотите. Можно, например, настроить отправку медиафайлов или добавить собственные кнопки.

Последним шагом будет развёртывание вашего бота на сервере. Наверняка у вас его нет, да и покупать не хочется — но это необязательно. Сейчас существует множество бесплатных облачных решений, из которых мы выберем Heroku.

Сперва зарегистрируйтесь на GitHub. Создайте аккаунт (рано или поздно он вам точно пригодится) и установите Git. На Linux выполните следующую команду:

Читайте также:  Сколько будет 300 долларов в Биткоинах

На macOS и Windows его нужно скачать и установить вручную. И не забудьте зарегистрироваться на Heroku.

Теперь вам нужно навести порядок в файлах. Создайте новую папку и перейдите в неё в терминале или командной строке. Инициализируйте в ней virtualenv :

Имя не имеет значения, но лучше сделать его интуитивно понятным. Перейдите в папку my_env .

Теперь вам нужно склонировать git-репозиторий. Введите следующую команду:

Поместите скрипт в папку, полученную в результате выполнения команды git clone .

Вернитесь в папку my_env и запустите virtualenv :

Если вы успешно запустили virtualenv , приглашение командной строки должно начинаться с (my_env).

Перейдите в папку репозитория и ещё раз установите модуль requests:

Теперь нужно создать список зависимостей Heroku. Это несложно. Введите:

Создайте Procfile . В этом файле вам нужно разместить инструкции по работе с вашим скриптом. Имя файла обязательно должно быть Procfile ( Procfile.windows в случае с Windows). У него не должно быть других расширений. Содержимое файла должно быть таким (замените my_bot на имя вашего скрипта):

Добавьте файл __init__.py в вашу папку. Он может быть пустым, но он должен там быть.

Отправьте коммит с изменениями в репозиторий:

Теперь развернём бота на Heroku. Можно использовать и панель управления на сайте, но мы потренируемся делать всё через консоль. Если вы столкнётесь с какими-то проблемами, обратитесь к этому руководству.

Рассмотрим лишь те действия, которые нужны для развёртывания приложения. Если вы пользуетесь macOS или Windows, установите интерфейс командной строки, следуя гайду.

Если вы пользуетесь Ubuntu, используйте следующие команды:

Если возникнут ошибки, проверьте, присутствуют ли все зависимости.

Теперь выполните следующие команды:

С этого момента ваше приложение должно работать на сервере Heroku. Если что-то пойдёт не так, проверить логи можно следующим образом:

Коды ошибок можно найти на сайте Heroku.

Бесплатный аккаунт накладывает некоторые ограничения. Тем не менее теперь у вас есть полностью рабочий бот — поздравляем! Продолжить изучение возможностей ботов для Telegram вам поможет видеокурс — в нём используют PHP, но суть остаётся той же.

Когда для своего сервиса https://qrer.ru, который занимается отправкой сообщений об изменениях на сайтах пользователей потребовалось подключить сообщение в чат Telegram, я стал искать простое и быстрое решение — как написать собственного бота на языке php.

Прежде всего для разработки бота пригодится внутренняя документация мессенджера. Хотя она на английском языке, но разобраться в ней довольно просто. Однако хотелось чего-нибудь готового и уже на php. Изучение инструкций подсказало, что код должен быть небольшой и простой, так как все манипуляции сводятся к отправке POST и GET запросов и получению ответов в формате JSON. Язык php справляется с этим без всяких проблем.

Даже документация самого сервиса в качестве примеров бота на php содержала ссылки на библиотеки, расположенные на github. Эти библиотеки показались мне избыточными. Кроме того, для подключения их требовалась установка менеджера пакетов Composer, а затем, когда я его подключил выяснилось, что библиотеки требуют PHP 7 или, в качестве минимума, php версии 5.5. Обновляться со своей 5.4.16 у меня не было никакого желания, хотя и можно было бы поставить 5.6. Но мысль о том, что для того, чтобы реализовать простейший обмен информации необходимо подгружать избыточные библиотеки не давала покоя.

Поэтому решено было создать собственного бота, без использования сторонних библиотек, тем более, что функционал его планировался простейший. Пошаговую инструкцию для этого действа я попытался представить в этой статье.

Читайте также:  Как не прогореть на Биткоинах

1. Для начала, как и указано в других источниках, необходимо создать бота. Для этого необходимо обратиться к «отцу всех ботов» — роботу Telegram с ником @BotFather. Для этого открываем чат и находим этого пользователя.

2. Затем в диалоге с этим господином (запущенным командой /start) набираем команду /newbot

3. В ответном диалоге BotFather поздравит с пополнением, выдаст ссылку на новичка и даст буквенно-цифровой ключ, который необходимо сохранить в тайне. По нему Telegram поймет что это мы, а мы поймем, что это он. Все, теперь бот создан, с ним уже можно общаться. Правда отвечать он не будет, потому что не умеет.

4. Для того, чтобы наш сайт мог принимать сообщения, нужно сделать следующие вещи. Прежде всего создать так называемый WebHook и сообщить о нем мессенжеру. Это по сути дела в нашем случае обычный файл на php, который будет вызываться всякий раз, когда происходит новое событие. Например кто-то обратиться к нашему боту. Делается это один раз, после чего можно уже писать обработчик. Следует отметить, что наиболее правильным будет создание обработчика сообщений на сайте, на котором уже есть SSL-сертификат и который работает по протоколу HTTPS. Обычные бесплатные сертификаты Let’s Encrypt вполне подойдут. Отличная инструкция по их созданию.

Для создания WebHook пишем следующий код:

$url = «https://api.telegram.org/bot».$Telegram_botkey.»/setWebhook?url=https://nash-server.ru/».$Telegram_dir.»/bot.php»; $l1=file_get_contents($url); $response = json_decode($l1); $s=print_r($response);

В качестве переменных, соответственно, необходимо вставить ключ, выданный телеграммом, каталог, куда мы положим наш обработчик (система рекомендует придумать какой-нибудь сложный каталог, например совпадающий с ключом. Делается это для того, чтобы к файлу не смогли обратиться посторонние. Немного странный способ защиты, но все же. На последних строчках получаем и распечатываем ответ, чтобы убедиться, что все прошло отлично.

5. Теперь собственно бот на php. Тот самый, что bot.php

$json = file_get_contents(‘php://input’); $obj = json_decode($json, TRUE);

— получили то, что нам прислали и перевели в массив.

Если получили сообщение и тип беседы «Приватная», то поняли, как зовут вашего собеседника, какой у него ник и даже составили ответное сообщение!

Все, если текст мы составили, то мы его отправим в окошко пользователю. Здесь между последним и предпоследним фрагментом кода можно вставить свой код — проверить — есть ли пользователь в базе, выполнить еще массу шагов. Важно, что ответ мы предоставляем в виде текста.

По поводу последнего фрагмента есть несколько дополнительных необязательных перемеменных:

parse_mode=HTML — позволяет вставлять простейшее форматирование. Ссылки, делать текст жирным или курсивом. Важно — элемент href в ссылках должен быть в кавычках.

disable_web_page_preview=false — позволяет показывать в окне чата превью странички, которая скрывается за отправленной ссылкой.

disable_notification=false — не дает отправить сообщение скрыто, в фоне. В таком виде при поступлении нового сообщения телефон издает звуковой сигнал. Если поставить true, то сообщение в Telegram придет «молча».

На этом все. Еще можно внедрить последний фрагмент в любой php-код, где требуется отправка сообщения на уже открытый диалог в мессенджер. Пользователь может выйти из него, но когда он появится онлайн снова — сообщение к нему обязательно придет. Таким образом, вместо того, чтобы использовать громоздкие php-библиотеки, мы написали всего несколько строчек кода на php и реализовали значительное количество функционала бота, которое нам требуется.

Читайте далее:

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Adblock detector