23

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi.

По мотивам постов от @naykob первая часть и вторая часть

Задача: Запустить бота Telegram на локальном компьютере под управлением Windows (в данном случае под Windows 7) и выполнять различные процессы с использованием PHP и Delphi.

Чтобы не плодить баяны не повторяться , настоятельно рекомендую ознакомится с второй частью от @naykob, так как именно в ней расписано как завести бота через "помощника @BotFather" для дальнейшей работы с ним.

Краткая инструкция для Лиги лени.
Самое главное запомнить token для получения доступа к Telegram API:

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

Далее выбираем локальный сервер, мой выбор пал на Open Server Panel, так как Denwer давно не обновляется, хотя для данной задачи и он бы подошёл. Далее я буду описывать все действия на примере Open Server.

Переходим в папку с установленным Open Server и исходя из какой разрядности ваша операционная система запускаем необходимый exe.

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост


Переходим в папку "domains" и создаем новую папку, в моём случае это "pikabu-bot.ru", именно в ней будут располагаться файлы бота.

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

webhook.php

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

Маленькое отступление: Для того что бы сервер Telegram видел наш локальный сервер мы сделаем туннелирование при помощи консольного приложения Ngrok. Приложение создает безопасный общедоступный URL вида: (https://yourapp.ngrok.io) который будет ссылаться на ваш\наш локальный веб-сервер. Ngrok бесплатен хотя и имеет платные плюшки , например в виде постоянного домена, но мы справимся и без этого.

Как говорит интернет его нужно запускать с параметрами:

ngrok http --host-header=pikabu-bot.ru 80


Но сдается мне что это не совсем правильно так как устанавливается перенаправленние на "localhost" и приходится настраивать Алиасы (об этом в конце поста), если кто подскажет как правильно, будет круто. При его запуске становиться доступна страница статистики расположенная по адресу:
http://localhost:4040/status

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост
Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

На ней нас интересует только полученный адрес по которому наш локальный сервер доступен из вне, одно из ограничений бесплатной версии Ngrok заключается в том что при каждом новом запуске нам выдаётся новый адрес. В файле "webhook.php" мы парсим данное значение и устанавливаем webhook c новым адресом который ведет к файлу "bot.php" на нашем локальном сервере. И все наше содержимое будет общаться с Telegram по https как он и любит.

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

Содержимое всех файлов и их краткое описание:

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

bot.php

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

index.php
По сути заглушка которая показывает информацию о боте.

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

lib.php
Функция перевода символов в нижний регистр, учитывающая кириллицу для удобного анализа. Ни чего интересного.

options.php
Файл с настройками, а именно: $token - полученный нами от @BotFather и имя пользователя которому разрешено выполнять процессы на нашем локальном сервере.
Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

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

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

run.exe

Консольное приложение которое принимает в качестве параметра путь для приложения которое нужно запустить, так как если напрямую запустить приложение командой из bot.php exec('calc.exe');
то все остальные команды не будут выполняться пока запущенное приложение, в данном случае калькулятор не будет завершён, есть родной способ это обойти но решил исполнить именно в таком виде так как функционал по мере необходимости можно наращивать.
В файле bot.php видно как обращаться к данному приложению:
exec('run.exe C:\Windows\System32\calc.exe');

Так как в Windows параметры\текст с пробелами считается разными параметрами, в цикле соединяю все параметры в одну строку и далее выполняем её, а после приложение закрывается, тем самым у нас остаётся свободный скрипт от выполнения приложения.

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

Еще немного о webhook.php
Для автоматического запуска приложения Ngrok и установки webhook'а, было написанно еще одно консольное приложение start.exe которое так же принимает параметры запуска.

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

Настроить start.exe можно через ярлык и засунуть в автозагрузку:

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

Про Алиасы:
Осталось дело за малым, настроить Open Server. После запуска в области уведомлений возле часов будет иконка с флажком, кликаем по нему и переходим в настройки во вкладку "Алиасы"  и перенаправляем наш созданный домен на "localhost".

Создаем бота Telegram на локальном компьютере Windows - PHP и Delphi. Telegram бот, Рукожоп, Инструкция, Моё, PHP, Delphi, Быдлокодинг, Длиннопост

Собственно видео работы: https://youtu.be/J1ScV5JXUmc

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

Я осознано упускал очевидные, по крайней мере для меня, вещи, но несмотря на это надеюсь что изложил достаточно доходчиво.

За ошибки прошу не пинать. Все для минусов приложил.
Писал\собирал\записывал и скриншотил  - я, значит и тегу "моё" быть. Спасибо.

P.S. Если у кого-то вызовут сомнения или просто нужны исходники исполняемых файлов, прикреплю в комментариях по первому запросу.
Все файлы для запуска описанного в посте расположил в ЯДИСКЕ.