Пишем бота на PHP сообщающего ID канала/чата/пользователя

Учимся писать бота который сообщает id пользователя или канала. Так же учимся работать с библиотекой.

Пишем бота на PHP сообщающего ID канала/чата/пользователя

Привет, начинающий разработчик телеграм ботов. В этом уроке мы создадим Telegram-бота на PHP, который будет выдавать ID пользователя, чата и другие полезные данные. Звучит вроде бы просто, но это отличный старт для понимания работы с API Telegram. К тому же это будет полезный бот, я таким сам постоянно пользуюсь. @getmyid_bot. Еще в уроке мы немного затронем работу с библиотеками. Вот пример такого бота -

Не знаете что еще за ID? ID в Telegram - это уникальный числовой идентификатор для каждого пользователя, чата или канала, который не меняется со временем. Он используется для однозначной идентификации объекта при работе с API, отправке сообщений и других взаимодействиях; для пользователей ID всегда положительное число, а для групп и каналов - отрицательное.


Подготовка

Вот что нам понадобится:

  1. Хостинг с PHP. Про хостинг я писал уже в главе "хостинг и домен" в другом уроке. Лично я обычно пишу на openserver, а только потом уже загружаю на хостинг.
  2. Composer — это такой "волшебный помощник" для управления библиотеками PHP. Если не знаете что это такое то срочно бегите изучать. Мне помогло видео Composer php - пакетный менеджер. На самом деле, все очень просто, хотя так может не показаться сразу. Установили Composer, в терминале в своей программе написали одну строку и все, у вас проекте есть подключенная библиотека.
  3. Токен бота от BotFather. Подробно об этом я рассказывал тут.

Знаешь, как говорят? "Хороший разработчик всегда готовится заранее!" Так что убедись, что всё работает, прежде чем начинать. Я точно плохой разработчик, который по ходу дела подготавливает нужное. 😀


Создаем проект

Создай папку у себя на компьютере. Открой ее в редакторе кода и в терминале установи библиотеку php-telegram-bot/core с помощью Composer:

composer require longman/telegram-bot

У вас должна появится папка vendor в папке проекта. Если не появилась значит что то сделали не так. Смотрите в терминале ошибки.

Кстати, знаешь, почему Composer так популярен? Он не только подтягивает нужные библиотеки, но и решает все зависимости автоматически. Просто магия!


Пишем код

Создай файл bot.php в корне проекта. Открой его в своем редакторе и давай начнём писать.

Инициализация бота


<?php

// Подключаем автозагрузчик Composer
require_once __DIR__ . '/vendor/autoload.php';

use Longman\TelegramBot\Telegram;
use Longman\TelegramBot\Request;

// Вставь свой токен сюда
$bot_api_key = 'YOUR_BOT_API_KEY';
$bot_username = 'YourBotUsername'; // Без @, просто имя бота

try {
    // Создаём экземпляр Telegram
    $telegram = new Telegram($bot_api_key, $bot_username);

    // Обрабатываем входящие запросы
    $update = json_decode(file_get_contents('php://input'), true);

    if (isset($update['message'])) {
        handleMessage($update['message'], $telegram);
    }
} catch (Exception $e) {
    // Если что-то пошло не так, выводим ошибку
    echo 'Ошибка: ' . $e->getMessage();
}

/**
 * Функция для обработки сообщений
 */
function handleMessage($message, $telegram) {
    // Получаем ID пользователя
    $userId = $message['from']['id'];
    $chatId = $message['chat']['id'];

    // Если сообщение пересланное, получаем ID отправителя оригинального сообщения
    $forwardFromId = $message['forward_from']['id'] ?? null;

    // Формируем ответное сообщение
    $responseText = "Ваш User ID: $userId\n";
    $responseText .= "Chat ID: $chatId\n";

    if ($forwardFromId) {
        $responseText .= "ID отправителя пересланного сообщения: $forwardFromId\n";
    }

    // Отправляем ответ пользователю
    Request::sendMessage([
        'chat_id' => $chatId,
        'text' => $responseText,
    ]);
}

Разбор кода

Давай разберём этот кусочек кода построчно, чтобы всё стало кристально ясно.

  1. Подключение библиотеки: Мы используем require_once для подключения автозагрузчика Composer. Это позволяет нам использовать классы из установленной библиотеки php-telegram-bot/core.

  2. Инициализация бота: Мы создаём объект Telegram, передавая ему токен и имя бота. Это как сказать: "Эй, Telegram, вот мой бот, работай с ним!"

  3. Получение входящих данных: Telegram отправляет данные в формате JSON. Мы преобразуем их в массив PHP с помощью json_decode.

  4. Обработка сообщений: Если в данных есть ключ 'message', значит, пользователь отправил сообщение. Мы вызываем функцию handleMessage, которая занимается всей логикой.

  5. Формирование ответа: Мы достаём ID пользователя (from.id), ID чата (chat.id) и, если сообщение пересланное, ID отправителя оригинального сообщения (forward_from.id).

  6. Отправка ответа: Метод Request::sendMessage отправляет текстовое сообщение обратно пользователю.


Загрузка на хостинг и настройка webhook

Чтобы бот мог получать сообщения, нужно настроить webhook. Webhook — это URL, куда Telegram будет отправлять данные о новых сообщениях в боте. Подробней я рассказывал в уроке "Получение данных".

Создай скрипт set_webhook.php:


<?php

require_once __DIR__ . '/vendor/autoload.php';

use Longman\TelegramBot\Telegram;

$bot_api_key = 'YOUR_BOT_API_KEY';
$bot_username = 'YourBotUsername';
$hook_url = 'https://yourdomain.com/bot.php'; // Замени на реальный URL к файлу

try {
    $telegram = new Telegram($bot_api_key, $bot_username);
    $result = $telegram->setWebhook($hook_url);

    if ($result->isOk()) {
        echo "Webhook успешно установлен!";
    } else {
        echo "Ошибка: " . $result->getDescription();
    }
} catch (Exception $e) {
    echo 'Ошибка: ' . $e->getMessage();
}

Теперь загружаем папку проекта на хостинг и запускаем файл set_webhook.php. Если видишь сообщение "Webhook успешно установлен!" то все хорошо и Webhook установлен. Теперь файл bot.php сможет получать уведомления о новых сообщениях в боте.


Тестируем бота

Открой Telegram, найди своего бота и отправь ему любое сообщение. Если всё сделано правильно, он ответит тебе ID пользователя и чата. Если отправишь пересланное сообщение, он покажет ещё и ID отправителя оригинала.


Полезные дополнения

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

  2. Команды: Можно добавить команды, например /start, чтобы бот приветствовал пользователя.

    
    if ($message['text'] === '/start') {
       $responseText = "Привет! Я помогу узнать твой ID.";
       Request::sendMessage(['chat_id' => $chatId, 'text' => $responseText]);
    }
  3. Добавь аватарку и описание своему боту через @botfather, так же можно добавить бота в каталоги и тогда он нем узнает больше народу.


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

Если что-то непонятно — не стесняйся спрашивать в нашем чате. Удачи в разработке! 🚀

Комментарии