Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi.
По мотивам постов от @naykob первая часть и вторая часть
Задача: Запустить бота Telegram на локальном компьютере под управлением Windows (в данном случае под Windows 7) и выполнять различные процессы с использованием PHP и Delphi.
Чтобы не плодить баяны не повторяться , настоятельно рекомендую ознакомится с второй частью от @naykob, так как именно в ней расписано как завести бота через "помощника @BotFather" для дальнейшей работы с ним.
Краткая инструкция для Лиги лени.
Самое главное запомнить token для получения доступа к Telegram API:
Далее выбираем локальный сервер, мой выбор пал на Open Server Panel, так как Denwer давно не обновляется, хотя для данной задачи и он бы подошёл. Далее я буду описывать все действия на примере Open Server.
Переходим в папку с установленным Open Server и исходя из какой разрядности ваша операционная система запускаем необходимый exe.
Переходим в папку "domains" и создаем новую папку, в моём случае это "pikabu-bot.ru", именно в ней будут располагаться файлы бота.
webhook.php
Маленькое отступление: Для того что бы сервер Telegram видел наш локальный сервер мы сделаем туннелирование при помощи консольного приложения Ngrok. Приложение создает безопасный общедоступный URL вида: (https://yourapp.ngrok.io) который будет ссылаться на ваш\наш локальный веб-сервер. Ngrok бесплатен хотя и имеет платные плюшки , например в виде постоянного домена, но мы справимся и без этого.
Как говорит интернет его нужно запускать с параметрами:
ngrok http --host-header=pikabu-bot.ru 80
Но сдается мне что это не совсем правильно так как устанавливается перенаправленние на "localhost" и приходится настраивать Алиасы (об этом в конце поста), если кто подскажет как правильно, будет круто. При его запуске становиться доступна страница статистики расположенная по адресу:
http://localhost:4040/status
На ней нас интересует только полученный адрес по которому наш локальный сервер доступен из вне, одно из ограничений бесплатной версии Ngrok заключается в том что при каждом новом запуске нам выдаётся новый адрес. В файле "webhook.php" мы парсим данное значение и устанавливаем webhook c новым адресом который ведет к файлу "bot.php" на нашем локальном сервере. И все наше содержимое будет общаться с Telegram по https как он и любит.
Содержимое всех файлов и их краткое описание:
bot.php
index.php
По сути заглушка которая показывает информацию о боте.
lib.php
Функция перевода символов в нижний регистр, учитывающая кириллицу для удобного анализа. Ни чего интересного.
Файл с настройками, а именно: $token - полученный нами от @BotFather и имя пользователя которому разрешено выполнять процессы на нашем локальном сервере.
Имя должно быть без знака @, посмотреть его можете в своем профиле, если там его нет укажите его в настройках приложения мессенджера.
run.exe
Консольное приложение которое принимает в качестве параметра путь для приложения которое нужно запустить, так как если напрямую запустить приложение командой из bot.php exec('calc.exe');
то все остальные команды не будут выполняться пока запущенное приложение, в данном случае калькулятор не будет завершён, есть родной способ это обойти но решил исполнить именно в таком виде так как функционал по мере необходимости можно наращивать.
В файле bot.php видно как обращаться к данному приложению:
exec('run.exe C:\Windows\System32\calc.exe');
Так как в Windows параметры\текст с пробелами считается разными параметрами, в цикле соединяю все параметры в одну строку и далее выполняем её, а после приложение закрывается, тем самым у нас остаётся свободный скрипт от выполнения приложения.
Еще немного о webhook.php
Для автоматического запуска приложения Ngrok и установки webhook'а, было написанно еще одно консольное приложение start.exe которое так же принимает параметры запуска.
Настроить start.exe можно через ярлык и засунуть в автозагрузку:
Про Алиасы:
Осталось дело за малым, настроить Open Server. После запуска в области уведомлений возле часов будет иконка с флажком, кликаем по нему и переходим в настройки во вкладку "Алиасы" и перенаправляем наш созданный домен на "localhost".
Собственно видео работы: https://youtu.be/J1ScV5JXUmc
Очень удобно делать подобные манипуляции с ботом на домашней машине, чем каждое исправление заливать на хостинг\сервер.
Я осознано упускал очевидные, по крайней мере для меня, вещи, но несмотря на это надеюсь что изложил достаточно доходчиво.
За ошибки прошу не пинать. Все для минусов приложил.
Писал\собирал\записывал и скриншотил - я, значит и тегу "моё" быть. Спасибо.
P.S. Если у кого-то вызовут сомнения или просто нужны исходники исполняемых файлов, прикреплю в комментариях по первому запросу.
Все файлы для запуска описанного в посте расположил в ЯДИСКЕ.