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

← К списку тем

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