Отправить несколько картинок

← К списку тем

Ребята! Только-только начинаю изучать telegram Ботов. Пожалуйста, подскажите, как организовать следующее. Есть папка /img в ней, несколько изображений. Например 1.jpg 2.jpg 3.jpg ....25.jpg.
Необходимо, дабы, по команде /портфолио - бот отправлял бы несколько 2-3 рандомных изображения из указанной папки.

Заранее, спасибо!
Alex Crowley 26.04.2020 в 20:05

Авторизуйтесь через Telegram, чтобы ответить.
Откройте бот @SiteAuthBot, нажмите кнопку Старт/Start. Следуйте инструкциям бота.


Ответы

  • Используйте функцию scandir - получите массив - из него функцией array_rand($array, 3) получите 3 рандомных значения и отправьте медиаГруппу в бот пользователю с этими 3-мя картинками
    iMakeBots 26.04.2020 в 22:10
    • Спасибо, конечно! Но пока - это мне мало о чем говорит. Вот если бы, кусочек, нужного кода - был бы вам очень признателен.
      Alex Crowley 26.04.2020 в 22:14
      • $token = "";
        // путь до директории с картинками относительно этого файла
        $dir = "./img";
        // путь до директории с картинками относительно корня сайта
        // https://ДОМЕН_САЙТА/$path
        $path = "/img/";
        // парсим то что прислал телеграм
        $data = json_decode(file_get_contents('php://input'));
        // проверяем что это тип данных - message
        if ($data->message) {
            // если это старт бота
            if ($data->message->text == "/start") {
                // выводим предложение за=кинуть команду /photos
                query("sendMessage", $token, ['chat_id' => $data->message->chat->id, 'text' => "Hello, send me /photos"]);
            }
            // если это команда /photos
            elseif ($data->message->text == "/photos") {
                // сканируем директорию с картинками - удаляем служебные пути ./ и ../
                $files = array_slice(scandir($dir), 2);
                // если в директории есть файлы
                if (count($files)) {
                    // перебираем их
                    foreach ($files as $key => $file) {
                        // если файл не картинка - удаляем из массива файлов
                        if (is_not_image(__DIR__ . "/" . $dir . "/" . $file)) {
                            unset($files[$key]);
                        }
                    }
                    // если файлы остались то значит они картинки
                    if (count($files)) {
                        // берем в случайном порядке или 2 или 3 шт
                        $rand_img = array_rand($files, rand(2, 3));
                        // готовим контейнер для данных
                        $arrayMedia = [];
                        // перебираем рандомный выбор
                        foreach ($rand_img as $key) {
                            // добавляем в контейнер данные
                            $arrayMedia[] = ['type' => 'photo', 'media' => "https://" . $_SERVER['SERVER_NAME'] . $path . $files[$key]];
                        }
                        // отправляем дейсвтие - картинки загружаются
                        query("sendChatAction", $token, ['chat_id' => $data->message->chat->id, 'action' => 'upload_photo']);
                        // отправляем картинки
                        query("sendMediaGroup", $token, ['chat_id' => $data->message->chat->id, 'media' => json_encode($arrayMedia)]);
                    } else {
                        // нет фоток в файлах
                    }
                } else {
                    // нет файлов в директории
                }
            } else {
                // лишние команды
            }
        } else {
            // не message
        }
        
        // проверка на не картинку
        function is_not_image($file)
        {
            $fi = finfo_open(FILEINFO_MIME_TYPE);
            $mime = (string)finfo_file($fi, $file);
            return strpos($mime, 'image') === false;
        }
        
        // отправляем данные
        function query($method, $token, $fields = array())
        {
            $ch = curl_init('https://api.telegram.org/bot' . $token . '/' . $method);
            curl_setopt_array($ch, array(
                CURLOPT_POST => count($fields),
                CURLOPT_POSTFIELDS => http_build_query($fields),
                CURLOPT_SSL_VERIFYPEER => 0,
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_TIMEOUT => 10
            ));
            $r = json_decode(curl_exec($ch));
            curl_close($ch);
            return $r;
        }
        iMakeBots 27.04.2020 в 12:36
        • Подскажите в чём у меня косяк?
          Вместо картинок хочу отправлять файлы.


          
           $type,
                  'media' => "attach://" . $file,
              ];
          
              $postContent[] = [
                  $file => new CURLFile("https://" . $_SERVER['SERVER_NAME'] . $path . $file)
              ];
          }
          
          $postContent[] = [
              'chat_id' => $chat_id,
              'media'   => json_encode($media),
          ];
          
          echo (json_encode($postContent));
          
          post($url, $postContent);
          function post($url, $postContent)
          {
              $curl = curl_init();
              curl_setopt($curl, CURLOPT_URL, $url);
              curl_setopt($curl, CURLOPT_POSTFIELDS, $postContent);
              curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']);
              $result = curl_exec($curl);
              curl_close($curl);
              return $result;
              // Echo(json_encode($result));
          }
          
          .
          amun ra 02.05.2021 в 22:01