• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

PHP Telegram Bot class

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram
Добрый вечер. Для своих проектов разработал несколько методов, упрощающих мне работу, в данном проекте я собрал их все воедино, и решил поделиться с вами. Из преимущества, перед классами из github'а, то что работает всего 1 файл, который удобно подключить к вашему проекту и можно создавать полноценного бота, для вашего чата, канала или просто сервиса в Telegram. Возможности класса практически безграничны, и все зависит от вашей фантазии. Опишу некоторые возможности класса:
  • Вывод информации с помощью методов класса.
  • Отправка, изменение, удаление, ответы на сообщения, цитирование.
  • Отправка файлов
  • Скачивание файлов на ваш сервер.
  • Система шаблонов, с помощью шаблонизатора, можно создавать заготовки сообщений бота, и манипулировать ими в ваших проектах. Что позволит вам создавать ботов под разную языковую аудиторию.
  • Система клавиатур, единый файл для хранения клавиатур бота.
  • Определение типов сообщения.
  • Фильтрация данных, которые могли бы привести к ошибкам в ваших скриптах.

Я очень ленивый человек, поэтому не стал описывать все возможности класса. Но написал небольшого бота, что бы показать возможности.
Код:
<?php

define('ROOT_DIR', __DIR__);

require_once(ROOT_DIR . '/Telegram.class.php');

$token = '555446138:AAHsMS7z366Z0-tcD1pCsoy9ZQiZIYd4CI8'; // Telegram bot токен

$telegram  = new Telegram($token);

$telegram->pathTemplate(ROOT_DIR . '/message.tpl'); // путь к файлу с шаблонами сообщений
$telegram->pathKeyboard(ROOT_DIR . '/keyboard.json'); // путь к файлу с шаблонами клавиатур

switch ($telegram->typeMessage()) {
    case 'message':
        switch ($telegram->text()) {
            case 'Тестовая кнопка 1':
                $telegram->sendMessage($telegram->chatID(), $telegram->showTemplate('test_button1'));
                break;
            case 'Тестовая кнопка 2':
                $telegram->sendMessage($telegram->chatID(), $telegram->showTemplate('test_button2'));
                break;
            case 'Тестовая кнопка 3':
                $telegram->sendMessage($telegram->chatID(), $telegram->showTemplate('test_button3'));
                break;
          
            default:
                # code...
                break;
        }
        break;
    case 'entities_message':
        foreach($telegram->entities() as $valueEntities) {
            if ($valueEntities['type'] == 'bot_command') {
                switch ($valueEntities['data']) {
                    case '/start':
                    case '/help':
                        $telegram->sendMessage($telegram->chatID(), $telegram->showTemplate('start'));
                        break;
                    case '/account_info':
                        $telegram->tagTemplate('{first_name}', !empty($telegram->firstName()) ? $telegram->firstName() : '-');
                        $telegram->tagTemplate('{last_name}', !empty($telegram->lastName()) ? $telegram->lastName() : '-');
                        $telegram->tagTemplate('{username}', !empty($telegram->username()) ? $telegram->username() : '-');
                        $telegram->tagTemplate('{language_code}', $telegram->languageCode());
                        $telegram->tagTemplate('{date}', date('H:i:s d/m/Y', $telegram->date()));
                        $telegram->sendMessage($telegram->chatID(), $telegram->showTemplate('account_info'));
                        break;
                    case '/keyboard':
                        $telegram->sendMessage($telegram->chatID(), $telegram->showTemplate('keyboard'), $telegram->Keyboard($telegram->setKeyboard('keyboard')));
                        break;
                    case '/remove_keyboard':
                        $telegram->sendMessage($telegram->chatID(), $telegram->showTemplate('remove_keyboard'), $telegram->removeKeyboard());
                        break;
                    case '/inline_keyboard':
                        $telegram->sendMessage($telegram->chatID(), $telegram->showTemplate('inline_keyboard'), $telegram->inlineKeyboard($telegram->setKeyboard('inline_keyboard')));
                        break;
                  
                    default:
                        # code...
                        break;
                }
            }
        }
        break;
    case 'callback_query':
        switch ($telegram->callbackData()) {
            case 'inline1':
                $telegram->sendAnswer($telegram->callbackID(), $telegram->showTemplate('test_button1'));
                break;
            case 'inline2':
                $telegram->sendAnswer($telegram->callbackID(), $telegram->showTemplate('test_button2'));
                break;
            case 'inline3':
                $telegram->sendAnswer($telegram->callbackID(), $telegram->showTemplate('test_button3'));
                break;
            case 'inline_del':
                $telegram->deleteMessage($telegram->chatID(), $telegram->messageID());
                $telegram->sendAnswer($telegram->callbackID(), $telegram->showTemplate('inline_keyboard_del'));
                break;
          
            default:
                # code...
                break;
        }
        break;
  
    default:
        # code...
        break;
}

?>

В работе я использую встроенный шаблонизатор. Для создания шаблона всех сообщений, создается любой текстовый документ. Каждое отдельное сообщение для бота заключается в теги <!-- BEGIN:start --> и <!-- END:start --> слово start в нашем случае это тот самый ключ, с помощью которого шаблонизатор и поймет какое сообщение нужно выводить. Для клавиатур используется похожая технология, только нужно использовать документ с Json строкой. Для удобства создания этого файла в классе есть метод createJson(); Сердцем класса является метод typeMessage(); именно он позволяет понимать боту, какой тип сообщения ему отправлен или какие манипуляции с сообщениями происходят именно сейчас. Хочу отметить что у бота есть встроенный метод вырезания команд из сообщений, что позволяет отправлять несколько команд в 1 сообщении, бот каждую из них обработает, повторы команд он не допускает.

Пример из темы можно оценить тут @vlmi_su_bot

Все мои последующие уроки, из темы https://vlmi.top/threads/uroki-po-razrabotke-telegram-botov.13307/ будут проходить с использованием этого класса. Прошу задавать вопросы и предлагать новые возможности для расширения функционала класса. Используя мои разработки, можно создавать достаточно сложные проект, в кратчайшие сроки, выложенный выше код бота, написан в течении нескольких минут.
 

Вложения

  • php_telegram_bot_class.zip
    4,6 KB · Просмотры: 324
Последнее редактирование:

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram
Описание основных методов класса.

При инициализации класса, можно "вручную" задавать Json строку с ответом Telegram сервера. Его можно задать вторым параметром, вместе с токеном, это может быть полезно, если нужно сделать рассылку, а для многочасовых операций, скрипт можно запустить в качестве "Демона" (если интересно могу написать как).
PHP:
$token = '555446138:AAHsMS7z366Z0-tcD1pCsoy9ZQiZIYd4CI8';
$json   = '';  // Json строка с ответом сервера
require_once(ROOT_DIR . '/Telegram.class.php');
$telegram  = new Telegram($token, $json);
Для вывода данных используются соответствующие методы. Например для получения ID чата с ботом, будь то общение в меню бота или же общение с ботом в чате, используется метод:
PHP:
$telegram->chatID();
Если нужно получить ID чата сообщения на которое ответили в чате, используется метод:
PHP:
$telegram->replyChatID();
Если изучить класс то можно понять, что практически у каждого метода есть аналог и для вывода данных на отвеченное сообщение.
Если данные методы вам не подходят или по иным причинам, то всегда можно воспользоваться методом
PHP:
$telegram->response();
Данный метод выведет массив данных без каких либо изменений и вы можете использовать их в дальнейшем для формирования своих запросов данных.
Скачивание файла:
PHP:
$telegram->download();
Когда возникает необходимость скачать файлы отправленные боту, для сохранения на ваш сервер или же для их последующей обработки. Этот метод принимает 2 параметра.
fileID - это id файла, его можно получить когда пользователь отправляет файл, для этого существует метод
PHP:
$telegram->docFileID();
И второй параметр это полный путь к месту сохранения файла, указывать стоит вместе с названием будущего файла. Метод сам его скачает, создаст и скопирует в указанное вами место.

Продолжение следует...
 
Последнее редактирование:
Сверху Снизу