From bc6d81ea709a3a13c265a7f1184f89ada573d548 Mon Sep 17 00:00:00 2001 From: Kostya Kalimagin Date: Sun, 3 Jan 2021 16:59:35 +0800 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20Guzzle,=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D1=8B=20=D0=BF=D0=BE=D0=B4=20=D0=BD=D0=B5=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 3 +- composer.lock | 2 +- hood/vk/system/api/longpoll.php | 86 +++++++++++++------------ hood/vk/system/api/methods/messages.php | 4 +- hood/vk/system/robots/robot.php | 3 +- 5 files changed, 52 insertions(+), 46 deletions(-) diff --git a/composer.json b/composer.json index 3c0fbcf..34babcf 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,8 @@ "psr/log": "1.*", "monolog/monolog": ">=1.6", "jasny/error-handler": "^0.2.0", - "hood/accounts": "^0.0.2" + "hood/accounts": "^0.0.2", + "guzzlehttp/guzzle": "^7.2" }, "require-dev": { "phpdocumentor/phpdocumentor": ">=2.9", diff --git a/composer.lock b/composer.lock index a9f0c85..c6d4d96 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "890608b64debcef7c0a1d909dc4bd81e", + "content-hash": "6bfb42640d4d673c945e4d28222eb67a", "packages": [ { "name": "guzzlehttp/guzzle", diff --git a/hood/vk/system/api/longpoll.php b/hood/vk/system/api/longpoll.php index 9e18fa8..2354399 100644 --- a/hood/vk/system/api/longpoll.php +++ b/hood/vk/system/api/longpoll.php @@ -10,65 +10,65 @@ use hood\vk\core, /** * LongPoll - * + * * @property string $key Ключ к серверу * @property string $server Сервер * @property string $ts Идентификатор последнего события - * + * * @method public function __construct(object $robot) Инициализация * @method public function get(int $wait = 25) Получить события * @method public function handle(callable $function, int $wait = 25) Обработать события - * + * * @see https://vk.com/dev/bots_longpoll * @see https://vk.com/dev/groups.getLongPollServer * @see https://vk.com/dev/groups.setLongPollSettings - * + * * @package hood\vk\api * @author Arsen Mirzaev Tatyano-Muradovich - * + * * @todo Добавить обработку ошибок ($request['errors];) */ final class longpoll { /** * Робот - * + * * @var string */ private robot $robot; /** * Ключ к серверу - * + * * @see $this->get() - * + * * @var string */ private string $key; /** * Сервер (URL) - * + * * @see $this->get() - * + * * @var string */ private string $server; /** * Идентификатор последнего события - * + * * От него отсчитываются новые, необработанные события - * + * * @see $this->get() - * + * * @var string */ private string $ts; /** * Инициализация - * + * * @param robot $robot Робот */ public function __construct(robot $robot) @@ -85,11 +85,11 @@ final class longpoll $this->robot = $robot; // Остановка процессов-дубликатов - if (!file_exists(core::init()->path['temp'])) { + if (!file_exists(core::init()->path_temp)) { // Если не существует каталога temp, то создать - mkdir(core::init()->path['temp'], 0775, true); + mkdir(core::init()->path_temp, 0775, true); } - if (file_exists($lock = core::init()->path['temp'] . '/' . $this->robot->id . '_' . (int) $this->robot->session . '.longpoll')) { + if (file_exists($lock = core::init()->path_temp . '/' . $this->robot->id . '_' . (int) $this->robot->session . '.longpoll')) { // Если существует файл-блокировщик, то удалить его unlink($lock); } @@ -97,12 +97,12 @@ final class longpoll /** * Установить настройки - * + * * Полная настройка и активация LongPoll - * + * * @param bool $status = true Активация или деактивация * @param string ...$params Изменяемые параметры - * + * * @return array */ public function post(bool $status = true, string ...$params): array @@ -134,12 +134,12 @@ final class longpoll if ($param !== 'all') { // Если параметр не указывает на установку всех значений - + // Установка значения $settings[$param] = $status; } else { // Иначе установить все значения - + // Если передан параметр: установка ВСЕХ значений $settings['message_new'] = $status; $settings['message_reply'] = $status; @@ -186,14 +186,14 @@ final class longpoll } } - return $this->robot->browser()->post('https://api.vk.com/method/groups.setLongPollSettings', $settings); + return $this->robot->browser->request('POST', 'groups.setLongPollSettings', $settings); } /** * Получить события - * + * * @param int $wait Время ожидания новых событий (в секундах) - * + * * @return array */ public function get(int $wait = 25): array @@ -202,40 +202,44 @@ final class longpoll // Если не инициализирован LongPoll-сервер // Запрос на получение доступа и данных LongPoll-сервера - $response = $this->robot->browser()->post('https://api.vk.com/method/groups.getLongPollServer', [ - 'group_id' => $this->robot->id, - 'access_token' => $this->robot->key, - 'v' => $this->robot->version - ])['response']; + echo 'запрос на получение данных лонгполл'; + $response = json_decode($this->robot->browser->request('POST', 'groups.getLongPollServer', [ + 'form_params' => [ + 'group_id' => $this->robot->id, + 'v' => $this->robot->version, + 'access_token' => $this->robot->key + ], + + ])->getBody()->getContents())->response; // Ключ доступа - $this->key = $response['key']; + $this->key = $response->key; // Сервер хранящий события - $this->server = $response['server']; + $this->server = $response->server; // Идентификатор последнего события - $this->ts = $response['ts']; + $this->ts = $response->ts; } // Запрос на получение событий - return $this->robot->browser()->post($this->server . '?act=a_check&key=' . $this->key . '&ts=' . $this->ts . '&wait=' . $wait); + return json_decode($this->robot->browser->post($this->server . '?act=a_check&key=' . $this->key . '&ts=' . $this->ts . '&wait=' . $wait)->getBody()->getContents(), true); } /** * Обработать события - * + * * Получает и обрабатывает события - * + * * @param callable $function Обработка * @param int $wait Время ожидания новых событий (в секундах) - * + * * @return array */ public function handle(callable $function, int $wait = 25): array { // Файл-блокировщик и PID процесса - $lock = core::init()->path['temp'] . '/' . $this->robot->id . '_' . (int) $this->robot->session . '.longpoll'; + $lock = core::init()->path_temp . '/' . $this->robot->id . '_' . (int) $this->robot->session . '.longpoll'; $pid = getmypid(); // Создание или пересоздание файла-блокировщика @@ -256,16 +260,16 @@ final class longpoll break; } - if (!empty($request['response']['updates'])) { + if (!empty($request['updates'])) { // Если получены необработанные события - foreach ($request['response']['updates'] as $update) { + foreach ($request['updates'] as $update) { // Перебор полученных событий $function($update); } // Обновление идентификатора последнего события - $this->ts = $request['response']['ts']; + $this->ts = $request['ts']; } } while (true); diff --git a/hood/vk/system/api/methods/messages.php b/hood/vk/system/api/methods/messages.php index 759bdec..e8221ea 100644 --- a/hood/vk/system/api/methods/messages.php +++ b/hood/vk/system/api/methods/messages.php @@ -153,8 +153,8 @@ final class messages extends method } // Запрос - $request = $this->robot->browser->request('POST', 'messages.send', $settings); - + $request = $this->robot->browser->request('POST', 'messages.send', ['form_params' => $settings]); + // Очистка unset($settings); diff --git a/hood/vk/system/robots/robot.php b/hood/vk/system/robots/robot.php index bda383b..a0e0a2e 100644 --- a/hood/vk/system/robots/robot.php +++ b/hood/vk/system/robots/robot.php @@ -84,6 +84,7 @@ abstract class robot */ protected int $messages_mode = 1; + /** * Конструктор * @@ -284,7 +285,7 @@ abstract class robot return $this->browser ?? $this->browser = new browser([ 'base_uri' => 'https://api.vk.com/method/', 'cookies' => true - ]);; + ]); } else if ($name === 'proxy') { return $this->proxy; } else if ($name === 'captcha') {