From 07a9bb1ef6e479449ba89c14f4eee27c35011b3c Mon Sep 17 00:00:00 2001 From: Kostya Kalimagin Date: Wed, 20 Jan 2021 23:00:12 +0800 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=20?= =?UTF-8?q?=D0=BD=D0=B0=20php=208,=20=D0=A4=D0=BE=D1=82=D0=BE=20=D1=81?= =?UTF-8?q?=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20beta,=20?= =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hood/vk/system/api/longpoll.php | 52 +++----- hood/vk/system/api/methods/messages.php | 32 ++--- hood/vk/system/api/methods/method.php | 16 +-- hood/vk/system/api/methods/photos.php | 114 ++++++++++++------ hood/vk/system/core.php | 121 ++++++------------- hood/vk/system/robots/group.php | 38 +++--- hood/vk/system/robots/robot.php | 153 ++++++++---------------- hood/vk/system/traits/singleton.php | 2 - 8 files changed, 225 insertions(+), 303 deletions(-) diff --git a/hood/vk/system/api/longpoll.php b/hood/vk/system/api/longpoll.php index 8593b0c..73b595e 100644 --- a/hood/vk/system/api/longpoll.php +++ b/hood/vk/system/api/longpoll.php @@ -11,13 +11,13 @@ use hood\vk\core, /** * LongPoll * - * @property string $key Ключ к серверу - * @property string $server Сервер - * @property string $ts Идентификатор последнего события + * $key Ключ к серверу + * $server Сервер + * $ts Идентификатор последнего события * - * @method public function __construct(object $robot) Инициализация - * @method public function get(int $wait = 25) Получить события - * @method public function handle(callable $function, int $wait = 25) Обработать события + * public function __construct(object $robot) Инициализация + * public function get(int $wait = 25) Получить события + * public function handle(callable $function, int $wait = 25) Обработать события * * @see https://vk.com/dev/bots_longpoll * @see https://vk.com/dev/groups.getLongPollServer @@ -34,8 +34,6 @@ final class longpoll * Ключ к серверу * * @see $this->get() - * - * @var string */ private string $key; @@ -43,8 +41,6 @@ final class longpoll * Сервер (URL) * * @see $this->get() - * - * @var string */ private string $server; @@ -54,27 +50,23 @@ final class longpoll * От него отсчитываются новые, необработанные события * * @see $this->get() - * - * @var string */ private string $ts; /** * Инициализация * - * @param robot $robot Робот + * $robot Робот */ public function __construct(private robot $robot) { // Инициализация робота - if (!isset($robot->id)) { - throw new Exception('Необходимо указать идентификатор ВКонтакте'); - } else if (!isset($robot->key)) { - throw new Exception('Необходимо указать ключ для доступа к LongPoll'); - } else if (!isset($robot->version)) { - throw new Exception('Необходимо указать версию используемого API ВКонтакте'); - } - + match (true) { + !isset($robot->id) => throw new Exception('Необходимо указать идентификатор ВКонтакте'), + !isset($robot->key) => throw new Exception('Необходимо указать ключ для доступа к LongPoll'), + !isset($robot->version) => throw new Exception('Необходимо указать версию используемого API ВКонтакте'), + default => null + }; // Остановка процессов-дубликатов if (!file_exists(core::init()->path_temp)) { @@ -92,10 +84,8 @@ final class longpoll * * Полная настройка и активация LongPoll * - * @param bool $status = true Активация или деактивация - * @param string ...$params Изменяемые параметры - * - * @return array + * $status = true Активация или деактивация + * ...$params Изменяемые параметры */ public function post(bool $status = true, string ...$params): array { @@ -184,9 +174,7 @@ final class longpoll /** * Получить события * - * @param int $wait Время ожидания новых событий (в секундах) - * - * @return array + * $wait Время ожидания новых событий (в секундах) */ public function get(int $wait = 25): array { @@ -222,10 +210,8 @@ final class longpoll * * Получает и обрабатывает события * - * @param callable $function Обработка - * @param int $wait Время ожидания новых событий (в секундах) - * - * @return array + * $function Обработка + * $wait Время ожидания новых событий (в секундах) */ public function handle(callable $function, int $wait = 25): array { @@ -269,7 +255,7 @@ final class longpoll public function __destruct() { - 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); } diff --git a/hood/vk/system/api/methods/messages.php b/hood/vk/system/api/methods/messages.php index 64cbfa3..5db7728 100644 --- a/hood/vk/system/api/methods/messages.php +++ b/hood/vk/system/api/methods/messages.php @@ -11,7 +11,7 @@ use hood\vk\robots\robot, /** * Сообщение * - * @method public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение + * public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение * * @see https://vk.com/dev/messages.send * @see https://vk.com/dev/messages.getById @@ -24,7 +24,7 @@ use hood\vk\robots\robot, final class messages extends method { /** - * @param int $mode Режим отправки + * $mode Режим отправки */ protected int $mode = 1; @@ -33,10 +33,10 @@ final class messages extends method * * Если переданы все параметры, то сразу отправляет * - * @param robot $robot Робот - * @param string $message Текст - * @param int|string|array|null $destination Получатель - * @param array $attachments Вложения + * $robot Робот + * $message Текст + * $destination Получатель + * $attachments Вложения * * @return self */ @@ -53,11 +53,11 @@ final class messages extends method /** * Отправить сообщение * - * @param int|string|array $destination Получатель + * $destination Получатель * * @see https://vk.com/dev/messages.send * - * @return array Ответ сервера + * Ответ сервера */ public function send(int|string|array $destination): array { @@ -99,7 +99,8 @@ final class messages extends method // Фильтрация вложений $forward_messages = []; foreach ($this->attachments as &$attachment) { - if (iconv_substr(str: $attachment, offset: 0, length: 7, charset: "UTF-8") === 'message') { + //var_dump($attachment); + if (iconv_substr($attachment, 0, 7, "UTF-8") === 'message') { // Если среди вложений найдено сообщение для пересылки $forward_messages[] = $attachment; unset($attachment); @@ -108,12 +109,15 @@ final class messages extends method if (!empty($forward_messages)) { // Если есть пересылаемые сообщения - $settings['forward_messages'] = implode(glue: ',', pieces: $forward_messages); + $settings['forward_messages'] = implode(',', $forward_messages); } - if (!empty($attachments)) { + //var_dump($attachments); + if (!empty($this->attachments)) { // Если есть вложения - $settings['attachment'] = implode(glue: ',', pieces: $attachments); + //echo 'lol'; + $settings['attachment'] = implode(',', $this->attachments); + //var_dump($settings['attachment']); } // Запрос @@ -158,7 +162,7 @@ final class messages extends method /** * Получить информацию о сообщении * - * @return array Информация о сообщении + * Информация о сообщении */ public function info(): array { @@ -167,7 +171,7 @@ final class messages extends method // Робот-группа $this->robot instanceof group => $settings['access_token'] = $this->robot->key, // Робот-пользователь - $this->robot instanceof User => $settings['access_token'] = $this->robot->key + $this->robot instanceof User => $settings['access_token'] = $this->robot->key, }; // Цель отправки diff --git a/hood/vk/system/api/methods/method.php b/hood/vk/system/api/methods/method.php index 7caf90c..cbf0eb8 100644 --- a/hood/vk/system/api/methods/method.php +++ b/hood/vk/system/api/methods/method.php @@ -9,10 +9,10 @@ use hood\vk\robots\robot; /** * Абстракция метода API * - * @method protected static put(string $url, ...$params) Создать - * @method protected static post(string $url, ...$params) Изменить - * @method protected static get(string $url, ...$params) Получить - * @method protected static delete(string $url, ...$params) Удалить + * protected static put(string $url, ...$params) Создать + * protected static post(string $url, ...$params) Изменить + * protected static get(string $url, ...$params) Получить + * protected static delete(string $url, ...$params) Удалить * * @package hood\vk\api\methods * @author Arsen Mirzaev Tatyano-Muradovich @@ -22,7 +22,7 @@ abstract class method /** * Создать * - * @return array Ответ сервера + * Ответ сервера */ public static function put(): array { @@ -32,7 +32,7 @@ abstract class method /** * Изменить * - * @return array Ответ сервера + * Ответ сервера */ public static function post(): array { @@ -42,7 +42,7 @@ abstract class method /** * Получить * - * @return array Ответ сервера + * Ответ сервера */ public static function get(): array { @@ -52,7 +52,7 @@ abstract class method /** * Удалить * - * @return array Ответ сервера + * Ответ сервера */ public static function delete(): array { diff --git a/hood/vk/system/api/methods/photos.php b/hood/vk/system/api/methods/photos.php index 1a53709..b88c258 100644 --- a/hood/vk/system/api/methods/photos.php +++ b/hood/vk/system/api/methods/photos.php @@ -14,7 +14,7 @@ use Exception; /** * Фотографии (изображения) * - * @method public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение + * public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение * * @see https://vk.com/dev/photos.getUploadServer * @see https://vk.com/dev/messages.getById @@ -24,23 +24,28 @@ use Exception; * * @todo Добавить обработку ошибок ($request['errors];) */ -final class photos +final class photos extends method { + /** + * $url + */ + protected $url; + /** * Сохранить * - * @param robot $robot Робот - * @param int $album_id Альбом - * @param int|null $group_id Группа - * @param string|null $caption Описание - * @param float|null $latitude Географическая широта (-90, 90) - * @param float|null $longitude Географическая долгота (-180, 180) + * $robot Робот + * $album_id Альбом + * $group_id Группа + * $caption Описание + * $latitude Географическая широта (-90, 90) + * $longitude Географическая долгота (-180, 180) * * @see https://vk.com/dev/photos.save * * @return array|null Ответ сервера */ - public static function save(robot $robot, int $album_id, array $images,string $upload_url = null, string|null $caption = null, int|null $group_id = null, float|null $latitude = null, float|null $longitude = null): ?array + public static function save(robot $robot, int $album_id, array $images, string $upload_url = null, string|null $caption = null, int|null $group_id = null, float|null $latitude = null, float|null $longitude = null): ?array { if (isset($robot->account)) { // Если инициализирован аккаунт @@ -98,40 +103,28 @@ final class photos * Загрузить * * @param Type $var - * @return void */ - public static function upload(string ...$images) + public static function upload(string ...$images): void { if (count($images) > 5) { throw new Exception('Запрещено отправлять более 5 фотографий'); } - - } /** - * загрузить фото сообщение + * загрузить */ public static function uploadMessage(robot $robot, string $upload_url, string ...$images) { return $robot->browser->api($upload_url, ...$images); } - /** - * Отправить фото сообщение - */ - public function sendPhoto(robot $robot, string $message = '', $destination, $photo) - { - $robot->message(robot: $robot,message: $message, destination: $destination,attachments: $photo); - } - - /** * Получить сервер для загрузки изображений * - * @param robot $robot Робот - * @param int|null $album_id Альбом - * @param int|group|null $group_id Группа + * $robot Робот + * $album_id Альбом + * $group_id Группа * * @see https://vk.com/dev/photos.getUploadServer * @@ -171,17 +164,17 @@ final class photos /** * Получить альбомы * - * @param robot $robot Робот - * @param array $album_ids = null Идентификаторы альбомов - * @param int $offset = null Смещение для выборки подмножества - * @param int $count = null Количество для возврата - * @param bool $need_system = null Активация возврата системных альбомов - * @param bool $need_covers = null Активация возврата поля с обложкой альбома - * @param bool $photo_sizes = null Активация специального формата размеров фотографий + * $robot Робот + * $album_ids = null Идентификаторы альбомов + * $offset = null Смещение для выборки подмножества + * $count = null Количество для возврата + * $need_system = null Активация возврата системных альбомов + * $need_covers = null Активация возврата поля с обложкой альбома + * $photo_sizes = null Активация специального формата размеров фотографий * * @see https://vk.com/dev/photos.getUploadServer * - * @return 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 { @@ -209,8 +202,57 @@ final class photos } // Запрос - $request = $robot->browser()->api('photos.getUploadServer', $settings); + $request = $robot->browser->request('POST', 'photos.getUploadServer', $settings)->getBody()->getContents(); return (array) $request; } -} + + /** + * загрузить фото и получить его 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, [ + 'multipart' => [ + [ + 'Content-type' => 'multipart/form-data', + 'name' => 'photo', + 'contents' => $img + ] + ] + ])->getBody()->getContents()); + + //сохранить + $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; + } +} \ No newline at end of file diff --git a/hood/vk/system/core.php b/hood/vk/system/core.php index 96a84e4..556f776 100644 --- a/hood/vk/system/core.php +++ b/hood/vk/system/core.php @@ -12,15 +12,15 @@ use hood\vk\loggers\jasmo, /** * Ядро * - * @property-read int $robots Количество роботов - * @property string $timezone Временная зона (журналирование) - * @property array $path Пути (архитектура проекта) + * $robots Количество роботов + * $timezone Временная зона (журналирование) + * $path Пути (архитектура проекта) * - * @method protected static function __construct() Инициализация - * @method public static function init() Запуск инициализации или получение инстанции - * @method public public function build() Сборщик - * @method public function set($id, $value) Запись в реестр - * @method public function get($id = null) Чтение из реестра + * protected static function __construct() Инициализация + * public static function init() Запуск инициализации или получение инстанции + * public public function build() Сборщик + * public function set($id, $value) Запись в реестр + * public function get($id = null) Чтение из реестра * * @package VK * @author Арсен Мирзаев @@ -31,15 +31,11 @@ final class core /** * Счётчик роботов - * - * @var int */ private int $robots = 0; /** * Реестр роботов - * - * @var array */ private array $registry = []; @@ -47,38 +43,28 @@ final class core * Временная зона * * Используется в логировании - * - * @var string */ private string $timezone; /** * Путь до корня проекта - * - * @var string */ private string $path_root; /** * Путь до папки журналов - * - * @var string */ private string $path_logs; /** * Путь до временной папки - * - * @var string */ private string $path_temp; /** * Журналист * - * @param string $file Файл для журналирования - * - * @return self + * $file Файл для журналирования * * @todo Добавить установку иного журналиста по спецификации PSR-3 * @todo Более гибкое журналирование @@ -94,12 +80,10 @@ final class core /** * Записать в реестр * - * @param int $id - * @param robot $robot + * $id Идентификатор + * $robot робот * * @see hood\vk\traits\registry Модификация метода - * - * @return void */ public function set(int $id, robot $robot): void { @@ -117,14 +101,12 @@ final class core * * Если не передать идентификатор, то вернёт все значения * - * @param int|null $id Идентификатор - * @param int|null $session Сессия + * $id Идентификатор + * $session Сессия * * @see hood\vk\traits\registry Модификация метода - * - * @return mixed */ - public function get(int|null $id = null, int|null $session = null) + public function get(int|null $id = null, int|null $session = null): mixed { if (isset($id) && array_key_exists($id, $this->registry)) { // Робот передан и найден @@ -140,12 +122,10 @@ final class core /** * Удалить из реестра * - * @param int|null $id Идентификатор - * @param int|null $session Сессия + * $id Идентификатор + * $session Сессия * * @see hood\vk\traits\registry Модификация метода - * - * @return void */ public function delete(int|null $id = null, int|null $session = null): void { @@ -188,64 +168,35 @@ final class core /** * Записать свойство * - * @param mixed $name Название - * @param mixed $value Значение - * - * @return void + * $name Название + * $value Значение */ - public function __set($name, $value): void + public function __set(mixed $name, mixed $value): void { match ($name) { - 'timezone' => match (true) { - !isset($this->timezone) => $this->timezone = $value, - default => throw new Exception('Запрещено переопределять часовой пояс') - }, - 'path_root' => match (true) { - !isset($this->path_root) => $this->path_root = $value, - default => throw new Exception('Запрещено переопределять корневой каталог') - }, - 'path_logs' => match (true) { - !isset($this->path_logs) => $this->path_logs = $value, - default => throw new Exception('Запрещено переопределять каталог журналов') - }, - 'path_temp' => match (true) { - !isset($this->path_temp) => $this->path_temp = $value, - default => throw new Exception('Запрещено переопределять каталог временных файлов') - }, + 'timezone' => !isset($this->timezone) ? $this->timezone = $value : throw new Exception('Запрещено переопределять часовой пояс'), + 'path_root' => !isset($this->path_root) ? $this->path_root = $value : throw new Exception('Запрещено переопределять корневой каталог'), + 'path_logs' => !isset($this->path_logs) ? $this->path_logs = $value : throw new Exception('Запрещено переопределять каталог журналов'), + 'path_temp' => !isset($this->path_temp) ? $this->path_temp = $value : throw new Exception('Запрещено переопределять каталог временных файлов') }; } /** * Прочитать свойство + * + * Значение по умолчанию, есле не задано * - * @param mixed $name Название - * - * @return mixed + * $name Название */ - public function __get($name) + public function __get(mixed $name): mixed { return match ($name) { - 'robots' => $this->robots, - 'timezone' => match (true) { - // Значение по умолчанию - !isset($this->timezone) => $this->timezone = 'Europe/Moscow', - default => $this->timezone - }, - 'path_root' => match (true) { - // Значение по умолчанию - !isset($this->path_root) => $this->path_root = dirname(__DIR__), - default => $this->path_root - }, - 'path_logs' => match (true) { - // Значение по умолчанию - !isset($this->path_logs) => $this->path_logs = $this->path_root . '/logs', - default => $this->path_logs - }, - 'path_temp' => match (true) { - // Значение по умолчанию - !isset($this->path_temp) => $this->path_temp = $this->path_root . '/temp', - default => $this->path_temp - } + 'robots' => $this->robots, + 'timezone' => !isset($this->timezone) ? $this->timezone = 'Europe/Moscow' : $this->timezone, + 'path_root' => !isset($this->path_root) ? $this->path_root = dirname(__DIR__) : $this->path_root, + 'path_logs' => !isset($this->path_logs) ? $this->path_logs = $this->path_root . '/logs' : $this->path_logs, + 'path_temp' => !isset($this->path_temp) ? $this->path_root . '/temp' : $this->path_temp, + default => null }; } @@ -255,10 +206,8 @@ final class core * Ищет класс описывающий робота, * создаёт и возвращает его объект * - * @param string $method Метод - * @param array $params Параметры - * - * @return robot + * $method Метод + * $params Параметры */ public function __call(string $method, array $params): robot { diff --git a/hood/vk/system/robots/group.php b/hood/vk/system/robots/group.php index ac2b791..db0d42b 100644 --- a/hood/vk/system/robots/group.php +++ b/hood/vk/system/robots/group.php @@ -13,33 +13,31 @@ use Throwable, /** * Робот-группа * - * @property longpoll $longpoll LongPoll-сессия + * $longpoll LongPoll-сессия * - * @method public function __set($name, $value) Запись свойства - * @method public function __get($name) Чтение свойства - * @method public function __isset($name) Проверка на инициализированность свойства + * public function __set($name, $value) Запись свойства + * public function __get($name) Чтение свойства + * public function __isset($name) Проверка на инициализированность свойства * - * @package hood\vk\robots - * @author Arsen Mirzaev Tatyano-Muradovich + * hood\vk\robots + * Arsen Mirzaev Tatyano-Muradovich */ final class group extends robot { /** - * @var longpoll $longpoll LongPoll-сессия + * $longpoll LongPoll-сессия */ protected longpoll $longpoll; /** * Запись свойства * - * @param string $name Название - * @param mixed $value Значение + * $name Название + * $value Значение * * @see hood\vk\robots\robot Наследуемый метод - * - * @return void */ - public function __set(string $name, $value): void + public function __set(string $name, mixed $value): void { try { parent::__set($name, $value); @@ -47,26 +45,20 @@ final class group extends robot // Если свойство не найдено в родительском методе match ($name) { - 'longpoll' => match (true) { - $value instanceof LongPoll => $this->longpoll = $value, - default => $this->longpoll = new LongPoll($this) - } + 'longpoll' => $value instanceof LongPoll ? $this->longpoll = $value : $this->longpoll = new LongPoll($this), + default => throw new Exception($e->getMessage(), $e->getCode(), $e->getPrevious()) }; - - throw new Exception($e->getMessage(), $e->getCode(), $e->getPrevious()); } } /** * Чтение свойства * - * @param string $name Название + * $name Название * * @see hood\vk\robots\robot Наследуемый метод - * - * @return mixed */ - public function __get(string $name) + public function __get(string $name): mixed { try { return parent::__get($name); @@ -87,7 +79,7 @@ final class group extends robot /** * Проверка на инициализированность свойства * - * @param string $name Название + * $name Название * * @return mixed */ diff --git a/hood/vk/system/robots/robot.php b/hood/vk/system/robots/robot.php index e7f9f0b..84d3fbc 100644 --- a/hood/vk/system/robots/robot.php +++ b/hood/vk/system/robots/robot.php @@ -18,26 +18,26 @@ use hood\accounts\vk as account; /** * Робот * - * @property-read int $id Идентификатор - * @property-read int $session Сессия - * @property string $key Ключ - * @property float $version Версия API - * @property account $account Аккаунт - * @property browser $browser Браузер - * @property proxy $proxy Прокси - * @property captcha $captcha Обработчик капчи + * $id Идентификатор + * $session Сессия + * $key Ключ + * $version Версия API + * $account Аккаунт + * $browser Браузер + * $proxy Прокси + * $captcha Обработчик капчи * - * @property int $messages_mode Режим отправки сообщений + * $messages_mode Режим отправки сообщений * - * @method public function __construct(int $id = null, float $version = null) Конструктор - * @method public function key(string $key) Инициализация ключа - * @method public function account(account $account) Инициализация аккаунта - * @method public function __set($name, $value) Запись свойства - * @method public function __get($name) Чтение свойства - * @method public function __isset($name) Проверка на инициализированность свойства - * @method public function __call(string $method, array $params) Вызов метода - * @method public static function __callStatic(string $method, array $params) Вызов статического метода - * @method public function __toString() Конвертация в строку + * public function __construct(int $id = null, float $version = null) Конструктор + * public function key(string $key) Инициализация ключа + * public function account(account $account) Инициализация аккаунта + * public function __set($name, $value) Запись свойства + * public function __get($name) Чтение свойства + * public function __isset($name) Проверка на инициализированность свойства + * public function __call(string $method, array $params) Вызов метода + * public static function __callStatic(string $method, array $params) Вызов статического метода + * public function __toString() Конвертация в строку * * @package hood\vk\robots * @author Arsen Mirzaev Tatyano-Muradovich @@ -45,42 +45,42 @@ use hood\accounts\vk as account; abstract class robot { /** - * @var int Идентификатор + * Идентификатор */ protected int $id; /** - * @var int Сессия + * Сессия */ protected int $session; /** - * @var string Ключ + * Ключ */ protected string $key; /** - * @var float Версия API + * Версия API */ protected float $version = 5.124; /** - * @var string Аккаунт + * Аккаунт */ private account $account; /** - * @var proxy Прокси + * Прокси */ protected proxy $proxy; /** - * @var captcha Обработчик капчи + * Обработчик капчи */ protected captcha $captcha; /** - * @var int $messages_mode Режим отправки сообщений + * $messages_mode Режим отправки сообщений */ protected int $messages_mode = 1; @@ -88,8 +88,8 @@ abstract class robot /** * Конструктор * - * @param int|null $id Идентификатор - * @param float|null $version Версия API + * $id Идентификатор + * $version Версия API */ public function __construct(int|null $id = null, float|null $version = null) { @@ -114,9 +114,7 @@ abstract class robot /** * Инициализация ключа * - * @param string $key Ключ - * - * @return self + * $key Ключ */ public function key(string $key): self { @@ -132,9 +130,7 @@ abstract class robot /** * Инициализация аккаунта * - * @param account $account Аккаунт - * - * @return self + * $account Аккаунт */ public function account(account $account): self { @@ -150,9 +146,7 @@ abstract class robot /** * Инициализация прокси * - * @param proxy $proxy Прокси - * - * @return self + * $proxy Прокси */ public function proxy(proxy $proxy): self { @@ -164,9 +158,7 @@ abstract class robot /** * Инициализация обработчика капчи * - * @param captcha $captcha Обработчик капчи - * - * @return self + * $captcha Обработчик капчи */ public function captcha(captcha $captcha): self { @@ -178,38 +170,18 @@ abstract class robot /** * Записать свойство * - * @param string $name Название - * @param mixed $value Значение - * - * @return void + * $name Название + * $value Значение */ - public function __set(string $name, $value): void + public function __set(string $name, mixed $value): void { match ($name) { - 'id' => match (true) { - !isset($this->id) => $this->id = (int) $value, - default => throw new Exception('Запрещено перезаписывать идентификатор') - }, - 'session' => match (true) { - !isset($this->session) => $this->session = (int) $value, - default => throw new Exception('Запрещено перезаписывать сессию') - }, - 'key' => match (true) { - !isset($this->key) => $this->key = (string) $value, - default => throw new Exception('Запрещено перезаписывать ключ') - }, - 'version' => match (true) { - !isset($this->version) => $this->version = (float) $value, - default => throw new Exception('Запрещено перезаписывать версию API') - }, - 'account' => match (true) { - !isset($this->account) && $value instanceof account => $this->account = $value, - default => throw new Exception('Запрещено перезаписывать аккаунт') - }, - 'browser' => match (true) { - !isset($this->browser) && $value instanceof browser => $this->browser = $value, - default => throw new Exception('Запрещено перезаписывать браузер') - }, + 'id' => !isset($this->id) ? $this->id = (int) $value : throw new Exception('Запрещено перезаписывать идентификатор'), + 'session' => !isset($this->session) ? $this->session = (int) $value : throw new Exception('Запрещено перезаписывать сессию'), + 'key' => !isset($this->key) ? $this->key = (string) $value : throw new Exception('Запрещено перезаписывать ключ'), + 'version' => !isset($this->version) ? $this->version = (float) $value : throw new Exception('Запрещено перезаписывать версию API'), + 'account' => !isset($this->account) && $value instanceof account ? $this->account = $value : throw new Exception('Запрещено перезаписывать аккаунт'), + 'browser' => !isset($this->browser) && $value instanceof browser ? $this->browser = $value : throw new Exception('Запрещено перезаписывать браузер'), 'proxy' => $this->proxy = $value, 'captcha' => $this->captcha = $value, 'messages_new' => $this->messages_new = (int) $value, @@ -221,33 +193,18 @@ abstract class robot /** * Прочитать свойство * - * @param string $name Название + * $name Название * * @return mixed */ public function __get(string $name) { return match ($name) { - 'id' => match (true) { - isset($this->id) => $this->id, - default => throw new Exception('Идентификатор не инициализирован') - }, - 'session' => match (true) { - isset($this->session) => $this->session, - default => throw new Exception('Сессия не инициализирована') - }, - 'key' => match (true) { - isset($this->key) => $this->key, - default => throw new Exception('ключ не инициализирован') - }, - 'version' => match (true) { - isset($this->version) => $this->version, - default => throw new Exception('Версия не инициализирована') - }, - 'account' => match (true) { - isset($this->account) => $this->account, - default => throw new Exception('Аккаунт не инициализирован') - }, + 'id' => isset($this->id) ? $this->id : throw new Exception('Идентификатор не инициализирован'), + 'session' => isset($this->session) ? $this->session : throw new Exception('Сессия не инициализирована'), + 'key' => isset($this->key) ? $this->key : throw new Exception('Ключ не инициализирован'), + 'version' => isset($this->version) ? $this->version : throw new Exception('Версия не инициализирована'), + 'account' => isset($this->account) ? $this->account : throw new Exception('Аккаунт не инициализирован'), 'browser' => $this->browser ?? $this->browser = new browser([ 'base_uri' => 'https://api.vk.com/method/', 'cookies' => true @@ -263,7 +220,7 @@ abstract class robot /** * Проверить свойство на инициализированность * - * @param string $name Название + * $name Название * * @return mixed */ @@ -289,10 +246,8 @@ abstract class robot * Ищет класс описывающий метод API ВКонтакте, * создаёт и возвращает его объект * - * @param string $method Метод - * @param array $params Параметры - * - * @return method + * $method Метод + * $params Параметры */ public function __call(string $method, array $params): method { @@ -310,10 +265,8 @@ abstract class robot * Ищет класс описывающий метод API ВКонтакте, * создаёт и возвращает его объект * - * @param string $method Метод - * @param array $params Параметры - * - * @return method + * $method Метод + * $params Параметры */ public static function __callStatic(string $method, array $params): method { @@ -326,8 +279,6 @@ abstract class robot /** * Конвертировать в строку - * - * @return string */ public function __toString(): string { diff --git a/hood/vk/system/traits/singleton.php b/hood/vk/system/traits/singleton.php index bcb92b2..90a3508 100644 --- a/hood/vk/system/traits/singleton.php +++ b/hood/vk/system/traits/singleton.php @@ -27,8 +27,6 @@ trait singleton /** * Инициализация - * - * @return self */ public static function init(): self {