Добавлен Guzzle, переписаны под него запросы.
This commit is contained in:
parent
b6d59646cc
commit
bc6d81ea70
|
@ -27,7 +27,8 @@
|
||||||
"psr/log": "1.*",
|
"psr/log": "1.*",
|
||||||
"monolog/monolog": ">=1.6",
|
"monolog/monolog": ">=1.6",
|
||||||
"jasny/error-handler": "^0.2.0",
|
"jasny/error-handler": "^0.2.0",
|
||||||
"hood/accounts": "^0.0.2"
|
"hood/accounts": "^0.0.2",
|
||||||
|
"guzzlehttp/guzzle": "^7.2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpdocumentor/phpdocumentor": ">=2.9",
|
"phpdocumentor/phpdocumentor": ">=2.9",
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "890608b64debcef7c0a1d909dc4bd81e",
|
"content-hash": "6bfb42640d4d673c945e4d28222eb67a",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/guzzle",
|
"name": "guzzlehttp/guzzle",
|
||||||
|
|
|
@ -10,65 +10,65 @@ use hood\vk\core,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LongPoll
|
* LongPoll
|
||||||
*
|
*
|
||||||
* @property string $key Ключ к серверу
|
* @property string $key Ключ к серверу
|
||||||
* @property string $server Сервер
|
* @property string $server Сервер
|
||||||
* @property string $ts Идентификатор последнего события
|
* @property string $ts Идентификатор последнего события
|
||||||
*
|
*
|
||||||
* @method public function __construct(object $robot) Инициализация
|
* @method public function __construct(object $robot) Инициализация
|
||||||
* @method public function get(int $wait = 25) Получить события
|
* @method public function get(int $wait = 25) Получить события
|
||||||
* @method public function handle(callable $function, int $wait = 25) Обработать события
|
* @method public function handle(callable $function, int $wait = 25) Обработать события
|
||||||
*
|
*
|
||||||
* @see https://vk.com/dev/bots_longpoll
|
* @see https://vk.com/dev/bots_longpoll
|
||||||
* @see https://vk.com/dev/groups.getLongPollServer
|
* @see https://vk.com/dev/groups.getLongPollServer
|
||||||
* @see https://vk.com/dev/groups.setLongPollSettings
|
* @see https://vk.com/dev/groups.setLongPollSettings
|
||||||
*
|
*
|
||||||
* @package hood\vk\api
|
* @package hood\vk\api
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*
|
*
|
||||||
* @todo Добавить обработку ошибок ($request['errors];)
|
* @todo Добавить обработку ошибок ($request['errors];)
|
||||||
*/
|
*/
|
||||||
final class longpoll
|
final class longpoll
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Робот
|
* Робот
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
private robot $robot;
|
private robot $robot;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ключ к серверу
|
* Ключ к серверу
|
||||||
*
|
*
|
||||||
* @see $this->get()
|
* @see $this->get()
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
private string $key;
|
private string $key;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Сервер (URL)
|
* Сервер (URL)
|
||||||
*
|
*
|
||||||
* @see $this->get()
|
* @see $this->get()
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
private string $server;
|
private string $server;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Идентификатор последнего события
|
* Идентификатор последнего события
|
||||||
*
|
*
|
||||||
* От него отсчитываются новые, необработанные события
|
* От него отсчитываются новые, необработанные события
|
||||||
*
|
*
|
||||||
* @see $this->get()
|
* @see $this->get()
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
private string $ts;
|
private string $ts;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализация
|
* Инициализация
|
||||||
*
|
*
|
||||||
* @param robot $robot Робот
|
* @param robot $robot Робот
|
||||||
*/
|
*/
|
||||||
public function __construct(robot $robot)
|
public function __construct(robot $robot)
|
||||||
|
@ -85,11 +85,11 @@ final class longpoll
|
||||||
$this->robot = $robot;
|
$this->robot = $robot;
|
||||||
|
|
||||||
// Остановка процессов-дубликатов
|
// Остановка процессов-дубликатов
|
||||||
if (!file_exists(core::init()->path['temp'])) {
|
if (!file_exists(core::init()->path_temp)) {
|
||||||
// Если не существует каталога 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);
|
unlink($lock);
|
||||||
}
|
}
|
||||||
|
@ -97,12 +97,12 @@ final class longpoll
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Установить настройки
|
* Установить настройки
|
||||||
*
|
*
|
||||||
* Полная настройка и активация LongPoll
|
* Полная настройка и активация LongPoll
|
||||||
*
|
*
|
||||||
* @param bool $status = true Активация или деактивация
|
* @param bool $status = true Активация или деактивация
|
||||||
* @param string ...$params Изменяемые параметры
|
* @param string ...$params Изменяемые параметры
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function post(bool $status = true, string ...$params): array
|
public function post(bool $status = true, string ...$params): array
|
||||||
|
@ -134,12 +134,12 @@ final class longpoll
|
||||||
|
|
||||||
if ($param !== 'all') {
|
if ($param !== 'all') {
|
||||||
// Если параметр не указывает на установку всех значений
|
// Если параметр не указывает на установку всех значений
|
||||||
|
|
||||||
// Установка значения
|
// Установка значения
|
||||||
$settings[$param] = $status;
|
$settings[$param] = $status;
|
||||||
} else {
|
} else {
|
||||||
// Иначе установить все значения
|
// Иначе установить все значения
|
||||||
|
|
||||||
// Если передан параметр: установка ВСЕХ значений
|
// Если передан параметр: установка ВСЕХ значений
|
||||||
$settings['message_new'] = $status;
|
$settings['message_new'] = $status;
|
||||||
$settings['message_reply'] = $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 Время ожидания новых событий (в секундах)
|
* @param int $wait Время ожидания новых событий (в секундах)
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function get(int $wait = 25): array
|
public function get(int $wait = 25): array
|
||||||
|
@ -202,40 +202,44 @@ final class longpoll
|
||||||
// Если не инициализирован LongPoll-сервер
|
// Если не инициализирован LongPoll-сервер
|
||||||
|
|
||||||
// Запрос на получение доступа и данных LongPoll-сервера
|
// Запрос на получение доступа и данных LongPoll-сервера
|
||||||
$response = $this->robot->browser()->post('https://api.vk.com/method/groups.getLongPollServer', [
|
echo 'запрос на получение данных лонгполл';
|
||||||
'group_id' => $this->robot->id,
|
$response = json_decode($this->robot->browser->request('POST', 'groups.getLongPollServer', [
|
||||||
'access_token' => $this->robot->key,
|
'form_params' => [
|
||||||
'v' => $this->robot->version
|
'group_id' => $this->robot->id,
|
||||||
])['response'];
|
'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 callable $function Обработка
|
||||||
* @param int $wait Время ожидания новых событий (в секундах)
|
* @param int $wait Время ожидания новых событий (в секундах)
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function handle(callable $function, int $wait = 25): array
|
public function handle(callable $function, int $wait = 25): array
|
||||||
{
|
{
|
||||||
// Файл-блокировщик и PID процесса
|
// Файл-блокировщик и 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();
|
$pid = getmypid();
|
||||||
|
|
||||||
// Создание или пересоздание файла-блокировщика
|
// Создание или пересоздание файла-блокировщика
|
||||||
|
@ -256,16 +260,16 @@ final class longpoll
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($request['response']['updates'])) {
|
if (!empty($request['updates'])) {
|
||||||
// Если получены необработанные события
|
// Если получены необработанные события
|
||||||
|
|
||||||
foreach ($request['response']['updates'] as $update) {
|
foreach ($request['updates'] as $update) {
|
||||||
// Перебор полученных событий
|
// Перебор полученных событий
|
||||||
$function($update);
|
$function($update);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Обновление идентификатора последнего события
|
// Обновление идентификатора последнего события
|
||||||
$this->ts = $request['response']['ts'];
|
$this->ts = $request['ts'];
|
||||||
}
|
}
|
||||||
} while (true);
|
} while (true);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
unset($settings);
|
||||||
|
|
||||||
|
|
|
@ -84,6 +84,7 @@ abstract class robot
|
||||||
*/
|
*/
|
||||||
protected int $messages_mode = 1;
|
protected int $messages_mode = 1;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Конструктор
|
* Конструктор
|
||||||
*
|
*
|
||||||
|
@ -284,7 +285,7 @@ abstract class robot
|
||||||
return $this->browser ?? $this->browser = new browser([
|
return $this->browser ?? $this->browser = new browser([
|
||||||
'base_uri' => 'https://api.vk.com/method/',
|
'base_uri' => 'https://api.vk.com/method/',
|
||||||
'cookies' => true
|
'cookies' => true
|
||||||
]);;
|
]);
|
||||||
} else if ($name === 'proxy') {
|
} else if ($name === 'proxy') {
|
||||||
return $this->proxy;
|
return $this->proxy;
|
||||||
} else if ($name === 'captcha') {
|
} else if ($name === 'captcha') {
|
||||||
|
|
Loading…
Reference in New Issue