Ещё исправления и тест + нашел мусор Кости

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich 2021-07-27 15:09:33 +10:00
parent 19f5275fe9
commit 864ea8ca6d
5 changed files with 224 additions and 375 deletions

View File

@ -4,21 +4,17 @@ declare(strict_types=1);
namespace mirzaev\vk\api\methods; namespace mirzaev\vk\api\methods;
use Exception;
use mirzaev\vk\robots\robot, use mirzaev\vk\robots\robot,
mirzaev\vk\robots\group; mirzaev\vk\robots\group;
use mirzaev\accounts\vk as account; use mirzaev\accounts\vk as account;
use Exception;
/** /**
* Фотографии (изображения) * Фотографии (изображения)
* *
<<<<<<< HEAD
* public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение
=======
* @method public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение * @method public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4
* *
* @see https://vk.com/dev/photos.getUploadServer * @see https://vk.com/dev/photos.getUploadServer
* @see https://vk.com/dev/messages.getById * @see https://vk.com/dev/messages.getById
@ -31,24 +27,6 @@ use Exception;
final class photos extends method final class photos extends method
{ {
/** /**
<<<<<<< HEAD:hood/vk/system/api/methods/photos.php
* $url
*/
protected $url;
/**
<<<<<<< HEAD
* Сохранить
*
* $robot Робот
* $album_id Альбом
* $group_id Группа
* $caption Описание
* $latitude Географическая широта (-90, 90)
* $longitude Географическая долгота (-180, 180)
=======
=======
>>>>>>> 579e64b087c763b465464b5ee0d14b16a98d17b2:mirzaev/vk/system/api/methods/photos.php
* Создать сообщение * Создать сообщение
* *
* @param robot $robot Робот * @param robot $robot Робот
@ -67,7 +45,6 @@ final class photos extends method
* @param string|null $caption Описание * @param string|null $caption Описание
* @param float|null $latitude Географическая широта (-90, 90) * @param float|null $latitude Географическая широта (-90, 90)
* @param float|null $longitude Географическая долгота (-180, 180) * @param float|null $longitude Географическая долгота (-180, 180)
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4
* *
* @see https://vk.com/dev/photos.save * @see https://vk.com/dev/photos.save
* *
@ -128,24 +105,25 @@ final class photos extends method
} }
/** /**
<<<<<<< HEAD:hood/vk/system/api/methods/photos.php
* Загрузить * Загрузить
* *
* @param Type $var * @param string $images
<<<<<<< HEAD *
=======
* @return void * @return void
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4 *
* @todo Вынести этот мусор за Костей
*/ */
public static function upload(string ...$images): void // public static function upload(string ...$images): void
{ // {
if (count($images) > 5) { // if (count($images) > 5) {
throw new Exception('Запрещено отправлять более 5 фотографий'); // throw new Exception('Запрещено отправлять более 5 фотографий');
} // }
} // }
/** /**
* загрузить * загрузить
*
* @todo Вынести этот мусор за Костей
*/ */
public static function uploadMessage(robot $robot, string $upload_url, string ...$images) public static function uploadMessage(robot $robot, string $upload_url, string ...$images)
{ {
@ -153,21 +131,13 @@ final class photos extends method
} }
/** /**
=======
>>>>>>> 579e64b087c763b465464b5ee0d14b16a98d17b2:mirzaev/vk/system/api/methods/photos.php
* Получить сервер для загрузки изображений * Получить сервер для загрузки изображений
* *
<<<<<<< HEAD * @see https://vk.com/dev/photos.getUploadServer
* $robot Робот *
* $album_id Альбом
* $group_id Группа
=======
* @param robot $robot Робот * @param robot $robot Робот
* @param int|null $album_id Альбом * @param int|null $album_id Альбом
* @param int|group|null $group_id Группа * @param int|group|null $group_id Группа
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4
*
* @see https://vk.com/dev/photos.getUploadServer
* *
* @return array|null Ответ сервера * @return array|null Ответ сервера
*/ */
@ -205,19 +175,8 @@ final class photos extends method
/** /**
* Получить альбомы * Получить альбомы
* *
<<<<<<< HEAD
* $robot Робот
* $album_ids = null Идентификаторы альбомов
* $offset = null Смещение для выборки подмножества
* $count = null Количество для возврата
* $need_system = null Активация возврата системных альбомов
* $need_covers = null Активация возврата поля с обложкой альбома
* $photo_sizes = null Активация специального формата размеров фотографий
*
* @see https://vk.com/dev/photos.getUploadServer * @see https://vk.com/dev/photos.getUploadServer
* *
* Ответ сервера
=======
* @param robot $robot Робот * @param robot $robot Робот
* @param array $album_ids = null Идентификаторы альбомов * @param array $album_ids = null Идентификаторы альбомов
* @param int $offset = null Смещение для выборки подмножества * @param int $offset = null Смещение для выборки подмножества
@ -226,10 +185,7 @@ final class photos extends method
* @param bool $need_covers = null Активация возврата поля с обложкой альбома * @param bool $need_covers = null Активация возврата поля с обложкой альбома
* @param bool $photo_sizes = null Активация специального формата размеров фотографий * @param bool $photo_sizes = null Активация специального формата размеров фотографий
* *
* @see https://vk.com/dev/photos.getUploadServer
*
* @return array Ответ сервера * @return array Ответ сервера
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4
*/ */
public static function getAlbums(robot $robot, array $album_ids = null, int $offset = null, int $count = null, bool $need_system = null, bool $need_covers = null, bool $photo_sizes = null): array public static function getAlbums(robot $robot, array $album_ids = null, int $offset = null, int $count = null, bool $need_system = null, bool $need_covers = null, bool $photo_sizes = null): array
{ {
@ -262,41 +218,8 @@ final class photos extends method
return (array) $request; return (array) $request;
} }
<<<<<<< HEAD:hood/vk/system/api/methods/photos.php
/**
<<<<<<< HEAD
* загрузить фото и получить его id
*
* $robot робот
*
* $img фото
*/
public function sex(robot $robot, $img)
{
if (!isset($this->url)) {
// Получить адрес сервера для загрузки фотографии в личное сообщение
$this->url = json_decode($robot->browser->request('POST', 'photos.getMessagesUploadServer', [
'form_params' => [
'group_id' => $robot->id,
'v' => $robot->version,
'access_token' => $robot->key,
'peer_id' => 0
]
])->getBody()->getContents())->response->upload_url;
}
//загрузить
$response = json_decode($robot->browser->request('POST', $this->url, [
=======
* Загрузить фото и получить его id
*
* $robot робот
=======
/** /**
* Получить адрес сервера сообщений * Получить адрес сервера сообщений
>>>>>>> 579e64b087c763b465464b5ee0d14b16a98d17b2:mirzaev/vk/system/api/methods/photos.php
* *
* @return object * @return object
*/ */
@ -330,12 +253,7 @@ final class photos extends method
public function upload($photo, string $url): object public function upload($photo, string $url): object
{ {
// Загрузить фото // Загрузить фото
<<<<<<< HEAD:hood/vk/system/api/methods/photos.php
$response = json_decode($this->robot->browser->request('POST', $url, [
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4
=======
$request = json_decode($this->robot->browser->request('POST', $url, [ $request = json_decode($this->robot->browser->request('POST', $url, [
>>>>>>> 579e64b087c763b465464b5ee0d14b16a98d17b2:mirzaev/vk/system/api/methods/photos.php
'multipart' => [ 'multipart' => [
[ [
'Content-type' => 'multipart/form-data', 'Content-type' => 'multipart/form-data',
@ -345,25 +263,6 @@ final class photos extends method
] ]
])->getBody()->getContents()); ])->getBody()->getContents());
<<<<<<< HEAD:hood/vk/system/api/methods/photos.php
<<<<<<< HEAD
//сохранить
$response = json_decode($robot->browser->request('POST', 'photos.saveMessagesPhoto', [
'form_params' => [
'group_id' => $robot->id,
'v' => $robot->version,
'access_token' => $robot->key,
'server' => $response->server,
'photo' => $response->photo,
'hash' => $response->hash
]
])->getBody()->getContents());
return 'photo' . $response->response[0]->owner_id . '_' . $response->response[0]->id;
}
}
=======
=======
// Если в ответе ошибка // Если в ответе ошибка
if (isset($request->error)) { if (isset($request->error)) {
throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code); throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code);
@ -389,7 +288,6 @@ final class photos extends method
//Загрузить фото //Загрузить фото
$response = $this->upload($pathPhoto, $url); $response = $this->upload($pathPhoto, $url);
>>>>>>> 579e64b087c763b465464b5ee0d14b16a98d17b2:mirzaev/vk/system/api/methods/photos.php
// Реинициализация // Реинициализация
$this->robot->api->reinit(); $this->robot->api->reinit();
@ -419,7 +317,5 @@ final class photos extends method
$request; $request;
// Ссылка на фото // Ссылка на фото
return 'photo' . $request->response[0]->owner_id . '_' . $request->response[0]->id; return 'photo' . $request->response[0]->owner_id . '_' . $request->response[0]->id;
} }
} }
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4

View File

@ -14,8 +14,6 @@ abstract class logger
{ {
/** /**
* Экземпляр класса журналиста * Экземпляр класса журналиста
*
* @var logger
*/ */
public static $logger; public static $logger;

View File

@ -13,16 +13,6 @@ use Exception;
/** /**
* Робот-группа * Робот-группа
* *
<<<<<<< HEAD
* $longpoll LongPoll-сессия
*
* public function __set($name, $value) Запись свойства
* public function __get($name) Чтение свойства
* public function __isset($name) Проверка на инициализированность свойства
*
* hood\vk\robots
* Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
=======
* @property longpoll $longpoll LongPoll-сессия * @property longpoll $longpoll LongPoll-сессия
* *
* @method public function __set($name, $value) Запись свойства * @method public function __set($name, $value) Запись свойства
@ -31,35 +21,23 @@ use Exception;
* *
* @package mirzaev\vk\robots * @package mirzaev\vk\robots
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su> * @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4
*/ */
final class group extends robot final class group extends robot
{ {
/** /**
<<<<<<< HEAD
* $longpoll LongPoll-сессия
=======
* @var longpoll $longpoll LongPoll-сессия * @var longpoll $longpoll LongPoll-сессия
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4
*/ */
protected longpoll $longpoll; protected longpoll $longpoll;
/** /**
* Запись свойства * Запись свойства
* *
<<<<<<< HEAD
* $name Название
* $value Значение
*
* @see hood\vk\robots\robot Наследуемый метод
=======
* @param string $name Название * @param string $name Название
* @param mixed $value Значение * @param mixed $value Значение
* *
* @see mirzaev\vk\robots\robot Наследуемый метод * @see mirzaev\vk\robots\robot Наследуемый метод
* *
* @return void * @return void
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4
*/ */
public function __set(string $name, mixed $value): void public function __set(string $name, mixed $value): void
{ {
@ -78,17 +56,11 @@ final class group extends robot
/** /**
* Чтение свойства * Чтение свойства
* *
<<<<<<< HEAD
* $name Название
*
* @see hood\vk\robots\robot Наследуемый метод
=======
* @param string $name Название * @param string $name Название
* *
* @see mirzaev\vk\robots\robot Наследуемый метод * @see mirzaev\vk\robots\robot Наследуемый метод
* *
* @return mixed * @return mixed
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4
*/ */
public function __get(string $name): mixed public function __get(string $name): mixed
{ {
@ -111,19 +83,11 @@ final class group extends robot
/** /**
* Проверка на инициализированность свойства * Проверка на инициализированность свойства
* *
<<<<<<< HEAD
* $name Название
*
* @return mixed
*/
public function __isset(string $name)
=======
* @param string $name Название * @param string $name Название
* *
* @return mixed * @return mixed
*/ */
public function __isset(string $name): bool public function __isset(string $name): bool
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4
{ {
try { try {
return parent::__isset($name); return parent::__isset($name);

View File

@ -6,11 +6,11 @@ namespace mirzaev\vk\robots;
use Exception; use Exception;
use mirzaev\vk\core; use mirzaev\vk\core,
use mirzaev\vk\proxies\proxy; mirzaev\vk\proxies\proxy,
use mirzaev\vk\captcha\captcha; mirzaev\vk\captcha\captcha,
use mirzaev\vk\api\settings as api; mirzaev\vk\api\settings as api,
use mirzaev\vk\api\methods\method; mirzaev\vk\api\methods\method;
use mirzaev\accounts\vk as account; use mirzaev\accounts\vk as account;
@ -45,232 +45,232 @@ use GuzzleHttp\Client as browser;
*/ */
abstract class robot abstract class robot
{ {
/** /**
* Сессия * Сессия
*/ */
protected int $session; protected int $session;
/** /**
* Аккаунт * Аккаунт
*/ */
private account $account; private account $account;
/** /**
* Прокси * Прокси
*/ */
protected proxy $proxy; protected proxy $proxy;
/** /**
* Обработчик капчи * Обработчик капчи
*/ */
protected captcha $captcha; protected captcha $captcha;
/** /**
* $messages_mode Режим отправки сообщений * $messages_mode Режим отправки сообщений
*/ */
protected int $messages_mode = 1; protected int $messages_mode = 1;
/** /**
* Конструктор * Конструктор
* *
* @param int|null $id Идентификатор * @param int|null $id Идентификатор
* @param string|null $key Ключ * @param string|null $key Ключ
*/ */
public function __construct( public function __construct(
protected int|null $id = null, protected int|null $id = null,
protected string|null $key = null protected string|null $key = null
) { ) {
// Инициализация ядра // Инициализация ядра
$core = core::init(); $core = core::init();
// Идентификация робота // Идентификация робота
$this->id = $id ?? $core->robots + 1; $this->id = $id ?? $core->robots + 1;
// Регистрация робота в ядре // Регистрация робота в ядре
$core->write($this->id, $this); $core->write($this->id, $this);
// Идентификация сессии робота // Идентификация сессии робота
$this->session = count($core->read($this->id)); $this->session = count($core->read($this->id));
} }
/** /**
* Инициализация ключа * Инициализация ключа
* *
* @param string $key Ключ * @param string $key Ключ
* *
* @return self * @return self
*/ */
public function key(string $key): self public function key(string $key): self
{ {
$this->__set('key', $key); $this->__set('key', $key);
return $this; return $this;
} }
/** /**
* Инициализация аккаунта * Инициализация аккаунта
* *
* @param account $account Аккаунт * @param account $account Аккаунт
* *
* @return self * @return self
*/ */
public function account(account $account): self public function account(account $account): self
{ {
$this->__set('account', $account); $this->__set('account', $account);
return $this; return $this;
} }
/** /**
* Инициализация прокси * Инициализация прокси
* *
* @param proxy $proxy Прокси * @param proxy $proxy Прокси
* *
* @return self * @return self
*/ */
public function proxy(proxy $proxy): self public function proxy(proxy $proxy): self
{ {
$this->__set('proxy', $proxy); $this->__set('proxy', $proxy);
return $this; return $this;
} }
/** /**
* Инициализация обработчика капчи * Инициализация обработчика капчи
* *
* @param captcha $captcha Обработчик капчи * @param captcha $captcha Обработчик капчи
* *
* @return self * @return self
*/ */
public function captcha(captcha $captcha): self public function captcha(captcha $captcha): self
{ {
$this->__set('captcha', $captcha); $this->__set('captcha', $captcha);
return $this; return $this;
} }
/** /**
* Записать свойство * Записать свойство
* *
* @param string $name Название * @param string $name Название
* @param mixed $value Значение * @param mixed $value Значение
* *
* @return void * @return void
*/ */
public function __set(string $name, mixed $value): void public function __set(string $name, mixed $value): void
{ {
match ($name) { match ($name) {
'id' => isset($this->id) ? throw new Exception('Запрещено перезаписывать идентификатор', 500) : $this->id = (int) $value, 'id' => isset($this->id) ? throw new Exception('Запрещено перезаписывать идентификатор', 500) : $this->id = (int) $value,
'session' => isset($this->session) ? throw new Exception('Запрещено перезаписывать сессию', 500) : $this->session = (int) $value, 'session' => isset($this->session) ? throw new Exception('Запрещено перезаписывать сессию', 500) : $this->session = (int) $value,
'key' => isset($this->key) ? throw new Exception('Запрещено перезаписывать ключ', 500) : $this->key = (string) $value, 'key' => isset($this->key) ? throw new Exception('Запрещено перезаписывать ключ', 500) : $this->key = (string) $value,
'api' => isset($this->api) ? throw new Exception('Запрещено перезаписывать API', 500) : $this->api = $value, 'api' => isset($this->api) ? throw new Exception('Запрещено перезаписывать API', 500) : $this->api = $value,
'account' => isset($this->account) ? throw new Exception('Запрещено перезаписывать аккаунт', 500) : $this->account = $value, 'account' => isset($this->account) ? throw new Exception('Запрещено перезаписывать аккаунт', 500) : $this->account = $value,
'browser' => isset($this->browser) ? throw new Exception('Запрещено перезаписывать браузер', 500) : $this->browser = $value, 'browser' => isset($this->browser) ? throw new Exception('Запрещено перезаписывать браузер', 500) : $this->browser = $value,
'proxy' => $this->proxy = $value, 'proxy' => $this->proxy = $value,
'captcha' => $this->captcha = $value, 'captcha' => $this->captcha = $value,
'messages_new' => $this->messages_new = (int) $value, 'messages_new' => $this->messages_new = (int) $value,
default => throw new Exception("Свойство $name не найдено", 404) default => throw new Exception("Свойство $name не найдено", 404)
}; };
} }
/** /**
* Прочитать свойство * Прочитать свойство
* *
* @param string $name Название * @param string $name Название
* *
* @return mixed * @return mixed
*/ */
public function __get(string $name): mixed public function __get(string $name): mixed
{ {
return match ($name) { return match ($name) {
'id' => $this->id ?? throw new Exception('Идентификатор не инициализирован', 500), 'id' => $this->id ?? throw new Exception('Идентификатор не инициализирован', 500),
'session' => $this->session ?? throw new Exception('Сессия не инициализирована', 500), 'session' => $this->session ?? throw new Exception('Сессия не инициализирована', 500),
'key' => $this->key ?? throw new Exception('Ключ не инициализирован', 500), 'key' => $this->key ?? throw new Exception('Ключ не инициализирован', 500),
'api' => $this->api ?? $this->api = new api($this), 'api' => $this->api ?? $this->api = new api($this),
'account' => $this->account ?? throw new Exception('Аккаунт не инициализирован', 500), 'account' => $this->account ?? throw new Exception('Аккаунт не инициализирован', 500),
'browser' => $this->browser ?? $this->browser = new browser([ 'browser' => $this->browser ?? $this->browser = new browser([
'base_uri' => 'https://api.vk.com/method/', 'base_uri' => 'https://api.vk.com/method/',
'cookies' => true 'cookies' => true
]), ]),
'proxy' => $this->proxy, 'proxy' => $this->proxy,
'captcha' => $this->captcha, 'captcha' => $this->captcha,
'messages_new' => $this->messages_new, 'messages_new' => $this->messages_new,
default => throw new Exception("Свойство $name не найдено", 404) default => throw new Exception("Свойство $name не найдено", 404)
}; };
} }
/** /**
* Проверить свойство на инициализированность * Проверить свойство на инициализированность
* *
* @param string $name Название * @param string $name Название
* *
* @return mixed * @return mixed
*/ */
public function __isset(string $name): bool public function __isset(string $name): bool
{ {
return match ($name) { return match ($name) {
'id' => isset($this->id), 'id' => isset($this->id),
'session' => isset($this->session), 'session' => isset($this->session),
'key' => isset($this->key), 'key' => isset($this->key),
'account' => isset($this->account), 'account' => isset($this->account),
'api' => isset($this->api), 'api' => isset($this->api),
'browser' => isset($this->browser), 'browser' => isset($this->browser),
'proxy' => isset($this->proxy), 'proxy' => isset($this->proxy),
'captcha' => isset($this->captcha), 'captcha' => isset($this->captcha),
'messages_new' => isset($this->messages_new), 'messages_new' => isset($this->messages_new),
default => throw new Exception("Свойство $name не найдено", 404) default => throw new Exception("Свойство $name не найдено", 404)
}; };
} }
/** /**
* Вызвать метод * Вызвать метод
* *
* Ищет класс описывающий метод API ВКонтакте, * Ищет класс описывающий метод API ВКонтакте,
* создаёт и возвращает его объект * создаёт и возвращает его объект
* *
* @param string $method Метод * @param string $method Метод
* @param array $params Параметры * @param array $params Параметры
* *
* @return method * @return method
*/ */
public function __call(string $method, array $params): method public function __call(string $method, array $params): method
{ {
if (class_exists($class = '\\mirzaev\\vk\\api\\methods\\' . $method . 's')) { if (class_exists($class = '\\mirzaev\\vk\\api\\methods\\' . $method . 's')) {
// Если найден класс реализующий запрошенный метод // Если найден класс реализующий запрошенный метод
return new $class($this, ...$params); return new $class($this, ...$params);
} }
throw new Exception("Метод $method не найден", 404); throw new Exception("Метод $method не найден", 404);
} }
/** /**
* Вызвать статический метод * Вызвать статический метод
* *
* Ищет класс описывающий метод API ВКонтакте, * Ищет класс описывающий метод API ВКонтакте,
* создаёт и возвращает его объект * создаёт и возвращает его объект
* *
* @param string $method Метод * @param string $method Метод
* @param array $params Параметры * @param array $params Параметры
* *
* @return method * @return method
*/ */
public static function __callStatic(string $method, array $params): method public static function __callStatic(string $method, array $params): method
{ {
if (class_exists($class = '\\mirzaev\\vk\\api\\methods\\' . $method . 's')) { if (class_exists($class = '\\mirzaev\\vk\\api\\methods\\' . $method . 's')) {
return $class(self, ...$params); return $class(self, ...$params);
} }
throw new Exception("Метод $method не найден", 404); throw new Exception("Метод $method не найден", 404);
} }
/** /**
* Конвертировать в строку * Конвертировать в строку
* *
* @return string * @return string
*/ */
public function __toString(): string public function __toString(): string
{ {
return (string) $this->id; return (string) $this->id;
} }
} }

View File

@ -27,15 +27,6 @@ trait singleton
/** /**
* Инициализация * Инициализация
<<<<<<< HEAD:hood/vk/system/traits/singleton.php
<<<<<<< HEAD
=======
*
=======
*
>>>>>>> 579e64b087c763b465464b5ee0d14b16a98d17b2:mirzaev/vk/system/traits/singleton.php
* @return self
>>>>>>> a45b5c327511a74d1fae5ab0e3a1dcc68e7dc3b4
*/ */
public static function init(): self public static function init(): self
{ {