From 122dc129a519eef3b57bcab183774adc27ef1bf2 Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Wed, 10 Mar 2021 13:09:30 +1000 Subject: [PATCH 01/11] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hood/vk/tests/accounts/.gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 hood/vk/tests/accounts/.gitignore diff --git a/hood/vk/tests/accounts/.gitignore b/hood/vk/tests/accounts/.gitignore new file mode 100644 index 0000000..f4c3747 --- /dev/null +++ b/hood/vk/tests/accounts/.gitignore @@ -0,0 +1,2 @@ +/* +!.gitignore \ No newline at end of file From 3c1e4a5b153537f217307dfbcaec892cc4e4026a Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Wed, 10 Mar 2021 22:29:25 +1000 Subject: [PATCH 02/11] =?UTF-8?q?=D0=9D=D0=B5=D0=BA=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D1=8B=D0=B5=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hood/vk/system/api/api.php | 2 -- hood/vk/system/api/methods/messages.php | 31 +++++++++++----------- hood/vk/tests/api/apiTest.php | 12 ++++----- hood/vk/tests/api/attachmentsTest.php | 10 +++---- hood/vk/tests/api/methods/messagesTest.php | 30 +++++++++++---------- hood/vk/tests/api/methods/photosTest.php | 10 +++---- hood/vk/tests/robots/groupTest.php | 20 +++++++------- hood/vk/tests/robots/userTest.php | 20 +++++++------- 8 files changed, 68 insertions(+), 67 deletions(-) diff --git a/hood/vk/system/api/api.php b/hood/vk/system/api/api.php index c4f14a6..6694e46 100644 --- a/hood/vk/system/api/api.php +++ b/hood/vk/system/api/api.php @@ -120,7 +120,6 @@ class api implements ArrayAccess public function __set(string $name, mixed $value): void { match ($name) { - 'robot' => !isset($this->robot) ? $this->robot = $value : throw new Exception('Запрещено перезаписывать робота'), 'settings' => !isset($this->settings) ? $this->settings = $value : throw new Exception('Запрещено перезаписывать настройки'), default => $this->settings[$name] = $value }; @@ -134,7 +133,6 @@ class api implements ArrayAccess public function __get(string $name): mixed { return match ($name) { - 'robot' => $this->robot ?? throw new Exception('Робот не инициализирован'), 'settings' => $this->settings ?? throw new Exception('Настройки не инициализированы'), default => $this->settings[$name] ?? throw new Exception('Параметр не найден: settings[\'' . $name . '\']') }; diff --git a/hood/vk/system/api/methods/messages.php b/hood/vk/system/api/methods/messages.php index 39be2b1..6942d75 100644 --- a/hood/vk/system/api/methods/messages.php +++ b/hood/vk/system/api/methods/messages.php @@ -33,7 +33,6 @@ final class messages extends method /** * @param string|null $text Текст */ - protected string|null $text = null; /** * @var array Массив вложений @@ -51,7 +50,8 @@ final class messages extends method * @param robot $robot Робот */ public function __construct( - protected robot $robot + protected robot $robot, + protected string|null $text = null ) { } @@ -130,9 +130,9 @@ final class messages extends method * * @return array Ответ сервера */ - public function send(int|string|array $destination): array + public function send(int|string|array $destination): mixed { - // Идентификатор сообщения + // Идентификатор $random_id = time(); if ($this->mode = 1) { @@ -146,11 +146,11 @@ final class messages extends method // Цель отправки $this->robot->api->chooseDestination($destination); - // Текст сообщения - $this->robot->api['message'] = $this->text; - // Идентификатор сообщения - $this->robot->api['random_id'] = $random_id; + $this->robot->api->random_id = $random_id; + + // Текст + $this->robot->api->message = $this->text; // Фильтрация вложений, если они инициализированны if (isset($this->attachments)) { @@ -175,9 +175,8 @@ final class messages extends method } } - // Запрос - $request = $this->robot->browser->request(method: 'POST', uri: 'messages.send', options: ['form_params' => $this->robot->api['settings']]); + $request = $this->robot->browser->request('POST', 'messages.send', ['form_params' => $this->robot->api->settings]); // Очистка //unset($settings); @@ -186,7 +185,7 @@ final class messages extends method // Если установлен режим 2 (усиленная проверка отправленного сообщения) if (!empty($request["response"])) { - // Если пришел ID сообщения + // Ответ получен // Реиницилазиция $this->robot->api->reinit(); @@ -195,8 +194,10 @@ final class messages extends method $this->robot->api['message_ids'] = $request["response"]; // Запрос - if ($this->robot->browser->post(uri: 'https://api.vk.com/method/messages.getById', options: $this->robot->api['settings'])['response']['count'] === 0) { - // Если сообщения не существует, то повторить отправку + if ($this->robot->browser->request('POST', 'messages.getById', ['form_params' => $this->robot->api->settings])['response']['count'] === 0) { + // Сообщения не существует + + // Повторная отправка $this->send($destination); } } else { @@ -204,7 +205,7 @@ final class messages extends method } } - return (array) $request; + return $request->getBody(); } /** @@ -234,7 +235,7 @@ final class messages extends method public function __get(string $name): mixed { return match ($name) { - 'text' => $this->text ?? throw new Exception('Текст не задан'), + 'text' => $this->text ?? throw new Exception('Текст не инициализирован'), 'attachment' => $this->attachment->attachments ?? $this->attachment = new attachments($this->robot), 'attachments' => isset($this->attachment) ? $this->attachment->attachments : throw new Exception('Вложения не инициализированны'), default => throw new Exception('Свойство не найдено: ' . $name) diff --git a/hood/vk/tests/api/apiTest.php b/hood/vk/tests/api/apiTest.php index 31d2c07..e33a325 100644 --- a/hood/vk/tests/api/apiTest.php +++ b/hood/vk/tests/api/apiTest.php @@ -40,11 +40,11 @@ final class apiTest extends TestCase { // Проверка входных данных if (empty(self::$project_id)) { - self::$markTestSkipped('Не найден идентификатор проекта'); + self::markTestSkipped('Не инициализирован идентификатор проекта'); } // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Запись режима SSL-протокола self::$account->ssl = self::$ssl ?? true; @@ -54,9 +54,9 @@ final class apiTest extends TestCase // Проверка входных данных if (empty(self::$login)) { - self::$markTestSkipped('Не найден входной аккаунта'); + self::markTestSkipped('Не инициализирован входной аккаунта'); } else if (empty(self::$password)) { - self::$markTestSkipped('Не найден пароль аккаунта'); + self::markTestSkipped('Не инициализирован пароль аккаунта'); } // Деаутентификация (на всякий случай) @@ -76,7 +76,7 @@ final class apiTest extends TestCase public static function testAccountDeinit(): void { // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Деаутентификация self::$account->deauth(); @@ -171,7 +171,7 @@ final class apiTest extends TestCase public function testReadSettingsElement(): void { // Проверка выброса исключения - $this->expectExceptionMessage('Не найдено: settings[\'element\']'); + $this->expectExceptionMessage('Не инициализировано: settings[\'element\']'); // Чтение элемента настроек self::$robot->key(self::$group_key)->api['element']; diff --git a/hood/vk/tests/api/attachmentsTest.php b/hood/vk/tests/api/attachmentsTest.php index 63fb445..4ed859c 100644 --- a/hood/vk/tests/api/attachmentsTest.php +++ b/hood/vk/tests/api/attachmentsTest.php @@ -46,11 +46,11 @@ final class attachmentsTest extends TestCase { // Проверка входных данных if (empty(self::$project_id)) { - self::$markTestSkipped('Не найден идентификатор проекта'); + self::markTestSkipped('Не инициализирован идентификатор проекта'); } // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Запись режима SSL-протокола self::$account->ssl = self::$ssl ?? true; @@ -60,9 +60,9 @@ final class attachmentsTest extends TestCase // Проверка входных данных if (empty(self::$login)) { - self::$markTestSkipped('Не найден входной аккаунта'); + self::markTestSkipped('Не инициализирован входной аккаунта'); } else if (empty(self::$password)) { - self::$markTestSkipped('Не найден пароль аккаунта'); + self::markTestSkipped('Не инициализирован пароль аккаунта'); } // Деаутентификация (на всякий случай) @@ -82,7 +82,7 @@ final class attachmentsTest extends TestCase public static function testAccountDeinit(): void { // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Деаутентификация self::$account->deauth(); diff --git a/hood/vk/tests/api/methods/messagesTest.php b/hood/vk/tests/api/methods/messagesTest.php index 5fc7ad8..c6ea9bf 100644 --- a/hood/vk/tests/api/methods/messagesTest.php +++ b/hood/vk/tests/api/methods/messagesTest.php @@ -40,11 +40,11 @@ final class messagesTest extends TestCase { // Проверка входных данных if (empty(self::$project_id)) { - self::$markTestSkipped('Не найден идентификатор проекта'); + self::markTestSkipped('Не инициализирован идентификатор проекта'); } // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Запись режима SSL-протокола self::$account->ssl = self::$ssl ?? true; @@ -54,9 +54,9 @@ final class messagesTest extends TestCase // Проверка входных данных if (empty(self::$login)) { - self::$markTestSkipped('Не найден входной аккаунта'); + self::markTestSkipped('Не инициализирован входной аккаунта'); } else if (empty(self::$password)) { - self::$markTestSkipped('Не найден пароль аккаунта'); + self::markTestSkipped('Не инициализирован пароль аккаунта'); } // Деаутентификация (на всякий случай) @@ -76,7 +76,7 @@ final class messagesTest extends TestCase public static function testAccountDeinit(): void { // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Деаутентификация self::$account->deauth(); @@ -120,7 +120,7 @@ final class messagesTest extends TestCase public function testReadText(): void { // Проверка выброса исключения - $this->expectExceptionMessage('Текст не задан'); + $this->expectExceptionMessage('Текст не инициализирован'); // Чтение текста self::$robot->message()->text; @@ -186,22 +186,24 @@ final class messagesTest extends TestCase public function testSend(): void { // Отправка сообщения - self::$robot->key(self::$group_key)->message()->send('123'); + self::$robot->key(self::$group_key)->message('Тестовое сообщение')->send(self::$target_id); } /** * @testdox Отправка сообщеий (с вложениями) */ - public function testSendWithAttachments(): void - { - // Запись вложений - $message = self::$robot->key(self::$group_key)->message()->attachment('text'); + // public function testSendWithAttachments(): void + // { + // // Запись вложений + // $message = self::$robot->key(self::$group_key)->message()->attachment('text'); - // Отправка сообщения - $message->send('123'); - } + // // Отправка сообщения + // $message->send('Тестовое сообщение'); + // } /** * @t estdox Отправка сообщеий (с пересылаемым сообщением) + * + * что это? */ } diff --git a/hood/vk/tests/api/methods/photosTest.php b/hood/vk/tests/api/methods/photosTest.php index c7647d2..a8fd899 100644 --- a/hood/vk/tests/api/methods/photosTest.php +++ b/hood/vk/tests/api/methods/photosTest.php @@ -40,11 +40,11 @@ final class photosTest extends TestCase { // Проверка входных данных if (empty(self::$project_id)) { - self::$markTestSkipped('Не найден идентификатор проекта'); + self::markTestSkipped('Не инициализирован идентификатор проекта'); } // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Запись режима SSL-протокола self::$account->ssl = self::$ssl ?? true; @@ -54,9 +54,9 @@ final class photosTest extends TestCase // Проверка входных данных if (empty(self::$login)) { - self::$markTestSkipped('Не найден входной аккаунта'); + self::markTestSkipped('Не инициализирован входной аккаунта'); } else if (empty(self::$password)) { - self::$markTestSkipped('Не найден пароль аккаунта'); + self::markTestSkipped('Не инициализирован пароль аккаунта'); } // Деаутентификация (на всякий случай) @@ -76,7 +76,7 @@ final class photosTest extends TestCase public static function testAccountDeinit(): void { // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Деаутентификация self::$account->deauth(); diff --git a/hood/vk/tests/robots/groupTest.php b/hood/vk/tests/robots/groupTest.php index 91cb2ce..0bda0cf 100644 --- a/hood/vk/tests/robots/groupTest.php +++ b/hood/vk/tests/robots/groupTest.php @@ -4,9 +4,9 @@ declare(strict_types=1); use PHPUnit\Framework\TestCase; -use hood\vk\core, - hood\vk\robots\robot, - hood\vk\tests\settings; +use hood\vk\core; +use hood\vk\robots\robot; +use hood\vk\tests\settings; use hood\accounts\vk as account; @@ -40,11 +40,11 @@ final class groupTest extends TestCase { // Проверка входных данных if (empty(self::$project_id)) { - self::$markTestSkipped('Не найден идентификатор проекта'); + self::markTestSkipped('Не инициализирован идентификатор проекта'); } // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Запись режима SSL-протокола self::$account->ssl = self::$ssl ?? true; @@ -54,9 +54,9 @@ final class groupTest extends TestCase // Проверка входных данных if (empty(self::$login)) { - self::$markTestSkipped('Не найден входной аккаунта'); + self::markTestSkipped('Не инициализирован входной аккаунта'); } else if (empty(self::$password)) { - self::$markTestSkipped('Не найден пароль аккаунта'); + self::markTestSkipped('Не инициализирован пароль аккаунта'); } // Деаутентификация (на всякий случай) @@ -76,7 +76,7 @@ final class groupTest extends TestCase public static function testAccountDeinit(): void { // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Деаутентификация self::$account->deauth(); @@ -133,7 +133,7 @@ final class groupTest extends TestCase { // Проверки $this->assertNotNull(self::$robot->id, 'Не удалось прочитать идентификатор'); - $this->assertNotEmpty(self::$core->get(self::$robot->id), 'Робот не найден'); + $this->assertNotEmpty(self::$core->get(self::$robot->id), 'Робот не инициализирован'); } /** @@ -155,7 +155,7 @@ final class groupTest extends TestCase { // Проверки $this->assertNotNull(self::$robot->session, 'Не удалось прочитать сессию'); - $this->assertNotEmpty(self::$core->get(self::$robot->id, self::$robot->session), 'Сессия не найдена'); + $this->assertNotEmpty(self::$core->get(self::$robot->id, self::$robot->session), 'Сессия не инициализирована'); } /** diff --git a/hood/vk/tests/robots/userTest.php b/hood/vk/tests/robots/userTest.php index 8201d27..e6f355b 100644 --- a/hood/vk/tests/robots/userTest.php +++ b/hood/vk/tests/robots/userTest.php @@ -4,9 +4,9 @@ declare(strict_types=1); use PHPUnit\Framework\TestCase; -use hood\vk\core, - hood\vk\robots\robot, - hood\vk\tests\settings; +use hood\vk\core; +use hood\vk\robots\robot; +use hood\vk\tests\settings; use hood\accounts\vk as account; @@ -40,11 +40,11 @@ final class userTest extends TestCase { // Проверка входных данных if (empty(self::$project_id)) { - self::$markTestSkipped('Не найден идентификатор проекта'); + self::markTestSkipped('Не инициализирован идентификатор проекта'); } // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Запись режима SSL-протокола self::$account->ssl = self::$ssl ?? true; @@ -54,9 +54,9 @@ final class userTest extends TestCase // Проверка входных данных if (empty(self::$login)) { - self::$markTestSkipped('Не найден входной аккаунта'); + self::markTestSkipped('Не инициализирован входной аккаунта'); } else if (empty(self::$password)) { - self::$markTestSkipped('Не найден пароль аккаунта'); + self::markTestSkipped('Не инициализирован пароль аккаунта'); } // Деаутентификация (на всякий случай) @@ -76,7 +76,7 @@ final class userTest extends TestCase public static function testAccountDeinit(): void { // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../accounts'); + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); // Деаутентификация self::$account->deauth(); @@ -133,7 +133,7 @@ final class userTest extends TestCase { // Проверки $this->assertNotNull(self::$robot->id, 'Не удалось прочитать идентификатор'); - $this->assertNotEmpty(self::$core->get(self::$robot->id), 'Робот не найден'); + $this->assertNotEmpty(self::$core->get(self::$robot->id), 'Робот не инициализирован'); } /** @@ -155,7 +155,7 @@ final class userTest extends TestCase { // Проверки $this->assertNotNull(self::$robot->session, 'Не удалось прочитать сессию'); - $this->assertNotEmpty(self::$core->get(self::$robot->id, self::$robot->session), 'Сессия не найдена'); + $this->assertNotEmpty(self::$core->get(self::$robot->id, self::$robot->session), 'Сессия не инициализирована'); } /** From 0bdf75440540fa8d751a402b21017dc2a41ec8c6 Mon Sep 17 00:00:00 2001 From: tarashyanskiy Date: Tue, 16 Mar 2021 18:16:30 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F,=20=D0=BD=D0=B0=20=D0=B4=D0=BE?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D1=83=20=D0=B2=D0=BB=D0=BE?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.lock | 41 ++++--- hood/vk/system/api/api.php | 2 + hood/vk/system/api/attachments.php | 75 ----------- hood/vk/system/api/data.php | 116 ++++++++++++++++++ hood/vk/system/api/methods/messages.php | 59 ++++----- hood/vk/system/api/methods/photos.php | 11 +- hood/vk/tests/api/apiTest.php | 21 +--- .../api/{attachmentsTest.php => dataTest.php} | 43 +++++-- hood/vk/tests/api/methods/messagesTest.php | 40 +++--- hood/vk/tests/api/methods/photosTest.php | 4 +- hood/vk/tests/settings.php.example | 10 ++ 11 files changed, 243 insertions(+), 179 deletions(-) delete mode 100644 hood/vk/system/api/attachments.php create mode 100644 hood/vk/system/api/data.php rename hood/vk/tests/api/{attachmentsTest.php => dataTest.php} (79%) diff --git a/composer.lock b/composer.lock index 501beb0..c82233f 100644 --- a/composer.lock +++ b/composer.lock @@ -106,16 +106,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "60d379c243457e073cff02bc323a2a86cb355631" + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", - "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", "shasum": "" }, "require": { @@ -153,7 +153,7 @@ "keywords": [ "promise" ], - "time": "2020-09-30T07:37:28+00:00" + "time": "2021-03-07T09:25:29+00:00" }, { "name": "guzzlehttp/psr7", @@ -824,16 +824,16 @@ }, { "name": "phar-io/version", - "version": "3.0.4", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { @@ -867,7 +867,7 @@ } ], "description": "Library for handling version information and constraints", - "time": "2020-12-13T23:18:30+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -2499,30 +2499,35 @@ }, { "name": "webmozart/assert", - "version": "1.9.1", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -2544,7 +2549,7 @@ "check", "validate" ], - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], diff --git a/hood/vk/system/api/api.php b/hood/vk/system/api/api.php index 6694e46..a929d1a 100644 --- a/hood/vk/system/api/api.php +++ b/hood/vk/system/api/api.php @@ -121,6 +121,7 @@ class api implements ArrayAccess { match ($name) { 'settings' => !isset($this->settings) ? $this->settings = $value : throw new Exception('Запрещено перезаписывать настройки'), + 'robot' => !isset($this->robot) ? $this->robot = $value : throw new Exception('Запрещено перезаписывать Робота'), default => $this->settings[$name] = $value }; } @@ -134,6 +135,7 @@ class api implements ArrayAccess { return match ($name) { 'settings' => $this->settings ?? throw new Exception('Настройки не инициализированы'), + 'robot' => $this->robot, default => $this->settings[$name] ?? throw new Exception('Параметр не найден: settings[\'' . $name . '\']') }; } diff --git a/hood/vk/system/api/attachments.php b/hood/vk/system/api/attachments.php deleted file mode 100644 index 566f1e7..0000000 --- a/hood/vk/system/api/attachments.php +++ /dev/null @@ -1,75 +0,0 @@ -attachments) + count($attachments) > 10) { - throw new Exception('Превышен лимит вложений (10)'); - } - - // Запись вложений - $this->attachments = array_merge($this->attachments, $attachments); - - return $this; - } - - /** - * Очистить вложения - */ - public function Clear(): self - { - // Очистка вложений - $this->attachments = []; - - return $this; - } - - /** - * Прочитать свойство - * - * @param string $name Название - * - * @return mixed - */ - public function __get(string $name): mixed - { - return match ($name) { - 'attachments' => $this->attachments, - default => throw new Exception('Свойство не найдено: ' . $name) - }; - } -} diff --git a/hood/vk/system/api/data.php b/hood/vk/system/api/data.php new file mode 100644 index 0000000..28ce2fa --- /dev/null +++ b/hood/vk/system/api/data.php @@ -0,0 +1,116 @@ +data) + count($data) > 10) { + throw new Exception('Превышен лимит вложений (10)'); + } + + // Запись вложений + $this->data = array_merge($this->data, $data); + + return $this; + } + + /** + * Очистить вложения + */ + public function clear(): self + { + // Очистка вложений + $this->data = []; + + return $this; + } + + /** + * Прочитать свойство + * + * @param string $name Название + * + * @return mixed + */ + public function __get(string $name): mixed + { + return match ($name) { + 'data' => $this->data, + default => throw new Exception('Свойство не найдено: ' . $name) + }; + } + + /** + * Записать по смещению + */ + public function offsetSet(mixed $offset = null, ...$value): void + { + if ($offset == null) { + $this->addData($value); + } + } + + /** + * Прочитать по смещению + */ + public function offsetGet(mixed $offset = null): mixed + { + if ($offset == 0) { + return $this; + } + } + + /** + * Проверка существования смещения + */ + public function offsetExists(mixed $offset): bool + { + if ($offset == 'data') { + return empty($this->data); + } + } + + /** + * Удалить по смещению + */ + public function offsetUnset(mixed $offset = null): void + { + if ($offset == null) { + $this->settings = []; + } + } +} diff --git a/hood/vk/system/api/methods/messages.php b/hood/vk/system/api/methods/messages.php index 6942d75..c632b90 100644 --- a/hood/vk/system/api/methods/messages.php +++ b/hood/vk/system/api/methods/messages.php @@ -8,7 +8,7 @@ use Exception; use hood\accounts\vk; use hood\vk\robots\robot; -use hood\vk\api\attachments; +use hood\vk\api\data; /** * Сообщение @@ -35,14 +35,9 @@ final class messages extends method */ /** - * @var array Массив вложений + * @var data Вложения */ - protected array $attachments; - - /** - * @var attachments Вложения - */ - protected attachments $attachment; + protected data $data; /** * Создать сообщение @@ -81,16 +76,16 @@ final class messages extends method * * @return self */ - public function image(...$imgs): self + public function image(...$pathPhoto): self { // Перебор фото - foreach ($imgs as $img) { + foreach ($pathPhoto as $photo) { // Загрузить фото - $id = $this->robot->photo->getPhoto($img); + $id = $this->robot->photo()->getPhoto($photo); // Записать к вложениям - $this->attachment($id); + $this->attachments($id); } return $this; @@ -101,21 +96,21 @@ final class messages extends method * * @param $attachments Вложения */ - public function attachment(string ...$attachments): self + public function attachments(string ...$attachments): self { - if (isset($this->attachment)) { + if (isset($this->data)) { // Если вложения инициализированны // Записать вложение - $this->attachment->attachment(...$attachments); + $this->data->addData(...$attachments); } else { // Если вложения не инициализированны // Инициализация вложений - $this->attachment = new attachments($this->robot); + $this->data = new data($this->robot); // Записать вложение - $this->attachment->attachment(...$attachments); + $this->data->addData(...$attachments); } return $this; @@ -153,26 +148,29 @@ final class messages extends method $this->robot->api->message = $this->text; // Фильтрация вложений, если они инициализированны - if (isset($this->attachments)) { - $forward_messages = []; - foreach ($this->attachments as &$attachment) { + if (isset($this->data)) { + + /* $forward_messages = []; + $attachments = $this->attachment->attachments; //Indirect modification of overloaded property hood\vk\api\attachments::$attachments has no effect + foreach ($attachments as &$attachment) { if (iconv_substr($attachment, 0, 7, "UTF-8") === 'message') { // Если среди вложений найдено сообщение для пересылки $forward_messages[] = $attachment; unset($attachment); } - } + } */ if (!empty($forward_messages)) { // Если есть пересылаемые сообщения $this->robot->api['forward_messages'] = implode(',', $forward_messages); } - if (!empty($this->attachments)) { + //if (!empty($this->attachment->attachments)) { // Если есть вложения - $this->robot->api['attachment'] = implode(',', $this->attachments); - } + //throw new Exception('СУКАААА'); + $this->robot->api['attachment'] = implode(',', $this->data->data); + //} } // Запрос @@ -219,8 +217,7 @@ final class messages extends method public function __set(string $name, mixed $value): void { match ($name) { - 'attachment' => !isset($this->attachments) ? $this->attachments = $value : throw new Exception('Запрещено перезаписывать вложения'), - 'attachments' => !isset($this->attachments) ? $this->attachments = $value : throw new Exception('Запрещено перезаписывать массив вложений'), + 'data' => !isset($this->data) ? $this->data[0]->addData($value) : throw new Exception('Вложения не инициализированны'), default => throw new Exception('Свойство не найдено: ' . $name) }; } @@ -236,8 +233,7 @@ final class messages extends method { return match ($name) { 'text' => $this->text ?? throw new Exception('Текст не инициализирован'), - 'attachment' => $this->attachment->attachments ?? $this->attachment = new attachments($this->robot), - 'attachments' => isset($this->attachment) ? $this->attachment->attachments : throw new Exception('Вложения не инициализированны'), + 'data' => isset($this->data) ? $this->data[0]->data : throw new Exception('Вложения не инициализированны'), default => throw new Exception('Свойство не найдено: ' . $name) }; } @@ -247,7 +243,7 @@ final class messages extends method * * @return array Информация о сообщении */ - public function info(): array + public function info()/* : array */ { //Инициализация //$settings = $this->init(); @@ -279,13 +275,10 @@ final class messages extends method $this->robot->api['forward_messages'] = implode(',', $forward_messages); } - if (!empty($attachments)) { + if (!empty($this->attachments)) { // Если есть вложения $this->robot->api['attachment'] = implode(',', $this->attachments); } - - /////////////////////////////////////////////////............................ Что это? - return $settings ?? []; } } diff --git a/hood/vk/system/api/methods/photos.php b/hood/vk/system/api/methods/photos.php index c3e5cb1..2ba5540 100644 --- a/hood/vk/system/api/methods/photos.php +++ b/hood/vk/system/api/methods/photos.php @@ -223,10 +223,10 @@ final class photos extends method * * $robot робот * - * $img фото + * $pathPhoto Путь к фото */ - public function getPhoto($img) + public function getPhoto(string $pathPhoto): string { // Реиницилазиция $this->robot->api->reinit(); @@ -242,13 +242,16 @@ final class photos extends method 'form_params' => $this->robot->api['settings'] ])->getBody()->getContents())->response->upload_url; + // Открыть фото + $pathPhoto = fopen($pathPhoto, 'r'); + // Загрузить фото $response = json_decode($this->robot->browser->request('POST', $url, [ 'multipart' => [ [ 'Content-type' => 'multipart/form-data', 'name' => 'photo', - 'contents' => $img + 'contents' => $pathPhoto ] ] ])->getBody()->getContents()); @@ -276,7 +279,7 @@ final class photos extends method ])->getBody()->getContents()); // Ссылка на фото - if (isset($response->response)) { + if (isset($response->response[0]->id)) { return 'photo' . $response->response[0]->owner_id . '_' . $response->response[0]->id; } else { throw new Exception('Фото не загружено'); diff --git a/hood/vk/tests/api/apiTest.php b/hood/vk/tests/api/apiTest.php index e33a325..61ee5cc 100644 --- a/hood/vk/tests/api/apiTest.php +++ b/hood/vk/tests/api/apiTest.php @@ -133,19 +133,7 @@ final class apiTest extends TestCase } /** - * @testdox Запись робота (повторная) - */ - public function testWriteRobot(): void - { - // Проверка выброса исключения - $this->expectExceptionMessage('Запрещено перезаписывать робота'); - - // Повторная запись робота - self::$robot->key(self::$group_key)->api->robot = 'robot'; - } - - /** - * @tesetdox Чтение робота + * @testdox Чтение робота */ public function testReadRobot(): void { @@ -162,7 +150,10 @@ final class apiTest extends TestCase $this->expectExceptionMessage('Запрещено перезаписывать настройки'); // Запись настроек - self::$robot->key(self::$group_key)->api['settings'] = 'settings'; + self::$robot->key(self::$group_key)->api['settings'] = ['settings']; + + // Проверка + $this->assertTrue(!empty(self::$robot->api(['settings']))); } /** @@ -171,7 +162,7 @@ final class apiTest extends TestCase public function testReadSettingsElement(): void { // Проверка выброса исключения - $this->expectExceptionMessage('Не инициализировано: settings[\'element\']'); + $this->expectExceptionMessage('Не найдено: settings[\'element\']'); // Чтение элемента настроек self::$robot->key(self::$group_key)->api['element']; diff --git a/hood/vk/tests/api/attachmentsTest.php b/hood/vk/tests/api/dataTest.php similarity index 79% rename from hood/vk/tests/api/attachmentsTest.php rename to hood/vk/tests/api/dataTest.php index 4ed859c..6b182d9 100644 --- a/hood/vk/tests/api/attachmentsTest.php +++ b/hood/vk/tests/api/dataTest.php @@ -7,14 +7,14 @@ use PHPUnit\Framework\TestCase; use hood\vk\core; use hood\vk\robots\robot; use hood\vk\tests\settings; -use hood\vk\api\attachments; +use hood\vk\api\data; use hood\accounts\vk as account; /** * @testdox Вложения */ -final class attachmentsTest extends TestCase +final class dataTest extends TestCase { use settings; @@ -34,9 +34,9 @@ final class attachmentsTest extends TestCase private static robot $robot; /** - * @var attachments $attachments Вложения + * @var data $data Вложения */ - private static attachments $attachments; + private static data $data; /** * @testdox Инициализация аккаунта @@ -124,10 +124,10 @@ final class attachmentsTest extends TestCase * @testdox Инициализация вложений * @before */ - public function testAttachmentsInit(): void + public function testDataInit(): void { if (isset(self::$robot)) { - self::$attachments = new Attachments(self::$robot); + self::$data = new data(self::$robot); } } @@ -137,7 +137,7 @@ final class attachmentsTest extends TestCase public function testReadAttachments(): void { // Проверка - $this->assertNotNull(self::$attachments->attachments); + $this->assertIsArray(self::$data->data); } /** @@ -146,7 +146,22 @@ final class attachmentsTest extends TestCase public function testWriteAttachment(): void { // Запись вложения - self::$attachments->attachment('text'); + self::$data->addData('Вложение'); + + // Проверка + $this->assertNotEmpty(self::$data->data); + } + + /** + * @testdox Запись вложения методом + */ + public function testWriteAttachmentUsingMethod(): void + { + // Запись вложения + self::$data->addData('Вложение'); + + // Проверка + $this->assertNotEmpty(self::$data->data); } /** @@ -155,13 +170,13 @@ final class attachmentsTest extends TestCase public function testWriteAttachmentWhenItIsAlreadyWrited(): void { //Запись вложения - self::$attachments->attachment('text'); + self::$data->addData('Вложение'); // Повторная запись вложения - self::$attachments->attachment('text'); + self::$data->addData('Вложение'); // Проверка - $this->assertSame(['text', 'text'], self::$attachments->attachments); + $this->assertSame(['Вложение', 'Вложение'], self::$data->data); } /** @@ -173,7 +188,7 @@ final class attachmentsTest extends TestCase $this->expectExceptionMessage('Превышен лимит вложений (10)'); //Запись вложений - self::$attachments->attachment('text', 'text', 'text', 'text', 'text', 'text', 'text', 'text', 'text', 'text', 'text'); + self::$data->addData('Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение'); } /** @@ -182,6 +197,8 @@ final class attachmentsTest extends TestCase public function testClearAttachments(): void { // Очистка вложений - self::$attachments->clear(); + self::$data->clear(); + + $this->assertEmpty(self::$data->data); } } diff --git a/hood/vk/tests/api/methods/messagesTest.php b/hood/vk/tests/api/methods/messagesTest.php index c6ea9bf..76825e0 100644 --- a/hood/vk/tests/api/methods/messagesTest.php +++ b/hood/vk/tests/api/methods/messagesTest.php @@ -156,7 +156,10 @@ final class messagesTest extends TestCase public function testWriteImage(): void { // Запись фото - self::$robot->message()->text('img'); + $message = self::$robot->key(self::$group_key)->message()->image(self::$path_photo); + + // Проверка + $this->assertNotEmpty($message->data); } /** @@ -168,20 +171,25 @@ final class messagesTest extends TestCase $this->expectExceptionMessage('Вложения не инициализированны'); // Проверка - self::$robot->message()->attachments; + self::$robot->message()->data; } /** - * @testdox Запись вложений + * @testdox Запись вложений методом */ public function testWriteAttachments(): void { // Запись вложений - self::$robot->message()->attachment('text'); + $message = self::$robot->message(); + + $message->attachments('Вложение'); + + // Проверка + $this->assertEquals(['Вложение'], $message->data); } /** - * @testdox Отправка сообщения + * @testdox Отправка текста */ public function testSend(): void { @@ -190,20 +198,14 @@ final class messagesTest extends TestCase } /** - * @testdox Отправка сообщеий (с вложениями) + * @testdox Отправка фотографии */ - // public function testSendWithAttachments(): void - // { - // // Запись вложений - // $message = self::$robot->key(self::$group_key)->message()->attachment('text'); + public function testSendPhoto(): void + { + // Запись фото + $message = self::$robot->key(self::$group_key)->message()->image(self::$path_photo); - // // Отправка сообщения - // $message->send('Тестовое сообщение'); - // } - - /** - * @t estdox Отправка сообщеий (с пересылаемым сообщением) - * - * что это? - */ + // Отправка сообщения + $message->send(self::$target_id); + } } diff --git a/hood/vk/tests/api/methods/photosTest.php b/hood/vk/tests/api/methods/photosTest.php index a8fd899..b9c4ef9 100644 --- a/hood/vk/tests/api/methods/photosTest.php +++ b/hood/vk/tests/api/methods/photosTest.php @@ -120,9 +120,9 @@ final class photosTest extends TestCase public function testGetPhoto(): void { // Ожидаемое исключение (это временно) - $this->expectExceptionMessage('Фото не загружено'); + //$this->expectExceptionMessage('Фото не загружено'); // Проверка - self::$robot->key(self::$group_key)->photo()->getPhoto('img'); + //self::$robot->key(self::$group_key)->photo()->getPhoto(self::$path_photo); } } diff --git a/hood/vk/tests/settings.php.example b/hood/vk/tests/settings.php.example index c6d8e48..428303d 100644 --- a/hood/vk/tests/settings.php.example +++ b/hood/vk/tests/settings.php.example @@ -6,6 +6,11 @@ namespace hood\vk\tests; trait settings { + /** + * @var string $path_account папка для куки + */ + protected static string $path_accounts = null; + /** * @var int $id Идентификатор аккаунта */ @@ -65,4 +70,9 @@ trait settings * @var bool $ssl SSL-протокол */ protected static bool $ssl = false; + + /** + * @var string $path_photo Путь к Фото + */ + protected static string $path_photo = null; } From 469838cdcdeec11d0b6862696b09cb28bc47bc7f Mon Sep 17 00:00:00 2001 From: tarashyanskiy Date: Fri, 19 Mar 2021 18:58:53 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D1=81?= =?UTF-8?q?=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B8=20?= =?UTF-8?q?=D1=84=D0=BE=D1=82=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hood/vk/system/api/data.php | 45 +----- hood/vk/system/api/methods/messages.php | 161 ++++++++++++-------- hood/vk/system/api/methods/photos.php | 102 +++++++------ hood/vk/tests/api/apiTest.php | 10 +- hood/vk/tests/api/dataTest.php | 21 +-- hood/vk/tests/api/methods/messagesTest.php | 168 ++++++++++++++++++--- hood/vk/tests/api/methods/photosTest.php | 35 ++++- 7 files changed, 349 insertions(+), 193 deletions(-) diff --git a/hood/vk/system/api/data.php b/hood/vk/system/api/data.php index 28ce2fa..79ff9a7 100644 --- a/hood/vk/system/api/data.php +++ b/hood/vk/system/api/data.php @@ -6,12 +6,11 @@ namespace hood\vk\api; use Exception; use hood\vk\robots\robot; -use ArrayAccess; /** * Вложения */ -class data implements ArrayAccess +class data { /** * @var array $data Вложения @@ -35,7 +34,7 @@ class data implements ArrayAccess * * @return self */ - public function addData(string ...$data): self + public function addData(...$data): self { // Если вложений больше 10 if (count($this->data) + count($data) > 10) { @@ -73,44 +72,4 @@ class data implements ArrayAccess default => throw new Exception('Свойство не найдено: ' . $name) }; } - - /** - * Записать по смещению - */ - public function offsetSet(mixed $offset = null, ...$value): void - { - if ($offset == null) { - $this->addData($value); - } - } - - /** - * Прочитать по смещению - */ - public function offsetGet(mixed $offset = null): mixed - { - if ($offset == 0) { - return $this; - } - } - - /** - * Проверка существования смещения - */ - public function offsetExists(mixed $offset): bool - { - if ($offset == 'data') { - return empty($this->data); - } - } - - /** - * Удалить по смещению - */ - public function offsetUnset(mixed $offset = null): void - { - if ($offset == null) { - $this->settings = []; - } - } } diff --git a/hood/vk/system/api/methods/messages.php b/hood/vk/system/api/methods/messages.php index c632b90..7ee698d 100644 --- a/hood/vk/system/api/methods/messages.php +++ b/hood/vk/system/api/methods/messages.php @@ -9,6 +9,7 @@ use Exception; use hood\accounts\vk; use hood\vk\robots\robot; use hood\vk\api\data; +use hood\vk\robots\group; /** * Сообщение @@ -39,6 +40,16 @@ final class messages extends method */ protected data $data; + /** + * @var array Пересылаемые сообщения + */ + protected array $forwardMessages = []; + + /** + * @var int $ReplyMessage Ответное сообщение + */ + protected int $ReplyMessage; + /** * Создать сообщение * @@ -69,6 +80,36 @@ final class messages extends method return $this; } + /** + * Записать пересылаемые сообщения + * + * @param $messageIds id пересылаемых сообщений + * + * @return self + */ + public function forward(...$messageIds): self + { + // Запись пересылаемых сообщений + $this->forwardMessages = array_merge($this->forwardMessages, $messageIds); + + return $this; + } + + /** + * Записать ответное сообщение + * + * @param $messageId id ответного сообщения + * + * @return self + */ + public function reply(int $messageId): self + { + // Запись ответного сообщения + $this->ReplyMessage = $messageId; + + return $this; + } + /** * Записать фото * @@ -95,6 +136,8 @@ final class messages extends method * Записать вложение * * @param $attachments Вложения + * + * @return self */ public function attachments(string ...$attachments): self { @@ -102,7 +145,9 @@ final class messages extends method // Если вложения инициализированны // Записать вложение - $this->data->addData(...$attachments); + foreach ($attachments as $attachment) { + $this->data->addData($attachment); + } } else { // Если вложения не инициализированны @@ -110,7 +155,9 @@ final class messages extends method $this->data = new data($this->robot); // Записать вложение - $this->data->addData(...$attachments); + foreach ($attachments as $attachment) { + $this->data->addData($attachment); + } } return $this; @@ -142,42 +189,36 @@ final class messages extends method $this->robot->api->chooseDestination($destination); // Идентификатор сообщения - $this->robot->api->random_id = $random_id; + $this->robot->api['random_id'] = $random_id; // Текст - $this->robot->api->message = $this->text; + $this->robot->api['message'] = $this->text; - // Фильтрация вложений, если они инициализированны - if (isset($this->data)) { + // Пересылаемые сообщения + if (!empty($this->forwardMessages)) { - /* $forward_messages = []; - $attachments = $this->attachment->attachments; //Indirect modification of overloaded property hood\vk\api\attachments::$attachments has no effect - foreach ($attachments as &$attachment) { - if (iconv_substr($attachment, 0, 7, "UTF-8") === 'message') { + $this->robot->api['forward_messages'] = implode(',', $this->forwardMessages); + } - // Если среди вложений найдено сообщение для пересылки - $forward_messages[] = $attachment; - unset($attachment); - } - } */ + // Ответные сообщения + if (isset($this->ReplyMessage)) { - if (!empty($forward_messages)) { - // Если есть пересылаемые сообщения - $this->robot->api['forward_messages'] = implode(',', $forward_messages); - } + $this->robot->api['reply_to'] = $this->ReplyMessage; + } - //if (!empty($this->attachment->attachments)) { - // Если есть вложения - //throw new Exception('СУКАААА'); - $this->robot->api['attachment'] = implode(',', $this->data->data); - //} + // Вложения + if ( isset($this->data) && $this->__get('data') !== []) { // !empty($this->data->data) почемуто не работает + + $this->robot->api['attachment'] = implode(',', $this->__get('data')); } // Запрос - $request = $this->robot->browser->request('POST', 'messages.send', ['form_params' => $this->robot->api->settings]); + $request = json_decode($this->robot->browser->request('POST', 'messages.send', ['form_params' => $this->robot->api->settings])->getBody()->getContents()); - // Очистка - //unset($settings); + // Если в ответе ошибка + if (isset($request->error)) { + throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code); + } if ($this->mode >= 2) { // Если установлен режим 2 (усиленная проверка отправленного сообщения) @@ -194,16 +235,22 @@ final class messages extends method // Запрос if ($this->robot->browser->request('POST', 'messages.getById', ['form_params' => $this->robot->api->settings])['response']['count'] === 0) { // Сообщения не существует + //!!!!!!!!!!!!!!!!!!!!!!!!!!! + //!!!!!!!!!!!!!!!!!!!!!!!!!! + //!!!!!!!!!!!!!!!!!!!!!!!!! // Повторная отправка $this->send($destination); } } else { // Что-то придумать :) + // наверно throw new exception($request->error->error_msg) + // А стоп. Ничего не нужно, просто возвращаем объект с ошибкой, где всё будет написано + // Костя ты тупой? } } - return $request->getBody(); + return $request->response; } /** @@ -217,7 +264,7 @@ final class messages extends method public function __set(string $name, mixed $value): void { match ($name) { - 'data' => !isset($this->data) ? $this->data[0]->addData($value) : throw new Exception('Вложения не инициализированны'), + 'data' => !isset($this->data) ? $this->data->addData($value) : throw new Exception('Вложения не инициализированны'), default => throw new Exception('Свойство не найдено: ' . $name) }; } @@ -233,52 +280,48 @@ final class messages extends method { return match ($name) { 'text' => $this->text ?? throw new Exception('Текст не инициализирован'), - 'data' => isset($this->data) ? $this->data[0]->data : throw new Exception('Вложения не инициализированны'), + 'data' => isset($this->data) ? $this->data->data : throw new Exception('Вложения не инициализированны'), + 'forwardMessages' => !empty($this->forwardMessages) ? $this->forwardMessages : throw new Exception('Пересылаемые сообщения не инициализированны'), + 'ReplyMessage' => isset($this->ReplyMessage) ? $this->ReplyMessage : throw new Exception('Ответное сообщение не инициализированно'), default => throw new Exception('Свойство не найдено: ' . $name) }; } /** - * Получить информацию о сообщении + * Получить информацию о сообщении по id + * + * @param string $message_ids Идентификатор сообщения * - * @return array Информация о сообщении + * @return object Информация о сообщении */ - public function info()/* : array */ + + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // доделать + + public function getById(int $message_ids): object { - //Инициализация - //$settings = $this->init(); - $this->robot->api->init(); + // Реиницилазиция + $this->robot->api->reinit(); - // Цель отправки - $this->robot->api->chooseDestination($this->destination); + // Идентификаторы сообщений. Максимум 100 идентификаторов + $this->robot->api['message_ids'] = $message_ids; - // Сообщение - $this->robot->api['message'] = $this->message; - // Режим отправки - $this->robot->api['mode'] = $this->mode; + if ($this->robot instanceof group) { + // Если это группа - // Фильтрация вложений - $forward_messages = []; - foreach ($this->attachments as &$attachment) { - if (iconv_substr(str: $attachment, offset: 0, length: 7, charset: "UTF-8") === 'message') { - // Если среди вложений найдено сообщение для пересылки - - $forward_messages[] = $attachment; - unset($attachment); - } + // Идентификатор группы + isset($this->robot->id) ? $this->robot->api['group_id'] = $this->robot->id : throw new Exception('Необходимо указать идентификатор сообщества'); } - if (!empty($forward_messages)) { - // Если есть пересылаемые сообщения + // Запрос + $request = json_decode(($this->robot->browser->request('POST', 'messages.getById', ['form_params' => $this->robot->api->settings])->getBody()->getContents())); - $this->robot->api['forward_messages'] = implode(',', $forward_messages); + // Если в ответе ошибка + if (isset($request->error)) { + throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code); } - if (!empty($this->attachments)) { - // Если есть вложения - - $this->robot->api['attachment'] = implode(',', $this->attachments); - } + return $request->response; } } diff --git a/hood/vk/system/api/methods/photos.php b/hood/vk/system/api/methods/photos.php index 2ba5540..6c32312 100644 --- a/hood/vk/system/api/methods/photos.php +++ b/hood/vk/system/api/methods/photos.php @@ -26,11 +26,6 @@ use Exception; */ final class photos extends method { - /** - * $url - */ - protected $url; - /** * Создать сообщение * @@ -109,27 +104,6 @@ final class photos extends method throw new Exception('Аккаунт не инициализирован'); } - /** - * Загрузить - * - * @param Type $var - * @return void - */ - 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); - } - /** * Получить сервер для загрузки изображений * @@ -218,15 +192,12 @@ final class photos extends method return (array) $request; } - /** - * Загрузить фото и получить его id - * - * $robot робот - * - * $pathPhoto Путь к фото + /** + * Получить адрес сервера сообщений + * + * @return object */ - - public function getPhoto(string $pathPhoto): string + public function getMessageServer(): object { // Реиницилазиция $this->robot->api->reinit(); @@ -237,25 +208,60 @@ final class photos extends method // Идентификатор назначения (0 Для ботов) $this->robot->api['peer_id'] = 0; - // Получить адрес сервера для загрузки фотографии в личное сообщение - $url = json_decode($this->robot->browser->request('POST', 'photos.getMessagesUploadServer', [ + // Получить адрес сервера + $request = json_decode($this->robot->browser->request('POST', 'photos.getMessagesUploadServer', [ 'form_params' => $this->robot->api['settings'] - ])->getBody()->getContents())->response->upload_url; + ])->getBody()->getContents()); - // Открыть фото - $pathPhoto = fopen($pathPhoto, 'r'); + // Если в ответе ошибка + if (isset($request->error)) { + throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code); + } + return $request->response; + } + + /** + * Загрузить фото + */ + public function upload($photo, string $url): object + { // Загрузить фото - $response = json_decode($this->robot->browser->request('POST', $url, [ + $request = json_decode($this->robot->browser->request('POST', $url, [ 'multipart' => [ [ 'Content-type' => 'multipart/form-data', 'name' => 'photo', - 'contents' => $pathPhoto + 'contents' => $photo ] ] ])->getBody()->getContents()); + // Если в ответе ошибка + if (isset($request->error)) { + throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code); + } + + return $request; + } + + /** + * Получить id фото для сообщения + * + * $robot робот + * + * $pathPhoto Путь к фото + */ + public function getPhoto(string $pathPhoto): string + { + // Получить адрес сервера сообщений + $url = $this->getMessageServer()->upload_url; + + // Открыть фото + $pathPhoto = fopen($pathPhoto, 'r'); + + //Загрузить фото + $response = $this->upload($pathPhoto, $url); // Реинициализация $this->robot->api->reinit(); @@ -274,15 +280,17 @@ final class photos extends method $this->robot->api['hash'] = $response->hash; // Сохранить фото - $response = json_decode($this->robot->browser->request('POST', 'photos.saveMessagesPhoto', [ + $request = json_decode($this->robot->browser->request('POST', 'photos.saveMessagesPhoto', [ 'form_params' => $this->robot->api['settings'] ])->getBody()->getContents()); - // Ссылка на фото - if (isset($response->response[0]->id)) { - return 'photo' . $response->response[0]->owner_id . '_' . $response->response[0]->id; - } else { - throw new Exception('Фото не загружено'); + // Если в ответе ошибка + if (isset($request->error)) { + throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code); } + $request; + // Ссылка на фото + return 'photo' . $request->response[0]->owner_id . '_' . $request->response[0]->id; + } } diff --git a/hood/vk/tests/api/apiTest.php b/hood/vk/tests/api/apiTest.php index 61ee5cc..081cffc 100644 --- a/hood/vk/tests/api/apiTest.php +++ b/hood/vk/tests/api/apiTest.php @@ -117,10 +117,14 @@ final class apiTest extends TestCase /** * @testdox Инициализация (безопасная) */ - public function testInit(): void + public function testSafeInit(): void { - // Безопасная инициализация - self::$robot->key(self::$group_key)->api->init(); + // Инициализация + $settings = self::$robot->key(self::$group_key)->api->init(); + + // Проверка + $this->assertNotNull($settings['access_token']); + $this->assertNotNull($settings['v']); } /** diff --git a/hood/vk/tests/api/dataTest.php b/hood/vk/tests/api/dataTest.php index 6b182d9..dd95e3f 100644 --- a/hood/vk/tests/api/dataTest.php +++ b/hood/vk/tests/api/dataTest.php @@ -126,7 +126,10 @@ final class dataTest extends TestCase */ public function testDataInit(): void { + if (isset(self::$robot)) { + + // Инициализация вложений self::$data = new data(self::$robot); } } @@ -152,18 +155,6 @@ final class dataTest extends TestCase $this->assertNotEmpty(self::$data->data); } - /** - * @testdox Запись вложения методом - */ - public function testWriteAttachmentUsingMethod(): void - { - // Запись вложения - self::$data->addData('Вложение'); - - // Проверка - $this->assertNotEmpty(self::$data->data); - } - /** * @testdox Запись вложения (повторная) */ @@ -188,7 +179,7 @@ final class dataTest extends TestCase $this->expectExceptionMessage('Превышен лимит вложений (10)'); //Запись вложений - self::$data->addData('Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение'); + self::$data->addData('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'); } /** @@ -196,9 +187,13 @@ final class dataTest extends TestCase */ public function testClearAttachments(): void { + //Запись вложения + self::$data->addData('Вложение'); + // Очистка вложений self::$data->clear(); + // Проверка $this->assertEmpty(self::$data->data); } } diff --git a/hood/vk/tests/api/methods/messagesTest.php b/hood/vk/tests/api/methods/messagesTest.php index 76825e0..a2201b4 100644 --- a/hood/vk/tests/api/methods/messagesTest.php +++ b/hood/vk/tests/api/methods/messagesTest.php @@ -9,6 +9,7 @@ use hood\vk\robots\robot; use hood\vk\tests\settings; use hood\accounts\vk as account; +use hood\accounts\vk; /** * @testdox Сообщения @@ -132,7 +133,10 @@ final class messagesTest extends TestCase public function testWriteText(): void { // Запись текста - self::$robot->message()->text('text'); + $message = self::$robot->message()->text('text'); + + // Проверка + $this->assertNotNull($message->text); } /** @@ -147,21 +151,37 @@ final class messagesTest extends TestCase $message->text('text'); // Проверка - $this->assertSame('texttext', $message->text); + $this->assertEquals('texttext', $message->text); } /** - * @testdox Запись фото + * @testdox Отправка текста */ - public function testWriteImage(): void + public function testSendText(): void { - // Запись фото - $message = self::$robot->key(self::$group_key)->message()->image(self::$path_photo); + // Отправка сообщения + $response = self::$robot->key(self::$group_key)->message('Тестовое сообщение')->send(self::$target_id); // Проверка - $this->assertNotEmpty($message->data); + $this->assertIsInt($response, 'Сообщение не отправленно'); } + /** + * @testdox Получение информации о сообщении + */ + public function testgetById(): void + { + // Отправка сообщения + $id = self::$robot->key(self::$group_key)->message('Теста метода getByID')->send(self::$target_id); + + // Получение информации + $response = self::$robot->message()->getById($id); + + // Проверка + $this->assertIsArray($response->items, 'Информация не получена'); + } + + /** * @testdox Чтение Вложений */ @@ -175,37 +195,139 @@ final class messagesTest extends TestCase } /** - * @testdox Запись вложений методом + * @testdox Запись вложений (методом) */ public function testWriteAttachments(): void { // Запись вложений - $message = self::$robot->message(); - - $message->attachments('Вложение'); + $message = self::$robot->message()->attachments('Вложение'); // Проверка $this->assertEquals(['Вложение'], $message->data); } /** - * @testdox Отправка текста + * @testdox Запись фото */ - public function testSend(): void - { - // Отправка сообщения - self::$robot->key(self::$group_key)->message('Тестовое сообщение')->send(self::$target_id); - } - - /** - * @testdox Отправка фотографии - */ - public function testSendPhoto(): void + public function testWriteImage(): void { // Запись фото $message = self::$robot->key(self::$group_key)->message()->image(self::$path_photo); + // Проверка + $this->assertNotEmpty($message->data); + } + + + /** + * @testdox Отправка фото + */ + public function testSendPhoto(): void + { + // Запись фото + $message = self::$robot->key(self::$group_key)->message('Тест отправки фото')->image(self::$path_photo); + // Отправка сообщения - $message->send(self::$target_id); + $id = $message->send(self::$target_id); + + // Получене информации для проверки + $message = $message->getById($id); + + // Проверка + $this->assertNotEmpty($message->items[0]->attachments, 'Фото не отправлено'); + } + + /** + * @testdox Чтение пересылаемых сообщений + */ + public function testReadForward(): void + { + // Проверка выброса исключеия + $this->expectExceptionMessage('Пересылаемые сообщения не инициализированны'); + + // Проверка + self::$robot->message()->forwardMessages; + } + + /** + * @testdox Запись пересылаемых сообщений + */ + public function testWriteForward(): void + { + // Запись пересылаемых сообщений + $message = self::$robot->message()->forward(123456); + + // Проверка + $this->assertNotEmpty($message->forwardMessages); + + } + + /** + * @testdox Пересылка сообщений + */ + public function testSendForward(): void + { + // Отправка пересылаемого сообщения + $id = self::$robot->key(self::$group_key)->message('Это сообщение будет переслано')->send(self::$target_id); + + // Запись пересылаемых сообщений + $message = self::$robot->message('Тест пересылки сообщений')->forward($id); + + // Отпрравка пересылки сообщения + $id = $message->send(self::$target_id); + + // Получене информации для проверки + $message = self::$robot->message()->getById($id); + + // Проверка + $this->assertNotEmpty($message->items[0]->fwd_messages, 'Сообщение не пересланно'); + + } + + /** + * @testdox Чтение ответного сообщения + */ + public function testReadReply(): void + { + // Проверка выброса исключеия + $this->expectExceptionMessage('Ответное сообщение не инициализированно'); + + // Проверка + self::$robot->message()->ReplyMessage; + } + + /** + * @testdox Запись ответного сообщения + */ + public function testWriteReply(): void + { + // Запись ответного сообщения + $message = self::$robot->message()->Reply(123456); + + // Проверка + $this->assertNotNull($message->ReplyMessage); + + } + + /** + * @testdox Ответ на сообщение + */ + public function testSendReply(): void + { + // Отправка ответного сообщения + $id = self::$robot->key(self::$group_key)->message('Будет ответ на это сообщение')->send(self::$target_id); + + // Запись ответного сообщения + $message = self::$robot->message('Тест ответа на сообщение')->reply($id); + + // Отправка ответа на сообщение + $id = $message->send(self::$target_id); + + // Получене информации для проверки + $message = self::$robot->message()->getById($id); + + // Проверка + $this->assertNotEmpty($message->items[0]->reply_message, 'Сообщение не пересланно'); + } } diff --git a/hood/vk/tests/api/methods/photosTest.php b/hood/vk/tests/api/methods/photosTest.php index b9c4ef9..83a644d 100644 --- a/hood/vk/tests/api/methods/photosTest.php +++ b/hood/vk/tests/api/methods/photosTest.php @@ -115,14 +115,39 @@ final class photosTest extends TestCase } /** - * @testdox Загрузка фото и получение его id + * @testdox Получение адреса сервера сообщений + */ + public function testGetMessageServer(): void + { + // Получение адреса сервера + $response = self::$robot->key(self::$group_key)->photo()->getMessageServer(); + + // Проверка + $this->assertIsString($response->upload_url, 'Адрес сервера не получен'); + + } + + /** + * @testdox Загрузка фото + */ + public function testUpload(): void + { + // Получение адреса сервера + $url = self::$robot->key(self::$group_key)->photo()->getMessageServer()->upload_url; + + // Загрузка фото + $response = self::$robot->photo()->upload(fopen(self::$path_photo, 'r'), $url); + + // Проверка + $this->assertIsString($response->hash, 'Фото не загружено'); + } + + /** + * @testdox Получение id фото для сообщения */ public function testGetPhoto(): void { - // Ожидаемое исключение (это временно) - //$this->expectExceptionMessage('Фото не загружено'); - // Проверка - //self::$robot->key(self::$group_key)->photo()->getPhoto(self::$path_photo); + self::$robot->key(self::$group_key)->photo()->getPhoto(self::$path_photo); } } From f35046339e63aa5f5bfaa56a5f6ac1919fb498c1 Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Wed, 31 Mar 2021 13:53:59 +1000 Subject: [PATCH 05/11] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.lock | 230 +++++++++++++++++--- hood/vk/system/api/api.php | 202 ----------------- hood/vk/system/api/data.php | 75 ------- hood/vk/system/api/methods/messages.php | 132 +++-------- hood/vk/system/api/settings.php | 278 ++++++++++++++++++++++++ hood/vk/system/core.php | 120 ++++++---- hood/vk/system/robots/group.php | 8 +- hood/vk/system/robots/robot.php | 65 +++--- 8 files changed, 621 insertions(+), 489 deletions(-) delete mode 100644 hood/vk/system/api/api.php delete mode 100644 hood/vk/system/api/data.php create mode 100644 hood/vk/system/api/settings.php diff --git a/composer.lock b/composer.lock index c82233f..09f5044 100644 --- a/composer.lock +++ b/composer.lock @@ -8,22 +8,22 @@ "packages": [ { "name": "guzzlehttp/guzzle", - "version": "7.2.0", + "version": "7.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79" + "reference": "7008573787b430c1c1f650e3722d9bba59967628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0aa74dfb41ae110835923ef10a9d803a22d50e79", - "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", + "reference": "7008573787b430c1c1f650e3722d9bba59967628", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.4", - "guzzlehttp/psr7": "^1.7", + "guzzlehttp/psr7": "^1.7 || ^2.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0" }, @@ -31,6 +31,7 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", "phpunit/phpunit": "^8.5.5 || ^9.3.5", @@ -44,7 +45,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.1-dev" + "dev-master": "7.3-dev" } }, "autoload": { @@ -84,6 +85,10 @@ "rest", "web service" ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.3.0" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -102,7 +107,7 @@ "type": "github" } ], - "time": "2020-10-10T11:47:56+00:00" + "time": "2021-03-23T11:33:13+00:00" }, { "name": "guzzlehttp/promises", @@ -153,20 +158,24 @@ "keywords": [ "promise" ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.4.1" + }, "time": "2021-03-07T09:25:29+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.7.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" + "reference": "35ea11d335fd638b5882ff1725228b3d35496ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/35ea11d335fd638b5882ff1725228b3d35496ab1", + "reference": "35ea11d335fd638b5882ff1725228b3d35496ab1", "shasum": "" }, "require": { @@ -224,7 +233,11 @@ "uri", "url" ], - "time": "2020-09-30T07:37:11+00:00" + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.8.1" + }, + "time": "2021-03-21T16:25:00+00:00" }, { "name": "hood/accounts", @@ -268,6 +281,11 @@ "hood", "vk" ], + "support": { + "chat": "https://vk.me/darkweb228", + "docs": "https://git.hood.su/hood/accounts/manual", + "issues": "https://git.hood.su/hood/accounts/issues" + }, "funding": [ { "url": "https://git.hood.su/hood/accounts/thanks", @@ -322,6 +340,10 @@ "exception handler", "middleware" ], + "support": { + "issues": "https://github.com/jasny/error-handler/issues", + "source": "https://github.com/jasny/error-handler" + }, "abandoned": true, "time": "2017-01-25T01:27:18+00:00" }, @@ -395,6 +417,10 @@ "logging", "psr-3" ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/1.26.0" + }, "funding": [ { "url": "https://github.com/Seldaek", @@ -454,6 +480,9 @@ "psr", "psr-18" ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, "time": "2020-06-29T06:28:15+00:00" }, { @@ -504,6 +533,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, { @@ -551,6 +583,9 @@ "psr", "psr-3" ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, "time": "2020-03-23T09:12:05+00:00" }, { @@ -591,6 +626,10 @@ } ], "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, "time": "2019-03-08T08:55:37+00:00" } ], @@ -644,6 +683,10 @@ "constructor", "instantiate" ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -706,6 +749,10 @@ "object", "object graph" ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, "funding": [ { "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", @@ -764,6 +811,10 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + }, "time": "2020-12-20T10:01:03+00:00" }, { @@ -820,6 +871,10 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, "time": "2020-06-27T14:33:11+00:00" }, { @@ -867,6 +922,10 @@ } ], "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.1.0" + }, "time": "2021-02-23T14:00:09+00:00" }, { @@ -916,6 +975,10 @@ "reflection", "static analysis" ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, "time": "2020-06-27T09:03:43+00:00" }, { @@ -968,6 +1031,10 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, "time": "2020-09-03T19:13:55+00:00" }, { @@ -1013,20 +1080,24 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, "time": "2020-09-17T18:55:26+00:00" }, { "name": "phpspec/prophecy", - "version": "1.12.2", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "245710e971a030f42e08f4912863805570f23d39" + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", - "reference": "245710e971a030f42e08f4912863805570f23d39", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", "shasum": "" }, "require": { @@ -1076,20 +1147,24 @@ "spy", "stub" ], - "time": "2020-12-19T10:15:11+00:00" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + }, + "time": "2021-03-17T13:42:18+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.5", + "version": "9.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" + "reference": "f6293e1b30a2354e8428e004689671b83871edde" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", + "reference": "f6293e1b30a2354e8428e004689671b83871edde", "shasum": "" }, "require": { @@ -1143,13 +1218,17 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-11-28T06:44:49+00:00" + "time": "2021-03-28T07:26:59+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1199,6 +1278,10 @@ "filesystem", "iterator" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1258,6 +1341,10 @@ "keywords": [ "process" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1313,6 +1400,10 @@ "keywords": [ "template" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1368,6 +1459,10 @@ "keywords": [ "timer" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1378,16 +1473,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.2", + "version": "9.5.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" + "reference": "c73c6737305e779771147af66c96ca6a7ed8a741" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", - "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c73c6737305e779771147af66c96ca6a7ed8a741", + "reference": "c73c6737305e779771147af66c96ca6a7ed8a741", "shasum": "" }, "require": { @@ -1463,6 +1558,10 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.4" + }, "funding": [ { "url": "https://phpunit.de/donate.html", @@ -1473,7 +1572,7 @@ "type": "github" } ], - "time": "2021-02-02T14:45:58+00:00" + "time": "2021-03-23T07:16:29+00:00" }, { "name": "sebastian/cli-parser", @@ -1519,6 +1618,10 @@ ], "description": "Library for parsing CLI options", "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1571,6 +1674,10 @@ ], "description": "Collection of value objects that represent the PHP code units", "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1622,6 +1729,10 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1692,6 +1803,10 @@ "compare", "equality" ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1745,6 +1860,10 @@ ], "description": "Library for calculating the complexity of PHP code units", "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1807,6 +1926,10 @@ "unidiff", "unified diff" ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1866,6 +1989,10 @@ "environment", "hhvm" ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1939,6 +2066,10 @@ "export", "exporter" ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -1999,6 +2130,10 @@ "keywords": [ "global state" ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2052,6 +2187,10 @@ ], "description": "Library for counting the lines of code in PHP source code", "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2105,6 +2244,10 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2156,6 +2299,10 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2215,6 +2362,10 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2266,6 +2417,10 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2318,6 +2473,10 @@ ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2367,6 +2526,10 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2435,6 +2598,9 @@ "polyfill", "portable" ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2489,6 +2655,10 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, "funding": [ { "url": "https://github.com/theseer", @@ -2549,6 +2719,10 @@ "check", "validate" ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, "time": "2021-03-09T10:59:23+00:00" } ], @@ -2563,5 +2737,5 @@ "php": "~8.0" }, "platform-dev": [], - "plugin-api-version": "1.1.0" + "plugin-api-version": "2.0.0" } diff --git a/hood/vk/system/api/api.php b/hood/vk/system/api/api.php deleted file mode 100644 index a929d1a..0000000 --- a/hood/vk/system/api/api.php +++ /dev/null @@ -1,202 +0,0 @@ -_init(); - } - } - - /** - * Инициализация (безопасная) - */ - public function init(): array - { - if (!isset($blocked)) { - // Нет блокировки (запуск в первый раз) - - // Блокировка - static $blocked = true; - - try { - $this->_init(); - } catch (Throwable $t) { - throw new Exception('Не удалось инициализировать API', $t->getCode(), $t->getPrevious()); - } - } - - return $this->settings; - } - - /** - * Реинициализация - */ - public function reinit(): array - { - // Реинициализация - //unset($this->settings); - $this->settings = []; - - try { - $this->_init(); - } catch (Throwable $t) { - throw new Exception('Не удалось инициализировать API', $t->getCode(), $t->getPrevious()); - } - - return $this->settings; - } - - /** - * Инициализация - */ - protected function _init(): void - { - // Ключ - $this->settings['access_token'] = $this->robot->key; - - // Версия API - $this->settings['v'] = $this->version; - } - - /** - * Выбрать получателя - * - * Определяет получателей по входным параметрам - * - * @see hood\vk\api\methods\messages Сообщения - */ - public function chooseDestination(string|array|int $destination): void - { - if (is_int($destination)) { - // Идентификатор - - $this->settings['peer_id'] = $destination; - } else if (is_array($destination)) { - // Идентификаторы - - $this->settings['user_ids'] = $destination; - } else { - // Домен - - $this->settings['domain'] = $destination; - } - } - - /** - * Записать свойство - * - * @param string $name Название - * @param mixed $value Значение - */ - public function __set(string $name, mixed $value): void - { - match ($name) { - 'settings' => !isset($this->settings) ? $this->settings = $value : throw new Exception('Запрещено перезаписывать настройки'), - 'robot' => !isset($this->robot) ? $this->robot = $value : throw new Exception('Запрещено перезаписывать Робота'), - default => $this->settings[$name] = $value - }; - } - - /** - * Прочитать свойство - * - * @param string $name Название - */ - public function __get(string $name): mixed - { - return match ($name) { - 'settings' => $this->settings ?? throw new Exception('Настройки не инициализированы'), - 'robot' => $this->robot, - default => $this->settings[$name] ?? throw new Exception('Параметр не найден: settings[\'' . $name . '\']') - }; - } - - /** - * Записать по смещению - */ - public function offsetSet(mixed $offset, mixed $value): void - { - if ($offset == 'settings') { - !isset($this->settings) ? $this->settings = $value : throw new Exception('Запрещено перезаписывать настройки'); - } else if (isset($this->settings)) { - $this->settings[$offset] = $value; - } else { - throw new Exception('Настройки не инициализированы'); - } - } - - /** - * Прочитать по смещению - */ - public function offsetGet(mixed $offset): mixed - { - if ($offset == 'settings' && isset($this->settings)) { - return $this->settings; - } else if (isset($this->settings)) { - if (isset($this->settings[$offset])) { - return $this->settings[$offset]; - } else { - throw new Exception('Не найдено: settings[\'' . $offset . '\']'); - } - } else { - throw new Exception('Настройки не инициализированы'); - } - } - - /** - * Проверка существования смещения - */ - public function offsetExists(mixed $offset): bool - { - if ($offset == 'settings' && isset($this->settings)) { - return isset($this->settings); - } else if (isset($this->settings)) { - return isset($this->settings[$offset]); - } else { - throw new Exception('Настройки не инициализированы'); - } - } - - /** - * Удалить по смещению - */ - public function offsetUnset(mixed $offset): void - { - if ($offset == 'settings' && isset($this->settings)) { - unset($this->settings); - } else if (isset($this->settings)) { - unset($this->settings[$offset]); - } else { - throw new Exception('Настройки не инициализированы'); - } - } -} diff --git a/hood/vk/system/api/data.php b/hood/vk/system/api/data.php deleted file mode 100644 index 79ff9a7..0000000 --- a/hood/vk/system/api/data.php +++ /dev/null @@ -1,75 +0,0 @@ -data) + count($data) > 10) { - throw new Exception('Превышен лимит вложений (10)'); - } - - // Запись вложений - $this->data = array_merge($this->data, $data); - - return $this; - } - - /** - * Очистить вложения - */ - public function clear(): self - { - // Очистка вложений - $this->data = []; - - return $this; - } - - /** - * Прочитать свойство - * - * @param string $name Название - * - * @return mixed - */ - public function __get(string $name): mixed - { - return match ($name) { - 'data' => $this->data, - default => throw new Exception('Свойство не найдено: ' . $name) - }; - } -} diff --git a/hood/vk/system/api/methods/messages.php b/hood/vk/system/api/methods/messages.php index 7ee698d..4ed11be 100644 --- a/hood/vk/system/api/methods/messages.php +++ b/hood/vk/system/api/methods/messages.php @@ -27,46 +27,43 @@ use hood\vk\robots\group; final class messages extends method { /** - * @param int $mode Режим отправки + * @var int $mode Режим отправки */ protected int $mode = 1; /** - * @param string|null $text Текст + * @var array[int] Сообщения для пересылки */ + protected array $forward; /** - * @var data Вложения + * @var int Сообщение для ответа */ - protected data $data; + protected int $reply; /** - * @var array Пересылаемые сообщения - */ - protected array $forwardMessages = []; - - /** - * @var int $ReplyMessage Ответное сообщение - */ - protected int $ReplyMessage; - - /** - * Создать сообщение + * Конструктор * * @param robot $robot Робот + * @param string|null $text Текст + * @param int|string|array $destination = null */ public function __construct( protected robot $robot, - protected string|null $text = null + protected string|null $text = null, + int|string|array $destination = null ) { + if (isset($this->text, $destination)) { + // Быстрая отправка + + $this->send($destination); + } } /** * Записать текст * * @param string $text Текст - * - * @return self */ public function text(string $text): self { @@ -81,84 +78,27 @@ final class messages extends method } /** - * Записать пересылаемые сообщения - * - * @param $messageIds id пересылаемых сообщений - * - * @return self + * Записать сообщения для пересылки + * + * @param $ids Идентификаторы сообщений */ - public function forward(...$messageIds): self + public function forward(...$ids): self { - // Запись пересылаемых сообщений - $this->forwardMessages = array_merge($this->forwardMessages, $messageIds); + // Запись + $this->forward = array_merge($this->forward ?? [], $ids); return $this; } /** - * Записать ответное сообщение - * - * @param $messageId id ответного сообщения - * - * @return self - */ - public function reply(int $messageId): self - { - // Запись ответного сообщения - $this->ReplyMessage = $messageId; - - return $this; - } - - /** - * Записать фото + * Записать сообщение для ответа * - * @param $img Фото - * - * @return self + * @param $id Идентификатор сообщения */ - public function image(...$pathPhoto): self + public function reply(int $id): self { - // Перебор фото - foreach ($pathPhoto as $photo) { - - // Загрузить фото - $id = $this->robot->photo()->getPhoto($photo); - - // Записать к вложениям - $this->attachments($id); - } - - return $this; - } - - /** - * Записать вложение - * - * @param $attachments Вложения - * - * @return self - */ - public function attachments(string ...$attachments): self - { - if (isset($this->data)) { - // Если вложения инициализированны - - // Записать вложение - foreach ($attachments as $attachment) { - $this->data->addData($attachment); - } - } else { - // Если вложения не инициализированны - - // Инициализация вложений - $this->data = new data($this->robot); - - // Записать вложение - foreach ($attachments as $attachment) { - $this->data->addData($attachment); - } - } + // Запись + $this->reply = $id; return $this; } @@ -171,8 +111,10 @@ final class messages extends method * @see https://vk.com/dev/messages.send * * @return array Ответ сервера + * + * @todo Написать обработчик ошибок возвращаемых ВКонтакте */ - public function send(int|string|array $destination): mixed + public function send(int|string|array $destination): array { // Идентификатор $random_id = time(); @@ -243,10 +185,6 @@ final class messages extends method $this->send($destination); } } else { - // Что-то придумать :) - // наверно throw new exception($request->error->error_msg) - // А стоп. Ничего не нужно, просто возвращаем объект с ошибкой, где всё будет написано - // Костя ты тупой? } } @@ -264,8 +202,7 @@ final class messages extends method public function __set(string $name, mixed $value): void { match ($name) { - 'data' => !isset($this->data) ? $this->data->addData($value) : throw new Exception('Вложения не инициализированны'), - default => throw new Exception('Свойство не найдено: ' . $name) + default => throw new Exception("Свойство $name не найдено", 404) }; } @@ -280,16 +217,15 @@ final class messages extends method { return match ($name) { 'text' => $this->text ?? throw new Exception('Текст не инициализирован'), - 'data' => isset($this->data) ? $this->data->data : throw new Exception('Вложения не инициализированны'), - 'forwardMessages' => !empty($this->forwardMessages) ? $this->forwardMessages : throw new Exception('Пересылаемые сообщения не инициализированны'), - 'ReplyMessage' => isset($this->ReplyMessage) ? $this->ReplyMessage : throw new Exception('Ответное сообщение не инициализированно'), - default => throw new Exception('Свойство не найдено: ' . $name) + 'forward' => empty($this->forward) ? throw new Exception('Сообщения для пересылки не инициализированы') : $this->forward, + 'reply' => isset($this->reply) ? $this->reply : throw new Exception('Сообщение для ответа не инициализировано'), + default => throw new Exception("Свойство $name не найдено", 404) }; } /** * Получить информацию о сообщении по id - * + * * @param string $message_ids Идентификатор сообщения * * @return object Информация о сообщении diff --git a/hood/vk/system/api/settings.php b/hood/vk/system/api/settings.php new file mode 100644 index 0000000..227aa0c --- /dev/null +++ b/hood/vk/system/api/settings.php @@ -0,0 +1,278 @@ +_init(); + } + } + + /** + * Инициализация (безопасная) + * + * @var float|null $version Версия API + */ + public function init(float|null $version = null): self + { + if (isset($blocked)) { + // Блокировка найдена + + throw new Exception('Повторная инициализация запрещена', 500); + } + + // Блокировка + static $blocked = true; + + // Инициализация + try { + $this->_init($version); + } catch (Throwable $t) { + throw new Exception('Не удалось инициализировать API', 500, $t->getPrevious()); + } + + return $this; + } + + /** + * Реинициализация + * + * @var float|null $version Версия API + */ + public function reinit(float|null $version = null): self + { + // Буфер + $version = $version ?? $this->settings['v'] ?? null; + + // Деинициализация + $this->settings = []; + + // Инициализация + try { + $this->_init($version); + } catch (Throwable $t) { + throw new Exception('Не удалось инициализировать API', 500, $t->getPrevious()); + } + + return $this; + } + + /** + * Инициализация + * + * @var float $version Версия API + */ + protected function _init(float $version = 5.124): self + { + // Ключ + $this->settings['access_token'] = $this->robot->key; + + // Версия API + $this->settings['v'] = $version; + + return $this; + } + + /** + * Записать получателя + * + * Определяет получателей по входным параметрам + * + * @see hood\vk\api\methods\messages Сообщения + */ + public function writeDestination(string|array|int $destination): void + { + if (is_int($destination)) { + // Идентификатор + + $this->settings['peer_id'] = $destination; + } else if (is_array($destination)) { + // Идентификаторы + + $this->settings['user_ids'] = $destination; + } else if (is_string($destination)) { + // Домен + + $this->settings['domain'] = $destination; + } + + throw new Exception('Не удалось определить получателя', 500); + } + + /** + * Записать свойство + * + * @param string $name Название + * @param mixed $value Значение + */ + public function __set(string $name, mixed $value): void + { + match ($name) { + 'settings' => isset($this->settings) ? throw new Exception('Запрещено перезаписывать настройки', 500) : $this->settings = $value, + 'robot' => isset($this->robot) ? throw new Exception('Запрещено перезаписывать Робота', 500) : $this->robot = $value, + 'data' => $this->offsetSet('data', $value), + 'attachments' => $this->offsetSet('attachments', $value), + default => $this->offsetSet($name, $value) + }; + } + + /** + * Прочитать свойство + * + * @param string $name Название + */ + public function __get(string $name): mixed + { + return match ($name) { + 'settings' => $this->settings ?? throw new Exception('Настройки не инициализированы', 500), + 'robot' => $this->robot ?? throw new Exception('Робот не инициализирован', 500), + 'data' => $this->offsetGet('data'), + 'attachments' => $this->offsetGet('attachments'), + default => $this->offsetGet($name) + }; + } + + /** + * Записать по смещению + */ + public function offsetSet(mixed $offset, mixed $value): mixed + { + if (isset($this->settings)) { + if (strcasecmp($offset, 'settings') === 0) { + // Полная запись + + throw new Exception('Запрещено перезаписывать настройки', 500); + } else if ( + (strcasecmp($offset, 'data') === 0) + || (strcasecmp($offset, 'attachment') === 0) + || (strcasecmp($offset, 'attachments') === 0) + ) { + // Записать вложения + + if (is_array($value)) { + // Жесткая запись + + return $this->settings['attachments'] = $value; + } + + // Конкатенация + return $this->settings['attachments'][] = $value; + } else { + // Запись по ключу или смещению + + return $this->settings[$offset] = $value; + } + } + + throw new Exception('Настройки не инициализированы', 500); + } + + /** + * Прочитать по смещению + */ + public function &offsetGet(mixed $offset): mixed + { + if (isset($this->settings)) { + if (strcasecmp($offset, 'settings') === 0) { + // Полное чтение + + return $this->settings; + } else if (strcasecmp($offset, 'data') === 0 || strcasecmp($offset, 'attachments') === 0) { + // Прочитать вложения + + return $this->settings['attachments']; + } else if (array_key_exists($offset, $this->settings)) { + // Прочитать по ключу или смещению + + return $this->settings[$offset]; + } + + is_int($offset) ? throw new Exception("Смещение $offset не найдено", 404) : throw new Exception("Ключ $offset не найден", 404); + } + + throw new Exception('Настройки не инициализированы', 500); + } + + /** + * Проверка существования смещения + */ + public function offsetExists(mixed $offset): bool + { + if (isset($this->settings)) { + if (strcasecmp($offset, 'settings') === 0) { + // Полная проверка + + return isset($this->settings); + } else if (strcasecmp($offset, 'data') === 0 || strcasecmp($offset, 'attachments') === 0) { + // Проверка вложений + + return array_key_exists('attachments', $this->settings); + } else { + // Проверка по ключу или смещению + + return array_key_exists($offset, $this->settings); + } + } + + throw new Exception('Настройки не инициализированы', 500); + } + + /** + * Удалить по смещению + */ + public function offsetUnset(mixed $offset): void + { + if (isset($this->settings)) { + if (strcasecmp($offset, 'settings') === 0) { + // Полное удаление + + unset($this->settings); + + return; + } else if (strcasecmp($offset, 'data') === 0 || strcasecmp($offset, 'attachments') === 0) { + // Удаление вложений + + unset($this->settings['attachments']); + + return; + } else { + // Удаление по ключу или смещению + + unset($this->settings[$offset]); + + return; + } + } + + throw new Exception('Настройки не инициализированы', 500); + } +} diff --git a/hood/vk/system/core.php b/hood/vk/system/core.php index 9a4c4c6..1bd0190 100644 --- a/hood/vk/system/core.php +++ b/hood/vk/system/core.php @@ -4,10 +4,11 @@ declare(strict_types=1); namespace hood\vk; +use hood\vk\robots\robot; +use hood\vk\traits\singleton; +use hood\vk\loggers\jasmo; + use Exception; -use hood\vk\loggers\jasmo, - hood\vk\traits\singleton, - hood\vk\robots\robot; /** * Ядро @@ -23,13 +24,13 @@ use hood\vk\loggers\jasmo, * @method public function get($id = null) Чтение из реестра * * @package VK - * @author Арсен Мирзаев + * @author Арсен Мирзаев Татьяно-Мурадович */ final class core { use singleton; - /** + /** * Счётчик роботов * * @var int @@ -101,15 +102,25 @@ final class core * * @return void */ - public function set(int $id, robot $robot): void + public function write(int $id, robot $robot): void { - // if (empty($this->registry[$id])) { - // // Если нет сессий, то инициализировать - // $this->registry[$id] = []; - // } + try { + // Инициализация уникального идентификатора сессии - // Создать новую сессию и обновить счётчик роботов - $this->registry[$id][++$this->robots] = $robot; + $session = count($this->read($id)); + } catch (Exception $e) { + if ($e->getCode() === 404) { + // Робота или сессии не существует + + $session = 0; + } + } finally { + // Записать новую сессию + $this->registry[$id][$session] = $robot; + + // Прединкрементация счётчика роботов + ++$this->robots; + } } /** @@ -122,18 +133,35 @@ final class core * * @see hood\vk\traits\registry Модификация метода * - * @return mixed + * @return mixed Весь реестр, робота или сессию робота */ - public function get(int|null $id = null, int|null $session = null): mixed + public function read(int|null $id = null, int|null $session = null): mixed { - if (isset($id) && array_key_exists($id, $this->registry)) { - // Робот передан и найден - if (isset($session) && array_key_exists($session, $this->registry[$id])) { - // Сессия робота передана и найдена - return $this->registry[$id][$session]; + if (isset($id)) { + // Робот передан + + if (array_key_exists($id, $this->registry)) { + // Робот найден + + if (isset($session)) { + // Сессия робота передана + + if (array_key_exists($session, $this->registry[$id])) { + // Сессия робота найдена + + return $this->registry[$id][$session]; + } + + throw new Exception("Сессия $session робота с идентификатором $id не найдена", 404); + } + + return $this->registry[$id]; + } else { + + throw new Exception("Робот с идентификатором $id не найден", 404); } - return $this->registry[$id]; } + return $this->registry; } @@ -152,36 +180,40 @@ final class core if (isset($id)) { // Робот передан - if (!array_key_exists($id, $this->registry)) { - throw new Exception('Робот не найден'); - } + if (array_key_exists($id, $this->registry)) { + // Робот найден - if (isset($session)) { - // Сессия передана + if (isset($session)) { + // Сессия передана - if (!array_key_exists($session, $this->registry[$id])) { - throw new Exception('Сессия не найдена'); + if (array_key_exists($session, $this->registry[$id])) { + // Сессия найдена + + // Постдекрементация счётчика роботов + --$this->robots; + + // Удаление сессии + unset($this->registry[$id][$session]); + + return; + } + + throw new Exception("Сессия $session робота с идентификатором $id не найдена", 404); } - // Счётчик роботов - --$this->robots; + // Вычитание из счётчика количества сессий робота + $this->robots = $this->robots - count($this->registry[$id]); - // Удаление сессии - unset($this->registry[$id][$session]); + // Удаление робота и всех его сессий + unset($this->registry[$id]); return; } - // Счётчик роботов - $this->robots = $this->robots - count($this->registry[$id]); - - // Удаление робота и всех его сессий - unset($this->registry[$id]); - - return; + throw new Exception("Робот с идентификатором $id не найден", 404); } - // Удаление всех роботов и их сессий + // Полная очистка $this->registry = []; } @@ -196,10 +228,10 @@ final class core public function __set(mixed $name, mixed $value): void { match ($name) { - '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('Запрещено переопределять каталог временных файлов') + 'timezone' => !isset($this->timezone) ? $this->timezone = $value : throw new Exception('Запрещено переопределять часовой пояс', 500), + 'path_root' => !isset($this->path_root) ? $this->path_root = $value : throw new Exception('Запрещено переопределять корневой каталог', 500), + 'path_logs' => !isset($this->path_logs) ? $this->path_logs = $value : throw new Exception('Запрещено переопределять каталог журналов', 500), + 'path_temp' => !isset($this->path_temp) ? $this->path_temp = $value : throw new Exception('Запрещено переопределять каталог временных файлов', 500) }; } @@ -239,7 +271,7 @@ final class core // Если найден класс реализующий запрошенного робота return new $robot(...$params); } else { - throw new Exception('Не найден робот: ' . $method); + throw new Exception("Робот $method не найден", 404); } } } diff --git a/hood/vk/system/robots/group.php b/hood/vk/system/robots/group.php index b1ff823..739e396 100644 --- a/hood/vk/system/robots/group.php +++ b/hood/vk/system/robots/group.php @@ -4,11 +4,11 @@ declare(strict_types=1); namespace hood\vk\robots; -use hood\vk\robots\robot, - hood\vk\api\longpoll; +use hood\vk\robots\robot; +use hood\vk\api\longpoll; -use Throwable, - Exception; +use Throwable; +use Exception; /** * Робот-группа diff --git a/hood/vk/system/robots/robot.php b/hood/vk/system/robots/robot.php index 605b981..9cf274b 100644 --- a/hood/vk/system/robots/robot.php +++ b/hood/vk/system/robots/robot.php @@ -11,7 +11,7 @@ use GuzzleHttp\Client as browser; use hood\vk\core; use hood\vk\proxies\proxy; use hood\vk\captcha\captcha; -use hood\vk\api\api; +use hood\vk\api\settings as api; use hood\vk\api\methods\method; use hood\accounts\vk as account; @@ -31,7 +31,7 @@ use hood\accounts\vk as account; * * @var int $messages_mode Режим отправки сообщений * - * @method public function __construct(int $id = null, float $version = null) Конструктор + * @method public function __construct(int $id = null) Конструктор * @method public function key(string $key) Инициализация ключа * @method public function account(account $account) Инициализация аккаунта * @method public function __set($name, $value) Запись свойства @@ -51,11 +51,6 @@ abstract class robot */ protected int $session; - /** - * @var string Ключ - */ - protected string $key; - /** * @var string Аккаунт */ @@ -84,22 +79,24 @@ abstract class robot /** * Конструктор * - * @param int $id Идентификатор + * @param int|null $id Идентификатор + * @param string|null $key Ключ */ public function __construct( protected int|null $id = null, + protected string|null $key = null ) { // Инициализация ядра $core = core::init(); // Идентификация робота - $this->id = empty($id) ? $core->robots + 1 : $id; + $this->id = $id ?? $core->robots + 1; // Регистрация робота в ядре - $core->set($this->id, $this); + $core->write($this->id, $this); // Идентификация сессии робота - $this->session = count($core->get($this->id)); + $this->session = count($core->read($this->id)); } /** @@ -111,11 +108,7 @@ abstract class robot */ public function key(string $key): self { - if (!isset($this->key)) { - $this->key = $key; - } else { - throw new Exception('Запрещено перезаписывать ключ'); - } + $this->__set('key', $key); return $this; } @@ -129,11 +122,7 @@ abstract class robot */ public function account(account $account): self { - if (!isset($this->account)) { - $this->account = $account; - } else { - throw new Exception('Запрещено перезаписывать аккаунт'); - } + $this->__set('account', $account); return $this; } @@ -147,7 +136,7 @@ abstract class robot */ public function proxy(proxy $proxy): self { - $this->proxy = $proxy; + $this->__set('proxy', $proxy); return $this; } @@ -161,7 +150,7 @@ abstract class robot */ public function captcha(captcha $captcha): self { - $this->captcha = $captcha; + $this->__set('captcha', $captcha); return $this; } @@ -177,16 +166,16 @@ abstract class robot public function __set(string $name, mixed $value): void { match ($name) { - '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('Запрещено перезаписывать ключ'), - 'api' => !isset($this->api) ? $this->api = $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('Запрещено перезаписывать браузер'), + 'id' => isset($this->id) ? throw new Exception('Запрещено перезаписывать идентификатор', 500) : $this->id = (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, + 'api' => isset($this->api) ? throw new Exception('Запрещено перезаписывать API', 500) : $this->api = $value, + 'account' => isset($this->account) ? throw new Exception('Запрещено перезаписывать аккаунт', 500) : $this->account = $value, + 'browser' => isset($this->browser) ? throw new Exception('Запрещено перезаписывать браузер', 500) : $this->browser = $value, 'proxy' => $this->proxy = $value, 'captcha' => $this->captcha = $value, 'messages_new' => $this->messages_new = (int) $value, - default => throw new Exception('Свойство не найдено: ' . $name) + default => throw new Exception("Свойство $name не найдено", 404) }; } @@ -200,11 +189,11 @@ abstract class robot public function __get(string $name): mixed { return match ($name) { - 'id' => $this->id ?? throw new Exception('Идентификатор не инициализирован'), - 'session' => $this->session ?? throw new Exception('Сессия не инициализирована'), - 'key' => $this->key ?? throw new Exception('Ключ не инициализирован'), + 'id' => $this->id ?? throw new Exception('Идентификатор не инициализирован', 500), + 'session' => $this->session ?? throw new Exception('Сессия не инициализирована', 500), + 'key' => $this->key ?? throw new Exception('Ключ не инициализирован', 500), 'api' => $this->api ?? $this->api = new api($this), - 'account' => $this->account ?? throw new Exception('Аккаунт не инициализирован'), + 'account' => $this->account ?? throw new Exception('Аккаунт не инициализирован', 500), 'browser' => $this->browser ?? $this->browser = new browser([ 'base_uri' => 'https://api.vk.com/method/', 'cookies' => true @@ -212,7 +201,7 @@ abstract class robot 'proxy' => $this->proxy, 'captcha' => $this->captcha, 'messages_new' => $this->messages_new, - default => throw new Exception('Свойство не найдено: ' . $name) + default => throw new Exception("Свойство $name не найдено", 404) }; } @@ -235,7 +224,7 @@ abstract class robot 'proxy' => isset($this->proxy), 'captcha' => isset($this->captcha), 'messages_new' => isset($this->messages_new), - default => throw new Exception('Свойство не найдено: ' . $name) + default => throw new Exception("Свойство $name не найдено", 404) }; } @@ -257,7 +246,7 @@ abstract class robot return new $class($this, ...$params); } - throw new Exception('Метод не найден: ' . $method); + throw new Exception("Метод $method не найден", 404); } /** @@ -277,7 +266,7 @@ abstract class robot return $class(self, ...$params); } - throw new Exception('Метод не найден: ' . $method); + throw new Exception("Метод $method не найден", 404); } /** From 7bf8ca6108302c460120d1b75956c8465c33dad7 Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Wed, 31 Mar 2021 13:56:36 +1000 Subject: [PATCH 06/11] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20phpdoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hood/vk/system/api/settings.php | 3 +++ hood/vk/system/core.php | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/hood/vk/system/api/settings.php b/hood/vk/system/api/settings.php index 227aa0c..0f600b3 100644 --- a/hood/vk/system/api/settings.php +++ b/hood/vk/system/api/settings.php @@ -19,6 +19,9 @@ use ArrayAccess; * * @todo * 1. Создать __isset(), __unset() + * + * @package hood\vk\api + * @author Arsen Mirzaev Tatyano-Muradovich */ class settings implements ArrayAccess { diff --git a/hood/vk/system/core.php b/hood/vk/system/core.php index 1bd0190..f2781ae 100644 --- a/hood/vk/system/core.php +++ b/hood/vk/system/core.php @@ -23,8 +23,8 @@ use Exception; * @method public function set($id, $value) Запись в реестр * @method public function get($id = null) Чтение из реестра * - * @package VK - * @author Арсен Мирзаев Татьяно-Мурадович + * @package hood\vk + * @author Arsen Mirzaev Tatyano-Muradovich */ final class core { From 5cfdeb03fd89092431cbe735accb98490f186a14 Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Tue, 27 Jul 2021 11:17:46 +1000 Subject: [PATCH 07/11] =?UTF-8?q?=D0=A1=D0=BC=D0=B5=D0=BD=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=81=D1=82=D1=80=D0=B0=D0=BD=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D0=B0=20=D0=B8=D0=BC=D1=91=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 14 +- composer.lock | 12 +- hood/vk/system/api/callback.php | 52 ---- hood/vk/tests/api/apiTest.php | 222 -------------- hood/vk/tests/api/dataTest.php | 199 ------------- hood/vk/tests/settings.php.example | 78 ----- mirzaev/vk/system/api/callback.php | 52 ++++ {hood => mirzaev}/vk/system/api/longpoll.php | 38 ++- .../vk/system/api/methods/messages.php | 12 +- .../vk/system/api/methods/method.php | 18 +- .../vk/system/api/methods/photos.php | 16 +- {hood => mirzaev}/vk/system/api/settings.php | 86 ++++-- {hood => mirzaev}/vk/system/core.php | 42 +-- {hood => mirzaev}/vk/system/loggers/jasmo.php | 28 +- .../vk/system/loggers/logger.php | 8 +- {hood => mirzaev}/vk/system/robots/group.php | 12 +- {hood => mirzaev}/vk/system/robots/robot.php | 20 +- {hood => mirzaev}/vk/system/robots/user.php | 8 +- .../vk/system/traits/registry.php | 2 +- .../vk/system/traits/singleton.php | 4 +- .../vk/temp/191417381_0.longpoll | 0 mirzaev/vk/temp/191417381_1.longpoll | 1 + {hood => mirzaev}/vk/tests/.gitignore | 0 .../vk/tests/accounts/.gitignore | 0 mirzaev/vk/tests/api/apiTest.php | 273 ++++++++++++++++++ .../vk/tests/api/methods/messagesTest.php | 28 +- .../vk/tests/api/methods/photosTest.php | 8 +- .../vk/tests/robots/groupTest.php | 8 +- .../vk/tests/robots/userTest.php | 8 +- mirzaev/vk/tests/settings.php.example | 88 ++++++ test.php | 20 ++ 31 files changed, 632 insertions(+), 725 deletions(-) delete mode 100644 hood/vk/system/api/callback.php delete mode 100644 hood/vk/tests/api/apiTest.php delete mode 100644 hood/vk/tests/api/dataTest.php delete mode 100644 hood/vk/tests/settings.php.example create mode 100644 mirzaev/vk/system/api/callback.php rename {hood => mirzaev}/vk/system/api/longpoll.php (90%) rename {hood => mirzaev}/vk/system/api/methods/messages.php (97%) rename {hood => mirzaev}/vk/system/api/methods/method.php (90%) rename {hood => mirzaev}/vk/system/api/methods/photos.php (98%) rename {hood => mirzaev}/vk/system/api/settings.php (72%) rename {hood => mirzaev}/vk/system/core.php (87%) rename {hood => mirzaev}/vk/system/loggers/jasmo.php (95%) rename {hood => mirzaev}/vk/system/loggers/logger.php (88%) rename {hood => mirzaev}/vk/system/robots/group.php (91%) rename {hood => mirzaev}/vk/system/robots/robot.php (95%) rename {hood => mirzaev}/vk/system/robots/user.php (79%) rename {hood => mirzaev}/vk/system/traits/registry.php (97%) rename {hood => mirzaev}/vk/system/traits/singleton.php (96%) rename {hood => mirzaev}/vk/temp/191417381_0.longpoll (100%) create mode 100644 mirzaev/vk/temp/191417381_1.longpoll rename {hood => mirzaev}/vk/tests/.gitignore (100%) rename {hood => mirzaev}/vk/tests/accounts/.gitignore (100%) create mode 100644 mirzaev/vk/tests/api/apiTest.php rename {hood => mirzaev}/vk/tests/api/methods/messagesTest.php (93%) rename {hood => mirzaev}/vk/tests/api/methods/photosTest.php (97%) rename {hood => mirzaev}/vk/tests/robots/groupTest.php (98%) rename {hood => mirzaev}/vk/tests/robots/userTest.php (98%) create mode 100644 mirzaev/vk/tests/settings.php.example create mode 100644 test.php diff --git a/composer.json b/composer.json index 2bedacb..d02df92 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "hood/vk", + "name": "mirzaev/vk", "type": "framework", "description": "Фреймворк VK API", "keywords": [ @@ -7,8 +7,8 @@ "api", "hood" ], - "homepage": "https://git.hood.su/vk", - "license": "AGPL-3.0-or-later", + "homepage": "https://git.hood.su/mirzaev/vk", + "license": "free for you", "authors": [ { "name": "Arsen Mirzaev Tatyano-Muradovich", @@ -23,8 +23,8 @@ } ], "support": { - "docs": "https://git.hood.su/hood/vk/manual", - "issues": "https://git.hood.su/hood/vk/issues" + "docs": "https://git.hood.su/mirzaev/vk/manual", + "issues": "https://git.hood.su/mirzaev/vk/issues" }, "require": { "php": "~8.0", @@ -39,12 +39,12 @@ }, "autoload": { "psr-4": { - "hood\\vk\\": "hood/vk/system" + "mirzaev\\vk\\": "mirzaev/vk/system" } }, "autoload-dev": { "psr-4": { - "hood\\vk\\tests\\": "hood/vk/tests" + "mirzaev\\vk\\tests\\": "mirzaev/vk/tests" } } } diff --git a/composer.lock b/composer.lock index 09f5044..3462236 100644 --- a/composer.lock +++ b/composer.lock @@ -166,16 +166,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.8.1", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "35ea11d335fd638b5882ff1725228b3d35496ab1" + "reference": "dc960a912984efb74d0a90222870c72c87f10c91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/35ea11d335fd638b5882ff1725228b3d35496ab1", - "reference": "35ea11d335fd638b5882ff1725228b3d35496ab1", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", + "reference": "dc960a912984efb74d0a90222870c72c87f10c91", "shasum": "" }, "require": { @@ -235,9 +235,9 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.1" + "source": "https://github.com/guzzle/psr7/tree/1.8.2" }, - "time": "2021-03-21T16:25:00+00:00" + "time": "2021-04-26T09:17:50+00:00" }, { "name": "hood/accounts", diff --git a/hood/vk/system/api/callback.php b/hood/vk/system/api/callback.php deleted file mode 100644 index 13a5377..0000000 --- a/hood/vk/system/api/callback.php +++ /dev/null @@ -1,52 +0,0 @@ -secret_key = $_ENV['CALLBACK_SECRET_KEY']; - $this->url = $_ENV['SERVER_DOMAIN']; - $this->group_id = $group->id; - $this->group_id->request('groups.addCallbackServer', [ - 'group_id' => $this->group_id, - 'url' => $this->url, - 'title' => $this->group_id . 'CallBackServer', - 'secret_key' => $this->secret_key - ]); - // $this->confirmation_token = request('groups.getCallbackConfirmationCode', [$this->group_id]); - echo $this->confirmation_token; - } - - public function sendOk(){ - echo 'ok'; - } -} \ No newline at end of file diff --git a/hood/vk/tests/api/apiTest.php b/hood/vk/tests/api/apiTest.php deleted file mode 100644 index 081cffc..0000000 --- a/hood/vk/tests/api/apiTest.php +++ /dev/null @@ -1,222 +0,0 @@ -ssl = self::$ssl ?? true; - - if (empty(self::$key)) { - // Если не указан ключ - - // Проверка входных данных - if (empty(self::$login)) { - self::markTestSkipped('Не инициализирован входной аккаунта'); - } else if (empty(self::$password)) { - self::markTestSkipped('Не инициализирован пароль аккаунта'); - } - - // Деаутентификация (на всякий случай) - self::$account->deauth(); - - // Аутентификация и генерация ключа - self::$key = self::$account->auth(self::$login, self::$password)->key(self::$project_id); - } - - $this->assertNotNull(self::$key, 'Ошибка при инициализации ключа аккаунта'); - } - - /** - * @testdox Деинициализация аккаунта - * @afterClass - */ - public static function testAccountDeinit(): void - { - // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); - - // Деаутентификация - self::$account->deauth(); - } - - /** - * @testdox Инициализация робота - * @before - */ - public function testRobotGroupInit(): void - { - // Инициализация ядра - self::$core = core::init(); - - // Сохранение количества роботов - $count = self::$core->robots; - - // Инициализация робота - self::$robot = self::$core->group(empty(self::$group_id) ? rand(0, 10) : self::$group_id); - - // Проверка - $this->assertEquals(self::$core->robots, $count + 1, 'Ошибка при инициализации робота'); - } - - /** - * @testdox Деинициализация робота - * @after - */ - public function testRobotGroupDeinit(): void - { - // Очистка реестра - self::$core->delete(); - - // Проверка - $this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота'); - } - - /** - * @testdox Инициализация (безопасная) - */ - public function testSafeInit(): void - { - // Инициализация - $settings = self::$robot->key(self::$group_key)->api->init(); - - // Проверка - $this->assertNotNull($settings['access_token']); - $this->assertNotNull($settings['v']); - } - - /** - * @testdox Реинициализация - */ - public function testReinit(): void - { - // Реинициализация - self::$robot->key(self::$group_key)->api->reinit(); - } - - /** - * @testdox Чтение робота - */ - public function testReadRobot(): void - { - // Чтение робота - $this->assertNotNull(self::$robot->key(self::$group_key)->api->robot); - } - - /** - * @testdox Запись настроек - */ - public function testWriteSettings(): void - { - // Проверка выброса исключения - $this->expectExceptionMessage('Запрещено перезаписывать настройки'); - - // Запись настроек - self::$robot->key(self::$group_key)->api['settings'] = ['settings']; - - // Проверка - $this->assertTrue(!empty(self::$robot->api(['settings']))); - } - - /** - * @testdox Чтение элемента настроек - */ - public function testReadSettingsElement(): void - { - // Проверка выброса исключения - $this->expectExceptionMessage('Не найдено: settings[\'element\']'); - - // Чтение элемента настроек - self::$robot->key(self::$group_key)->api['element']; - } - - /** - * @testdox Запись элемента настроек - */ - public function testWriteSettingsElement(): void - { - // Запись элемента настроек - self::$robot->key(self::$group_key)->api['element'] = 'element'; - - // Проверка - $this->assertNotNull(self::$robot->api['element']); - } - - /** - * @testdox Выбор получателя по идентификатору - */ - public function testchooseDestinationById(): void - { - // Выбор получателя по идентификатору - self::$robot->key(self::$group_key)->api->chooseDestination(12345); - - // Проверка - $this->assertNotNull(self::$robot->api['peer_id']); - } - - /** - * @testdox Выбор получателей по идентификаторам - */ - public function testchooseDestinationByIds(): void - { - // Выбор получателей по идентификаторам - self::$robot->key(self::$group_key)->api->chooseDestination([12345, 12345]); - - // Проверка - $this->assertNotNull(self::$robot->api['user_ids']); - } - - /** - * @testdox Выбор получателя по домену - */ - public function testchooseDestinationByDomain(): void - { - // Выбор получателя по домену - self::$robot->key(self::$group_key)->api->chooseDestination('domain'); - - // Проверка - $this->assertNotNull(self::$robot->api['domain']); - } -} diff --git a/hood/vk/tests/api/dataTest.php b/hood/vk/tests/api/dataTest.php deleted file mode 100644 index dd95e3f..0000000 --- a/hood/vk/tests/api/dataTest.php +++ /dev/null @@ -1,199 +0,0 @@ -ssl = self::$ssl ?? true; - - if (empty(self::$key)) { - // Если не указан ключ - - // Проверка входных данных - if (empty(self::$login)) { - self::markTestSkipped('Не инициализирован входной аккаунта'); - } else if (empty(self::$password)) { - self::markTestSkipped('Не инициализирован пароль аккаунта'); - } - - // Деаутентификация (на всякий случай) - self::$account->deauth(); - - // Аутентификация и генерация ключа - self::$key = self::$account->auth(self::$login, self::$password)->key(self::$project_id); - } - - $this->assertNotNull(self::$key, 'Ошибка при инициализации ключа аккаунта'); - } - - /** - * @testdox Деинициализация аккаунта - * @afterClass - */ - public static function testAccountDeinit(): void - { - // Инициализация аккаунта - self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts); - - // Деаутентификация - self::$account->deauth(); - } - - /** - * @testdox Инициализация робота - * @before - */ - public function testRobotGroupInit(): void - { - // Инициализация ядра - self::$core = core::init(); - - // Сохранение количества роботов - $count = self::$core->robots; - - // Инициализация робота - self::$robot = self::$core->group(empty(self::$group_id) ? rand(0, 10) : self::$group_id); - - // Проверка - $this->assertEquals(self::$core->robots, $count + 1, 'Ошибка при инициализации робота'); - } - - /** - * @testdox Деинициализация робота - * @after - */ - public function testRobotGroupDeinit(): void - { - // Очистка реестра - self::$core->delete(); - - // Проверка - $this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота'); - } - - /** - * @testdox Инициализация вложений - * @before - */ - public function testDataInit(): void - { - - if (isset(self::$robot)) { - - // Инициализация вложений - self::$data = new data(self::$robot); - } - } - - /** - * @testdox Чтение вложений - */ - public function testReadAttachments(): void - { - // Проверка - $this->assertIsArray(self::$data->data); - } - - /** - * @testdox Запись вложения - */ - public function testWriteAttachment(): void - { - // Запись вложения - self::$data->addData('Вложение'); - - // Проверка - $this->assertNotEmpty(self::$data->data); - } - - /** - * @testdox Запись вложения (повторная) - */ - public function testWriteAttachmentWhenItIsAlreadyWrited(): void - { - //Запись вложения - self::$data->addData('Вложение'); - - // Повторная запись вложения - self::$data->addData('Вложение'); - - // Проверка - $this->assertSame(['Вложение', 'Вложение'], self::$data->data); - } - - /** - * @testdox Запись более 10 вложений - */ - public function testWriteAttachmentWhenLimitIsExceed() - { - // Проверка выброса исключения - $this->expectExceptionMessage('Превышен лимит вложений (10)'); - - //Запись вложений - self::$data->addData('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'); - } - - /** - * @testdox Очистка вложений - */ - public function testClearAttachments(): void - { - //Запись вложения - self::$data->addData('Вложение'); - - // Очистка вложений - self::$data->clear(); - - // Проверка - $this->assertEmpty(self::$data->data); - } -} diff --git a/hood/vk/tests/settings.php.example b/hood/vk/tests/settings.php.example deleted file mode 100644 index 428303d..0000000 --- a/hood/vk/tests/settings.php.example +++ /dev/null @@ -1,78 +0,0 @@ -secret_key = $_ENV['CALLBACK_SECRET_KEY']; +// $this->url = $_ENV['SERVER_DOMAIN']; +// $this->group_id = $group->id; +// $this->group_id->request('groups.addCallbackServer', [ +// 'group_id' => $this->group_id, +// 'url' => $this->url, +// 'title' => $this->group_id . 'CallBackServer', +// 'secret_key' => $this->secret_key +// ]); +// // $this->confirmation_token = request('groups.getCallbackConfirmationCode', [$this->group_id]); +// echo $this->confirmation_token; +// } + +// public function sendOk(){ +// echo 'ok'; +// } +// } diff --git a/hood/vk/system/api/longpoll.php b/mirzaev/vk/system/api/longpoll.php similarity index 90% rename from hood/vk/system/api/longpoll.php rename to mirzaev/vk/system/api/longpoll.php index 8c38b32..dc72770 100644 --- a/hood/vk/system/api/longpoll.php +++ b/mirzaev/vk/system/api/longpoll.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace hood\vk\api; +namespace mirzaev\vk\api; use Exception; -use hood\vk\core, - hood\vk\robots\robot; +use mirzaev\vk\core, + mirzaev\vk\robots\robot; /** * LongPoll @@ -23,7 +23,7 @@ use hood\vk\core, * @see https://vk.com/dev/groups.getLongPollServer * @see https://vk.com/dev/groups.setLongPollSettings * - * @package hood\vk\api + * @package mirzaev\vk\api * @author Arsen Mirzaev Tatyano-Muradovich * * @todo Добавить обработку ошибок ($request['errors];) @@ -66,13 +66,10 @@ final class longpoll */ public function __construct(private robot $robot) { - // Инициализация робота - 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 (empty($robot->id)) throw new Exception('Необходимо указать идентификатор ВКонтакте'); + if (empty($robot->key)) throw new Exception('Необходимо указать ключ для доступа к LongPoll'); + if (empty($robot->api['v'])) throw new Exception('Необходимо указать версию используемого API ВКонтакте'); // Остановка процессов-дубликатов if (!file_exists(core::init()->path_temp)) { @@ -185,6 +182,8 @@ final class longpoll * * @param int $wait Время ожидания новых событий (в секундах) * + * @todo Проверка на ошибки запроса, включая на наличие доступа к лонгполл у ключа + * * @return array */ public function get(int $wait = 25): array @@ -201,16 +200,25 @@ final class longpoll // Запрос на получение доступа и данных LongPoll-сервера $response = json_decode($this->robot->browser->request(method: 'POST', uri: 'groups.getLongPollServer', options: [ 'form_params' => $this->robot->api['settings'] - ])->getBody()->getContents())->response; + ])->getBody()->getContents()); + + if (isset($response->error)) { + // Что-то сделать + + var_export($response->error); die; + } + + // Инициализация + $response = $response->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; } // Запрос на получение событий diff --git a/hood/vk/system/api/methods/messages.php b/mirzaev/vk/system/api/methods/messages.php similarity index 97% rename from hood/vk/system/api/methods/messages.php rename to mirzaev/vk/system/api/methods/messages.php index 4ed11be..65aa82e 100644 --- a/hood/vk/system/api/methods/messages.php +++ b/mirzaev/vk/system/api/methods/messages.php @@ -2,14 +2,14 @@ declare(strict_types=1); -namespace hood\vk\api\methods; +namespace mirzaev\vk\api\methods; use Exception; -use hood\accounts\vk; -use hood\vk\robots\robot; -use hood\vk\api\data; -use hood\vk\robots\group; +use mirzaev\accounts\vk; +use mirzaev\vk\robots\robot; +use mirzaev\vk\api\data; +use mirzaev\vk\robots\group; /** * Сообщение @@ -19,7 +19,7 @@ use hood\vk\robots\group; * @see https://vk.com/dev/messages.send * @see https://vk.com/dev/messages.getById * - * @package hood\vk\api + * @package mirzaev\vk\api * @author Arsen Mirzaev Tatyano-Muradovich * * @todo Доработать строгий режим отправки: проверку сообщения в беседе (не имеет ID сообщений) diff --git a/hood/vk/system/api/methods/method.php b/mirzaev/vk/system/api/methods/method.php similarity index 90% rename from hood/vk/system/api/methods/method.php rename to mirzaev/vk/system/api/methods/method.php index 7caf90c..389e558 100644 --- a/hood/vk/system/api/methods/method.php +++ b/mirzaev/vk/system/api/methods/method.php @@ -2,26 +2,26 @@ declare(strict_types=1); -namespace hood\vk\api\methods; +namespace mirzaev\vk\api\methods; -use hood\vk\robots\robot; +use mirzaev\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) Удалить - * - * @package hood\vk\api\methods + * + * @package mirzaev\vk\api\methods * @author Arsen Mirzaev Tatyano-Muradovich */ abstract class method { /** * Создать - * + * * @return array Ответ сервера */ public static function put(): array @@ -31,7 +31,7 @@ abstract class method /** * Изменить - * + * * @return array Ответ сервера */ public static function post(): array @@ -41,7 +41,7 @@ abstract class method /** * Получить - * + * * @return array Ответ сервера */ public static function get(): array @@ -51,7 +51,7 @@ abstract class method /** * Удалить - * + * * @return array Ответ сервера */ public static function delete(): array diff --git a/hood/vk/system/api/methods/photos.php b/mirzaev/vk/system/api/methods/photos.php similarity index 98% rename from hood/vk/system/api/methods/photos.php rename to mirzaev/vk/system/api/methods/photos.php index 6c32312..ce5f6b4 100644 --- a/hood/vk/system/api/methods/photos.php +++ b/mirzaev/vk/system/api/methods/photos.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace hood\vk\api\methods; +namespace mirzaev\vk\api\methods; -use hood\vk\robots\robot, - hood\vk\robots\group; +use mirzaev\vk\robots\robot, + mirzaev\vk\robots\group; -use hood\accounts\vk as account; +use mirzaev\accounts\vk as account; use Exception; @@ -19,7 +19,7 @@ use Exception; * @see https://vk.com/dev/photos.getUploadServer * @see https://vk.com/dev/messages.getById * - * @package hood\vk\api\methods + * @package mirzaev\vk\api\methods * @author Arsen Mirzaev Tatyano-Muradovich * * @todo Добавить обработку ошибок ($request['errors];) @@ -194,7 +194,7 @@ final class photos extends method /** * Получить адрес сервера сообщений - * + * * @return object */ public function getMessageServer(): object @@ -245,7 +245,7 @@ final class photos extends method return $request; } - /** + /** * Получить id фото для сообщения * * $robot робот @@ -291,6 +291,6 @@ final class photos extends method $request; // Ссылка на фото return 'photo' . $request->response[0]->owner_id . '_' . $request->response[0]->id; - + } } diff --git a/hood/vk/system/api/settings.php b/mirzaev/vk/system/api/settings.php similarity index 72% rename from hood/vk/system/api/settings.php rename to mirzaev/vk/system/api/settings.php index 0f600b3..b3292d8 100644 --- a/hood/vk/system/api/settings.php +++ b/mirzaev/vk/system/api/settings.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace hood\vk\api; +namespace mirzaev\vk\api; -use hood\vk\robots\robot; +use mirzaev\vk\robots\robot; use Throwable; use Exception; @@ -20,11 +20,18 @@ use ArrayAccess; * @todo * 1. Создать __isset(), __unset() * - * @package hood\vk\api + * @package mirzaev\vk\api * @author Arsen Mirzaev Tatyano-Muradovich */ class settings implements ArrayAccess { + /** + * Версия API ВКонтакте по умолчанию + * + * Должна иметь тип string потому, что PHP при стандартных настройках удаляет нули у float + */ + protected const VK_API_VERSION_DEFAULT = '5.130'; + /** * Конструктор */ @@ -43,18 +50,21 @@ class settings implements ArrayAccess /** * Инициализация (безопасная) * - * @var float|null $version Версия API + * @var float $version Версия API (переопределять не рекомендуется) */ - public function init(float|null $version = null): self + public function init(string $version = self::VK_API_VERSION_DEFAULT): self { - if (isset($blocked)) { + // Инициализация + static $blocked = false; + + if ($blocked) { // Блокировка найдена throw new Exception('Повторная инициализация запрещена', 500); } // Блокировка - static $blocked = true; + $blocked = true; // Инициализация try { @@ -69,9 +79,9 @@ class settings implements ArrayAccess /** * Реинициализация * - * @var float|null $version Версия API + * @var float $version Версия API (переопределять не рекомендуется) */ - public function reinit(float|null $version = null): self + public function reinit(string $version = null): self { // Буфер $version = $version ?? $this->settings['v'] ?? null; @@ -92,9 +102,9 @@ class settings implements ArrayAccess /** * Инициализация * - * @var float $version Версия API + * @var float $version Версия API (переопределять не рекомендуется) */ - protected function _init(float $version = 5.124): self + protected function _init(string $version = self::VK_API_VERSION_DEFAULT): self { // Ключ $this->settings['access_token'] = $this->robot->key; @@ -106,26 +116,30 @@ class settings implements ArrayAccess } /** - * Записать получателя + * Определить и записать получателя * - * Определяет получателей по входным параметрам - * - * @see hood\vk\api\methods\messages Сообщения + * @see mirzaev\vk\api\methods\messages Сообщения */ - public function writeDestination(string|array|int $destination): void + public function destination(string|array|int $target): self { - if (is_int($destination)) { + if (is_int($target)) { // Идентификатор - $this->settings['peer_id'] = $destination; - } else if (is_array($destination)) { + $this->settings['peer_id'] = $target; + + return $this; + } else if (is_array($target)) { // Идентификаторы - $this->settings['user_ids'] = $destination; - } else if (is_string($destination)) { + $this->settings['user_ids'] = $target; + + return $this; + } else if (is_string($target)) { // Домен - $this->settings['domain'] = $destination; + $this->settings['domain'] = $target; + + return $this; } throw new Exception('Не удалось определить получателя', 500); @@ -142,8 +156,7 @@ class settings implements ArrayAccess match ($name) { 'settings' => isset($this->settings) ? throw new Exception('Запрещено перезаписывать настройки', 500) : $this->settings = $value, 'robot' => isset($this->robot) ? throw new Exception('Запрещено перезаписывать Робота', 500) : $this->robot = $value, - 'data' => $this->offsetSet('data', $value), - 'attachments' => $this->offsetSet('attachments', $value), + 'data', 'attachments' => $this->offsetSet('attachments', $value), default => $this->offsetSet($name, $value) }; } @@ -158,12 +171,21 @@ class settings implements ArrayAccess return match ($name) { 'settings' => $this->settings ?? throw new Exception('Настройки не инициализированы', 500), 'robot' => $this->robot ?? throw new Exception('Робот не инициализирован', 500), - 'data' => $this->offsetGet('data'), - 'attachments' => $this->offsetGet('attachments'), + 'data', 'attachments' => $this->offsetGet('attachments'), default => $this->offsetGet($name) }; } + // public function __unset(string $name): void + // { + // match ($name) { + // 'settings' => throw new Exception('Запрещено удалять настройки', 500), + // 'robot' => throw new Exception('Запрещено удалять робота', 500), + // 'data', 'attachments' => $this->offsetUnset('attachments'), + // default => $this->offsetUnset($name) + // }; + // } + /** * Записать по смещению */ @@ -187,8 +209,14 @@ class settings implements ArrayAccess return $this->settings['attachments'] = $value; } - // Конкатенация - return $this->settings['attachments'][] = $value; + if (empty($this->settings['attachments']) || count($this->settings['attachments']) < 10) { + // Записано менее чем 10 вложений (от 0 до 9) + + // Запись (конкатенация) + return $this->settings['attachments'][] = $value; + } + + throw new Exception('Превышено ограничение на 10 вложений', 500); } else { // Запись по ключу или смещению @@ -219,7 +247,7 @@ class settings implements ArrayAccess return $this->settings[$offset]; } - is_int($offset) ? throw new Exception("Смещение $offset не найдено", 404) : throw new Exception("Ключ $offset не найден", 404); + throw new Exception(is_int($offset) ? "Смещение $offset не найдено" : "Ключ $offset не найден", 404); } throw new Exception('Настройки не инициализированы', 500); diff --git a/hood/vk/system/core.php b/mirzaev/vk/system/core.php similarity index 87% rename from hood/vk/system/core.php rename to mirzaev/vk/system/core.php index f2781ae..900f6b0 100644 --- a/hood/vk/system/core.php +++ b/mirzaev/vk/system/core.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace hood\vk; +namespace mirzaev\vk; -use hood\vk\robots\robot; -use hood\vk\traits\singleton; -use hood\vk\loggers\jasmo; +use mirzaev\vk\robots\robot; +use mirzaev\vk\traits\singleton; +use mirzaev\vk\loggers\jasmo; use Exception; @@ -23,7 +23,7 @@ use Exception; * @method public function set($id, $value) Запись в реестр * @method public function get($id = null) Чтение из реестра * - * @package hood\vk + * @package mirzaev\vk * @author Arsen Mirzaev Tatyano-Muradovich */ final class core @@ -75,16 +75,14 @@ final class core private string $path_temp; /** - * Журналист + * Запись в журнал * * @param string $file Файл для журналирования * - * @return self - * * @todo Добавить установку иного журналиста по спецификации PSR-3 * @todo Более гибкое журналирование */ - public function log(string $file = null): self + public function journal(string $file = null): self { // Инициализация журналиста (требует переработки) jasmo::init()::post($file)::postErrorHandler()::postShutdownHandler(); @@ -98,9 +96,7 @@ final class core * @param int $id * @param robot $robot * - * @see hood\vk\traits\registry Модификация метода - * - * @return void + * @see mirzaev\vk\traits\registry Модификация метода */ public function write(int $id, robot $robot): void { @@ -131,7 +127,7 @@ final class core * @param int|null $id Идентификатор * @param int|null $session Сессия * - * @see hood\vk\traits\registry Модификация метода + * @see mirzaev\vk\traits\registry Модификация метода * * @return mixed Весь реестр, робота или сессию робота */ @@ -171,9 +167,7 @@ final class core * @param int|null $id Идентификатор * @param int|null $session Сессия * - * @see hood\vk\traits\registry Модификация метода - * - * @return void + * @see mirzaev\vk\traits\registry Модификация метода */ public function delete(int|null $id = null, int|null $session = null): void { @@ -222,8 +216,6 @@ final class core * * @param mixed $name Название * @param mixed $value Значение - * - * @return void */ public function __set(mixed $name, mixed $value): void { @@ -239,17 +231,15 @@ final class core * Прочитать свойство * * @param mixed $name Название - * - * @return mixed */ public function __get(mixed $name): mixed { return match ($name) { '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, + 'timezone' => $this->timezone ?? $this->timezone = 'Europe/Moscow', + 'path_root' => $this->path_root ?? $this->path_root = dirname(__DIR__), + 'path_logs' => $this->path_logs ?? $this->path_logs = $this->__get('path_root') . '/logs', + 'path_temp' => $this->path_temp ?? $this->path_temp = $this->__get('path_root') . '/temp', default => null }; } @@ -262,12 +252,10 @@ final class core * * @param string $method Метод * @param array $params Параметры - * - * @return robot */ public function __call(string $method, array $params): robot { - if (class_exists($robot = '\\hood\\vk\\robots\\' . $method)) { + if (class_exists($robot = '\\mirzaev\\vk\\robots\\' . $method)) { // Если найден класс реализующий запрошенного робота return new $robot(...$params); } else { diff --git a/hood/vk/system/loggers/jasmo.php b/mirzaev/vk/system/loggers/jasmo.php similarity index 95% rename from hood/vk/system/loggers/jasmo.php rename to mirzaev/vk/system/loggers/jasmo.php index 6aebe22..960b948 100644 --- a/hood/vk/system/loggers/jasmo.php +++ b/mirzaev/vk/system/loggers/jasmo.php @@ -2,25 +2,25 @@ declare(strict_types=1); -namespace hood\vk\loggers; +namespace mirzaev\vk\loggers; use DateTime; use Monolog\logger; use Monolog\Handler\StreamHandler; use Jasny\ErrorHandler; -use hood\vk\core, - hood\vk\traits\singleton; +use mirzaev\vk\core, + mirzaev\vk\traits\singleton; /** * Журналист Jasmo - * - * Основан на "monolog/monolog" и "jasny/error-handler" + * + * Основан на "monolog/monolog" и "jasny/error-handler" * Jasmo = Jasny + Monolog - * + * * @see Monolog\logger * @see Jasny\ErrorHandler - * - * @package hood\vk\loggers + * + * @package mirzaev\vk\loggers * @author Arsen Mirzaev Tatyano-Muradovich */ final class jasmo extends logger @@ -37,7 +37,7 @@ final class jasmo extends logger // /** // * Экземпляр класса обработчика ошибок // * - // * @var ErrorHandler + // * @var ErrorHandler // */ // public ErrorHandler $handler; @@ -45,15 +45,15 @@ final class jasmo extends logger { $file = $file ?? date_format(new DateTime(core::init()->timezone), 'Y.m.d'); - /** + /** * Создание логгера по спецификации PSR-3 (Monolog) - * + * * @param string Название канала логирования */ self::$logger = new logger(__CLASS__); - /** - * Создание обработчиков (порядок обязателен) + /** + * Создание обработчиков (порядок обязателен) */ self::$logger->pushHandler(new StreamHandler(core::init()->path['logs'] . "/${file}-INFO.log", logger::INFO, false)); // Инфомация о процессе работы self::$logger->pushHandler(new StreamHandler(core::init()->path['logs'] . "/${file}-NOTICE.log", logger::NOTICE, false)); // Уведомления @@ -89,7 +89,7 @@ final class jasmo extends logger public static function postErrorHandler(): ?jasmo { - /** + /** * Подключение логгера в обработчик ошибок (Jasny) */ $handler = new ErrorHandler(self::$logger); diff --git a/hood/vk/system/loggers/logger.php b/mirzaev/vk/system/loggers/logger.php similarity index 88% rename from hood/vk/system/loggers/logger.php rename to mirzaev/vk/system/loggers/logger.php index 68b45d1..daef2c0 100644 --- a/hood/vk/system/loggers/logger.php +++ b/mirzaev/vk/system/loggers/logger.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace hood\vk\loggers; +namespace mirzaev\vk\loggers; /** * Абстрактный класс журналиста - * - * @package hood\vk\loggers + * + * @package mirzaev\vk\loggers * @author Arsen Mirzaev Tatyano-Muradovich */ abstract class logger @@ -22,4 +22,4 @@ abstract class logger abstract static public function post($file = null): ?logger; abstract static public function get(): ?logger; abstract static public function delete(): ?logger; -} \ No newline at end of file +} diff --git a/hood/vk/system/robots/group.php b/mirzaev/vk/system/robots/group.php similarity index 91% rename from hood/vk/system/robots/group.php rename to mirzaev/vk/system/robots/group.php index 739e396..9f644ad 100644 --- a/hood/vk/system/robots/group.php +++ b/mirzaev/vk/system/robots/group.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace hood\vk\robots; +namespace mirzaev\vk\robots; -use hood\vk\robots\robot; -use hood\vk\api\longpoll; +use mirzaev\vk\robots\robot; +use mirzaev\vk\api\longpoll; use Throwable; use Exception; @@ -19,7 +19,7 @@ use Exception; * @method public function __get($name) Чтение свойства * @method public function __isset($name) Проверка на инициализированность свойства * - * @package hood\vk\robots + * @package mirzaev\vk\robots * @author Arsen Mirzaev Tatyano-Muradovich */ final class group extends robot @@ -35,7 +35,7 @@ final class group extends robot * @param string $name Название * @param mixed $value Значение * - * @see hood\vk\robots\robot Наследуемый метод + * @see mirzaev\vk\robots\robot Наследуемый метод * * @return void */ @@ -58,7 +58,7 @@ final class group extends robot * * @param string $name Название * - * @see hood\vk\robots\robot Наследуемый метод + * @see mirzaev\vk\robots\robot Наследуемый метод * * @return mixed */ diff --git a/hood/vk/system/robots/robot.php b/mirzaev/vk/system/robots/robot.php similarity index 95% rename from hood/vk/system/robots/robot.php rename to mirzaev/vk/system/robots/robot.php index 9cf274b..1323304 100644 --- a/hood/vk/system/robots/robot.php +++ b/mirzaev/vk/system/robots/robot.php @@ -2,19 +2,19 @@ declare(strict_types=1); -namespace hood\vk\robots; +namespace mirzaev\vk\robots; use Exception; use GuzzleHttp\Client as browser; -use hood\vk\core; -use hood\vk\proxies\proxy; -use hood\vk\captcha\captcha; -use hood\vk\api\settings as api; -use hood\vk\api\methods\method; +use mirzaev\vk\core; +use mirzaev\vk\proxies\proxy; +use mirzaev\vk\captcha\captcha; +use mirzaev\vk\api\settings as api; +use mirzaev\vk\api\methods\method; -use hood\accounts\vk as account; +use mirzaev\accounts\vk as account; /** @@ -41,7 +41,7 @@ use hood\accounts\vk as account; * @method public static function __callStatic(string $method, array $params) Вызов статического метода * @method public function __toString() Конвертация в строку * - * @package hood\vk\robots + * @package mirzaev\vk\robots * @author Arsen Mirzaev Tatyano-Muradovich */ abstract class robot @@ -241,7 +241,7 @@ abstract class robot */ public function __call(string $method, array $params): method { - if (class_exists($class = '\\hood\\vk\\api\\methods\\' . $method . 's')) { + if (class_exists($class = '\\mirzaev\\vk\\api\\methods\\' . $method . 's')) { // Если найден класс реализующий запрошенный метод return new $class($this, ...$params); } @@ -262,7 +262,7 @@ abstract class robot */ public static function __callStatic(string $method, array $params): method { - if (class_exists($class = '\\hood\\vk\\api\\methods\\' . $method . 's')) { + if (class_exists($class = '\\mirzaev\\vk\\api\\methods\\' . $method . 's')) { return $class(self, ...$params); } diff --git a/hood/vk/system/robots/user.php b/mirzaev/vk/system/robots/user.php similarity index 79% rename from hood/vk/system/robots/user.php rename to mirzaev/vk/system/robots/user.php index 8bf401c..7bb878d 100644 --- a/hood/vk/system/robots/user.php +++ b/mirzaev/vk/system/robots/user.php @@ -2,16 +2,16 @@ declare(strict_types=1); -namespace hood\vk\robots; +namespace mirzaev\vk\robots; -use hood\vk\robots\robot; +use mirzaev\vk\robots\robot; -use hood\accounts\vk as account; +use mirzaev\accounts\vk as account; /** * Робот-пользователь * - * @package hood\vk\robots + * @package mirzaev\vk\robots * @author Arsen Mirzaev Tatyano-Muradovich */ final class user extends robot diff --git a/hood/vk/system/traits/registry.php b/mirzaev/vk/system/traits/registry.php similarity index 97% rename from hood/vk/system/traits/registry.php rename to mirzaev/vk/system/traits/registry.php index b50adbd..fe6b2e3 100644 --- a/hood/vk/system/traits/registry.php +++ b/mirzaev/vk/system/traits/registry.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace hood\vk\traits; +namespace mirzaev\vk\traits; /** * Паттерн registry diff --git a/hood/vk/system/traits/singleton.php b/mirzaev/vk/system/traits/singleton.php similarity index 96% rename from hood/vk/system/traits/singleton.php rename to mirzaev/vk/system/traits/singleton.php index bcb92b2..d8b354e 100644 --- a/hood/vk/system/traits/singleton.php +++ b/mirzaev/vk/system/traits/singleton.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace hood\vk\traits; +namespace mirzaev\vk\traits; use Exception; @@ -27,7 +27,7 @@ trait singleton /** * Инициализация - * + * * @return self */ public static function init(): self diff --git a/hood/vk/temp/191417381_0.longpoll b/mirzaev/vk/temp/191417381_0.longpoll similarity index 100% rename from hood/vk/temp/191417381_0.longpoll rename to mirzaev/vk/temp/191417381_0.longpoll diff --git a/mirzaev/vk/temp/191417381_1.longpoll b/mirzaev/vk/temp/191417381_1.longpoll new file mode 100644 index 0000000..c750cc8 --- /dev/null +++ b/mirzaev/vk/temp/191417381_1.longpoll @@ -0,0 +1 @@ +9104 \ No newline at end of file diff --git a/hood/vk/tests/.gitignore b/mirzaev/vk/tests/.gitignore similarity index 100% rename from hood/vk/tests/.gitignore rename to mirzaev/vk/tests/.gitignore diff --git a/hood/vk/tests/accounts/.gitignore b/mirzaev/vk/tests/accounts/.gitignore similarity index 100% rename from hood/vk/tests/accounts/.gitignore rename to mirzaev/vk/tests/accounts/.gitignore diff --git a/mirzaev/vk/tests/api/apiTest.php b/mirzaev/vk/tests/api/apiTest.php new file mode 100644 index 0000000..14189dd --- /dev/null +++ b/mirzaev/vk/tests/api/apiTest.php @@ -0,0 +1,273 @@ +ssl = self::$ssl ?? true; + + if (empty(self::$key)) { + // Если не указан ключ + + // Проверка входных данных + if (empty(self::$login)) { + self::markTestSkipped('Не инициализирован входной аккаунта'); + } else if (empty(self::$password)) { + self::markTestSkipped('Не инициализирован пароль аккаунта'); + } + + // Деаутентификация (на всякий случай) + self::$account->deauth(); + + // Аутентификация и генерация ключа + self::$key = self::$account->auth(self::$login, self::$password)->key(self::$project_id); + } + + $this->assertNotNull(self::$key, 'Ошибка при инициализации ключа аккаунта'); + } + + /** + * @testdox Деинициализация аккаунта + * @afterClass + */ + public static function testAccountDeinit(): void + { + // Инициализация аккаунта + self::$account = new account(self::$id ?? rand(0, 10), self::$path_accounts); + + // Деаутентификация + self::$account->deauth(); + } + + /** + * @testdox Инициализация робота-группы + * @before + */ + public function testRobotGroupInit(): void + { + // Инициализация ядра + self::$core = core::init(); + + // Сохранение количества роботов + $count = self::$core->robots; + + // Инициализация робота + self::$robot = self::$core->group(self::$group_id ?? rand(0, 10)); + + // Проверка + $this->assertSame(self::$core->robots, $count + 1, 'Ошибка при инициализации робота-группы'); + } + + /** + * @testdox Деинициализация робота-группы + * @after + */ + public function testRobotGroupDeinit(): void + { + // Очистка реестра + self::$core->delete(); + + // Проверка выброса исключения (НЕ РАБОТАЕТ, ВЕРОЯТНО БАГ) + // $this->expectExceptionMessage('Робот с идентификатором ' . self::$robot->id . ' не найден'); + // $this->expectExceptionCode(404); + + try { + // Чтение + self::$core->read(self::$robot->id); + } catch (RealException $e) { + // Проверка + $this->assertSame('Робот с идентификатором ' . self::$robot->id . ' не найден', $e->getMessage(), 'Не удалось удалить робота'); + } + } + + /** + * @testdox Инициализация + */ + public function testInit(): void + { + // Инициализация + $settings = self::$robot->key(self::$group_key)->api->init(self::$version); + + // Проверка + $this->assertNotNull($settings['access_token']); + $this->assertNotNull($settings['v']); + $this->assertSame($settings['v'], self::$version); + + // Проверка + $this->expectExceptionMessage('Повторная инициализация запрещена'); + + // Инициализация (повторная) + $settings = self::$robot->api->init(self::$version); + } + + /** + * @testdox Реинициализация + */ + public function testReinit(): void + { + // Реинициализация + self::$robot->key(self::$group_key)->api->reinit(); + } + + /** + * @testdox Запись и чтение параметра + */ + public function testWriteAndReadParameter(): void + { + // Запись + self::$robot->key(self::$group_key)->api['key'] = 'value'; + + // Проверка + $this->assertSame('value', self::$robot->api['key'], 'Не удалось записать или прочитать параметр'); + } + + /** + * @testdox Чтение неинициализированного параметра + */ + public function testReadUndefinedParameter(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Ключ key не найден'); + + // Чтение + self::$robot->key(self::$group_key)->api['key']; + } + + /** + * @testdox Выбор получателя по идентификатору + */ + public function testChooseDestinationById(): void + { + // Выбор получателя + self::$robot->key(self::$group_key)->api->destination(self::$target_id); + + // Проверка + $this->assertSame(self::$target_id, self::$robot->api['peer_id'], 'Не удалось выбрать получателя по идентификатору'); + } + + /** + * @testdox Выбор получателей по идентификаторам + */ + public function testChooseDestinationsByIds(): void + { + // Выбор получателей + self::$robot->key(self::$group_key)->api->destination([self::$target_id, self::$target_id]); + + // Проверка + $this->assertSame([self::$target_id, self::$target_id], self::$robot->api['user_ids'], 'Не удалось выбрать получателей по идентификаторам'); + } + + /** + * @testdox Выбор получателя по домену + */ + public function testChooseDestinationByDomain(): void + { + // Выбор получателя + self::$robot->key(self::$group_key)->api->destination(self::$target_domain); + + // Проверка + $this->assertSame(self::$target_domain, self::$robot->api['domain'], 'Не удалось выбрать получателя по домену'); + } + + /** + * @testdox Запись, чтение и удаление вложений + */ + public function testWriteAndReadAttachments(): void + { + // Инициализация + self::$robot->key(self::$group_key); + + // Запись + self::$robot->api['attachments'] = 'photo0000_0000'; + self::$robot->api['attachments'] = 'video0000_0000'; + self::$robot->api['attachments'] = 'audio0000_0000'; + + // Проверка + $this->assertSame(['photo0000_0000', 'video0000_0000', 'audio0000_0000'], self::$robot->api['attachments'], 'Не удалось записать или прочитать вложения'); + + // Удаление одного вложения + unset(self::$robot->api['attachments'][0]); + + // Реинициализация смещений (для точной проверки) + self::$robot->api['attachments'] = array_values(self::$robot->api['attachments']); + + // Проверка + $this->assertSame(['video0000_0000', 'audio0000_0000'], self::$robot->api['attachments'], 'Не удалось удалить или прочитать вложения'); + + // Удаление всех вложений + unset(self::$robot->api['attachments']); + + // Проверка + $this->assertNull(self::$robot->api['attachments'], 'Не удалось удалить вложения'); + } + + /** + * @testdox Запись вложений с превышением ограничения + */ + public function testWriteWithOverflowAttachments() + { + // Проверка выброса исключения + $this->expectExceptionMessage('Превышено ограничение на 10 вложений'); + + // Инициализация + self::$robot->key(self::$group_key); + + // Запись (11 вложений) + self::$robot->api['attachments'] = 'photo0000_0000'; + self::$robot->api['attachments'] = 'video0000_0000'; + self::$robot->api['attachments'] = 'audio0000_0000'; + self::$robot->api['attachments'] = 'photo0000_0000'; + self::$robot->api['attachments'] = 'video0000_0000'; + self::$robot->api['attachments'] = 'audio0000_0000'; + self::$robot->api['attachments'] = 'photo0000_0000'; + self::$robot->api['attachments'] = 'video0000_0000'; + self::$robot->api['attachments'] = 'audio0000_0000'; + self::$robot->api['attachments'] = 'photo0000_0000'; + self::$robot->api['attachments'] = 'video0000_0000'; + } +} diff --git a/hood/vk/tests/api/methods/messagesTest.php b/mirzaev/vk/tests/api/methods/messagesTest.php similarity index 93% rename from hood/vk/tests/api/methods/messagesTest.php rename to mirzaev/vk/tests/api/methods/messagesTest.php index a2201b4..19980c8 100644 --- a/hood/vk/tests/api/methods/messagesTest.php +++ b/mirzaev/vk/tests/api/methods/messagesTest.php @@ -4,15 +4,15 @@ declare(strict_types=1); use PHPUnit\Framework\TestCase; -use hood\vk\core; -use hood\vk\robots\robot; -use hood\vk\tests\settings; +use mirzaev\vk\core; +use mirzaev\vk\robots\robot; +use mirzaev\vk\tests\settings; -use hood\accounts\vk as account; -use hood\accounts\vk; +use mirzaev\accounts\vk as account; +use mirzaev\accounts\vk; /** - * @testdox Сообщения + * @testdox [МЕТОД] Сообщения */ final class messagesTest extends TestCase { @@ -99,7 +99,7 @@ final class messagesTest extends TestCase self::$robot = self::$core->group(empty(self::$group_id) ? rand(0, 10) : self::$group_id); // Проверка - $this->assertEquals(self::$core->robots, $count + 1, 'Ошибка при инициализации робота'); + $this->assertSame(self::$core->robots, $count + 1, 'Ошибка при инициализации робота'); } /** @@ -112,7 +112,7 @@ final class messagesTest extends TestCase self::$core->delete(); // Проверка - $this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота'); + $this->assertEmpty(self::$core->read(self::$robot->id), 'Ошибка при деинициализации робота'); } /** @@ -145,13 +145,13 @@ final class messagesTest extends TestCase public function testWriteTextWhenHeIsAlreadyWrited(): void { // Запись текста - $message = self::$robot->message()->text('text'); + $message = self::$robot->message()->text('hello'); // Повторная запись текста - $message->text('text'); + $message->text(' world'); // Проверка - $this->assertEquals('texttext', $message->text); + $this->assertSame('hello world', $message->text, ); } /** @@ -169,7 +169,7 @@ final class messagesTest extends TestCase /** * @testdox Получение информации о сообщении */ - public function testgetById(): void + public function testGetById(): void { // Отправка сообщения $id = self::$robot->key(self::$group_key)->message('Теста метода getByID')->send(self::$target_id); @@ -203,7 +203,7 @@ final class messagesTest extends TestCase $message = self::$robot->message()->attachments('Вложение'); // Проверка - $this->assertEquals(['Вложение'], $message->data); + $this->assertSame(['Вложение'], $message->data); } /** @@ -272,7 +272,7 @@ final class messagesTest extends TestCase // Запись пересылаемых сообщений $message = self::$robot->message('Тест пересылки сообщений')->forward($id); - + // Отпрравка пересылки сообщения $id = $message->send(self::$target_id); diff --git a/hood/vk/tests/api/methods/photosTest.php b/mirzaev/vk/tests/api/methods/photosTest.php similarity index 97% rename from hood/vk/tests/api/methods/photosTest.php rename to mirzaev/vk/tests/api/methods/photosTest.php index 83a644d..bd7a0a0 100644 --- a/hood/vk/tests/api/methods/photosTest.php +++ b/mirzaev/vk/tests/api/methods/photosTest.php @@ -4,11 +4,11 @@ declare(strict_types=1); use PHPUnit\Framework\TestCase; -use hood\vk\core; -use hood\vk\robots\robot; -use hood\vk\tests\settings; +use mirzaev\vk\core; +use mirzaev\vk\robots\robot; +use mirzaev\vk\tests\settings; -use hood\accounts\vk as account; +use mirzaev\accounts\vk as account; /** * @testdox Фото diff --git a/hood/vk/tests/robots/groupTest.php b/mirzaev/vk/tests/robots/groupTest.php similarity index 98% rename from hood/vk/tests/robots/groupTest.php rename to mirzaev/vk/tests/robots/groupTest.php index 0bda0cf..e53dd20 100644 --- a/hood/vk/tests/robots/groupTest.php +++ b/mirzaev/vk/tests/robots/groupTest.php @@ -4,11 +4,11 @@ declare(strict_types=1); use PHPUnit\Framework\TestCase; -use hood\vk\core; -use hood\vk\robots\robot; -use hood\vk\tests\settings; +use mirzaev\vk\core; +use mirzaev\vk\robots\robot; +use mirzaev\vk\tests\settings; -use hood\accounts\vk as account; +use mirzaev\accounts\vk as account; /** * @testdox Робот-группа diff --git a/hood/vk/tests/robots/userTest.php b/mirzaev/vk/tests/robots/userTest.php similarity index 98% rename from hood/vk/tests/robots/userTest.php rename to mirzaev/vk/tests/robots/userTest.php index e6f355b..42ddc59 100644 --- a/hood/vk/tests/robots/userTest.php +++ b/mirzaev/vk/tests/robots/userTest.php @@ -4,11 +4,11 @@ declare(strict_types=1); use PHPUnit\Framework\TestCase; -use hood\vk\core; -use hood\vk\robots\robot; -use hood\vk\tests\settings; +use mirzaev\vk\core; +use mirzaev\vk\robots\robot; +use mirzaev\vk\tests\settings; -use hood\accounts\vk as account; +use mirzaev\accounts\vk as account; /** * @testdox Робот-пользователь diff --git a/mirzaev/vk/tests/settings.php.example b/mirzaev/vk/tests/settings.php.example new file mode 100644 index 0000000..bc6563f --- /dev/null +++ b/mirzaev/vk/tests/settings.php.example @@ -0,0 +1,88 @@ +group(12312)->key(1); +$robot = $core->group(12312)->key(1); +$robot = $core->group()->key(1); +$robot = $core->group()->key(1); + +$settings = new settings($robot); + +$settings['data']['test']['a'] = 2; +$settings['data'] = 2; + +var_export($core->read()); From 22fb58b638275341ae2819d876d8980c36668493 Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Tue, 27 Jul 2021 11:20:17 +1000 Subject: [PATCH 08/11] =?UTF-8?q?=D0=9E=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D1=8B=20=D1=81=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mirzaev/vk/tests/settings.php.example | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mirzaev/vk/tests/settings.php.example b/mirzaev/vk/tests/settings.php.example index bc6563f..c117989 100644 --- a/mirzaev/vk/tests/settings.php.example +++ b/mirzaev/vk/tests/settings.php.example @@ -7,6 +7,8 @@ namespace mirzaev\vk\tests; /** * Настройки окружения для тестирования * + * Скопировать данные в файл "settings.php" и вписать свои значения параметров + * * @todo Разгруппировать свойства и привести в понимаемый для тех кто только начал знакомиться с проектом вид */ trait settings From ffe571cad10fa622cca006dc1a75426f08ce3031 Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Tue, 27 Jul 2021 11:25:32 +1000 Subject: [PATCH 09/11] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D0=BA=20=D1=81=20mirzaev/accounts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index d02df92..37acafb 100644 --- a/composer.json +++ b/composer.json @@ -4,8 +4,7 @@ "description": "Фреймворк VK API", "keywords": [ "vk", - "api", - "hood" + "api" ], "homepage": "https://git.hood.su/mirzaev/vk", "license": "free for you", @@ -29,7 +28,7 @@ "require": { "php": "~8.0", "psr/log": "~1.0", - "hood/accounts": "~0.1.x-dev", + "mirzaev/accounts": "~0.1.x-dev", "monolog/monolog": "~1.6", "jasny/error-handler": "~0.2", "guzzlehttp/guzzle": "~7.2" From cffbb888740344cdd2040a9c18405b0a75bd4eb0 Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Tue, 27 Jul 2021 11:59:09 +1000 Subject: [PATCH 10/11] Do What The Fuck You Want To Public License --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 37acafb..c6f3983 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "mirzaev/vk", + "name": "hood/vk", "type": "framework", "description": "Фреймворк VK API", "keywords": [ @@ -7,7 +7,7 @@ "api" ], "homepage": "https://git.hood.su/mirzaev/vk", - "license": "free for you", + "license": "WTFPL", "authors": [ { "name": "Arsen Mirzaev Tatyano-Muradovich", From 579e64b087c763b465464b5ee0d14b16a98d17b2 Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Tue, 27 Jul 2021 12:00:13 +1000 Subject: [PATCH 11/11] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=20=D0=B2=20packagist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index c6f3983..80d56cc 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "hood/vk", + "name": "mirzaev/vk", "type": "framework", "description": "Фреймворк VK API", "keywords": [