Guest User

bot.php

a guest
Jan 19th, 2021
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.06 KB | None | 0 0
  1. <?php
  2. // определяем кодировку
  3. header('Content-type: text/html; charset=utf-8');
  4. // Создаем объект бота
  5. $bot = new Bot();
  6. // Обрабатываем пришедшие данные
  7. $bot->init('php://input');
  8.  
  9. /**
  10.  * Class Bot
  11.  */
  12. class Bot
  13. {
  14.     // TOKEN - созданный токен для нашего бота от @BotFather
  15.     private $botToken = "TOKEN";
  16.     // адрес для запросов к API Telegram
  17.     private $apiUrl = "https://api.telegram.org/bot";
  18.  
  19.     public function init($data_php)
  20.     {
  21.         // создаем массив из пришедших данных от API Telegram
  22.         $data = $this->getData($data_php);
  23.         // id чата отправителя
  24.         $chat_id = $data['message']['chat']['id'];
  25.         // включаем логирование будет лежать рядом с этим файлом
  26.         // $this->setFileLog($data, "log.txt");
  27.  
  28.         // проверяем если пришло сообщение
  29.         if (array_key_exists('message', $data)) {
  30.             //tckb пришла команда /start
  31.             if ($data['message']['text'] == "/start") {
  32.                 $this->sendMessage($chat_id, "Приветствую! Загрузите картинку.");
  33.             } elseif (array_key_exists('photo', $data['message'])) {
  34.                 // если пришла картинка то сохраняем ее у себя
  35.                 $text = $this->getPhoto($data['message']['photo'])
  36.                     ? "Спасибо! Можете еще загрузить мне понравилось их сохранять."
  37.                     : "Что-то пошло не так, попробуйте еще раз";
  38.                 // отправляем сообщение о результате  
  39.                 $this->sendMessage($chat_id, $text);
  40.             } else {
  41.                 // если пришло что-то другое
  42.                 $this->sendMessage($chat_id, "Не понимаю команду! Просто загрузите картинку.");
  43.             }
  44.         }
  45.     }
  46.  
  47.     // функция отправки текстового сообщения
  48.     private function sendMessage($chat_id, $text)
  49.     {
  50.         $this->requestToTelegram([
  51.             'chat_id' => $chat_id,
  52.             'text' => $text,
  53.         ], "sendMessage");
  54.     }
  55.  
  56.     // общая функция загрузки картинки
  57.     private function getPhoto($data)
  58.     {
  59.         // берем последнюю картинку в массиве
  60.         $file_id = $data[count($data) - 1]['file_id'];
  61.         // получаем file_path
  62.         $file_path = $this->getPhotoPath($file_id);
  63.         // возвращаем результат загрузки фото
  64.         return $this->copyPhoto($file_path);
  65.     }
  66.  
  67.     // функция получения метонахождения файла
  68.     private function getPhotoPath($file_id) {
  69.         // получаем объект File
  70.         $array = json_decode($this->requestToTelegram(['file_id' => $file_id], "getFile"), TRUE);
  71.         // возвращаем file_path
  72.         return  $array['result']['file_path'];
  73.     }
  74.  
  75.     // копируем фото к себе
  76.     private function copyPhoto($file_path) {
  77.         // ссылка на файл в телеграме
  78.         $file_from_tgrm = "https://api.telegram.org/file/bot".$this->botToken."/".$file_path;
  79.         // достаем расширение файла
  80.         $ext =  end(explode(".", $file_path));
  81.         // назначаем свое имя здесь время_в_секундах.расширение_файла
  82.         $name_our_new_file = time().".".$ext;
  83.         return copy($file_from_tgrm, "img/".$name_our_new_file);
  84.     }
  85.  
  86.     // функция логирования в файл
  87.     private function setFileLog($data, $file)
  88.     {
  89.         $fh = fopen($file, 'a') or die('can\'t open file');
  90.         ((is_array($data)) || (is_object($data))) ? fwrite($fh, print_r($data, TRUE) . "\n") : fwrite($fh, $data . "\n");
  91.         fclose($fh);
  92.     }
  93.  
  94.     /**
  95.      * Парсим что приходит преобразуем в массив
  96.      * @param $data
  97.      * @return mixed
  98.      */
  99.     private function getData($data)
  100.     {
  101.         return json_decode(file_get_contents($data), TRUE);
  102.     }
  103.  
  104.     /** Отправляем запрос в Телеграмм
  105.      * @param $data
  106.      * @param string $type
  107.      * @return mixed
  108.      */
  109.     private function requestToTelegram($data, $type)
  110.     {
  111.         $result = null;
  112.  
  113.         if (is_array($data)) {
  114.             $ch = curl_init();
  115.             curl_setopt($ch, CURLOPT_URL, $this->apiUrl . $this->botToken . '/' . $type);
  116.             curl_setopt($ch, CURLOPT_POST, count($data));
  117.             curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  118.             curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  119.             $result = curl_exec($ch);
  120.             curl_close($ch);
  121.         }
  122.         return $result;
  123.     }
  124. }
Advertisement
Add Comment
Please, Sign In to add comment