From b6d59646cca40f2b6327d0ba04fdd900ebc2fe9d Mon Sep 17 00:00:00 2001 From: RedHood Date: Thu, 5 Nov 2020 22:53:17 +1000 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=BD=D0=B5=20=D1=80=D0=B5=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=20=D0=BF=D0=BE=D1=85=D1=83=D0=B9.=20=D0=AF?= =?UTF-8?q?=20=D0=BD=D0=B5=20=D0=B1=D1=83=D0=B4=D1=83=20=D1=8D=D1=82=D0=BE?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=B4=D0=B5=D0=BB=D1=8B=D0=B2=D0=B0=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 37 +- composer.json | 34 +- composer.lock | 1276 +++++++---------- hood/vk/logs/2020.10.07-ERROR.log | 18 + hood/vk/logs/2020.10.07-INFO.log | 46 + hood/vk/logs/2020.10.07.log | 64 + hood/vk/logs/2020.10.08-ERROR.log | 35 + hood/vk/logs/2020.10.08-INFO.log | 83 ++ hood/vk/logs/2020.10.08.log | 118 ++ hood/vk/logs/2020.10.09-INFO.log | 1 + hood/vk/logs/2020.10.09.log | 1 + .../vk/system/api/callback.php | 4 +- .../vk/system/api/longpoll.php | 101 +- hood/vk/system/api/methods/messages.php | 254 ++++ .../vk/system/api/methods/method.php | 17 +- hood/vk/system/api/methods/photos.php | 199 +++ hood/vk/system/core.php | 283 ++++ hood/vk/system/loggers/jasmo.php | 133 ++ hood/vk/system/loggers/logger.php | 25 + hood/vk/system/robots/group.php | 109 ++ hood/vk/system/robots/robot.php | 381 +++++ hood/vk/system/robots/user.php | 34 + .../vk/system/traits/registry.php | 35 +- hood/vk/system/traits/singleton.php | 67 + hood/vk/temp/191417381_0.longpoll | 1 + hood/vk/tests/accounts/214547089/cookie.txt | 1 + .../tests/api/accounts/214547089/cookie.txt | 1 + hood/vk/tests/api/methods/messagesTest.php | 126 ++ hood/vk/tests/robots/groupTest.php | 248 ++++ hood/vk/tests/robots/userTest.php | 248 ++++ hood/vk/tests/settings.php | 68 + system/API/CallBackAbstract.php | 10 - system/API/Methods/Message.php | 79 - system/Browsers/BrowserAbstract.php | 111 -- system/Browsers/Curl.php | 66 - system/BuildAbstract.php | 11 - system/Builder.php | 111 -- system/Core.php | 108 -- system/Loggers/Jasmo.php | 130 -- system/Loggers/LoggerAbstract.php | 26 - system/Robots/Group.php | 95 -- system/Robots/RobotAbstract.php | 265 ---- system/Robots/User.php | 47 - system/Traits/Singleton.php | 59 - 44 files changed, 3207 insertions(+), 1959 deletions(-) create mode 100644 hood/vk/logs/2020.10.07-ERROR.log create mode 100644 hood/vk/logs/2020.10.07-INFO.log create mode 100644 hood/vk/logs/2020.10.07.log create mode 100644 hood/vk/logs/2020.10.08-ERROR.log create mode 100644 hood/vk/logs/2020.10.08-INFO.log create mode 100644 hood/vk/logs/2020.10.08.log create mode 100644 hood/vk/logs/2020.10.09-INFO.log create mode 100644 hood/vk/logs/2020.10.09.log rename system/API/CallBack.php => hood/vk/system/api/callback.php (89%) rename system/API/LongPoll.php => hood/vk/system/api/longpoll.php (76%) create mode 100644 hood/vk/system/api/methods/messages.php rename system/API/Methods/MethodAbstract.php => hood/vk/system/api/methods/method.php (82%) create mode 100644 hood/vk/system/api/methods/photos.php create mode 100644 hood/vk/system/core.php create mode 100644 hood/vk/system/loggers/jasmo.php create mode 100644 hood/vk/system/loggers/logger.php create mode 100644 hood/vk/system/robots/group.php create mode 100644 hood/vk/system/robots/robot.php create mode 100644 hood/vk/system/robots/user.php rename system/Traits/Registry.php => hood/vk/system/traits/registry.php (76%) create mode 100644 hood/vk/system/traits/singleton.php create mode 100644 hood/vk/temp/191417381_0.longpoll create mode 100644 hood/vk/tests/accounts/214547089/cookie.txt create mode 100644 hood/vk/tests/api/accounts/214547089/cookie.txt create mode 100644 hood/vk/tests/api/methods/messagesTest.php create mode 100644 hood/vk/tests/robots/groupTest.php create mode 100644 hood/vk/tests/robots/userTest.php create mode 100644 hood/vk/tests/settings.php delete mode 100644 system/API/CallBackAbstract.php delete mode 100644 system/API/Methods/Message.php delete mode 100644 system/Browsers/BrowserAbstract.php delete mode 100644 system/Browsers/Curl.php delete mode 100644 system/BuildAbstract.php delete mode 100644 system/Builder.php delete mode 100644 system/Core.php delete mode 100644 system/Loggers/Jasmo.php delete mode 100644 system/Loggers/LoggerAbstract.php delete mode 100644 system/Robots/Group.php delete mode 100644 system/Robots/RobotAbstract.php delete mode 100644 system/Robots/User.php delete mode 100644 system/Traits/Singleton.php diff --git a/README.md b/README.md index 3ad94e1..0b20413 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,24 @@ +# Колпачный фреймворк для ВКонтакте +Развивается как многопоточный фреймворк с поддержкой всех возможностей API ВКонтакте, а так же не добавленных, но необходимых функций, работу с большим количеством роботов под разными сессиями, поддерживающий PSR-спецификацию и полностью покрытый тестами +### Установка: +```sh +$ composer install hood/vk +``` +### Пример использования: ```php -declare(strict_types=1); +use hood\vk\core; +use hood\accounts\vk; -use Dotenv\Dotenv; -use VK\Core as VK; -use VK\API\Methods\Message; - -// Подключение зависимостей и настроек +// Подключение библеотек require_once './vendor/autoload.php'; -Dotenv::createImmutable(__DIR__)->load(); -/** - * Инициализация и настрйока ядра - * - * @return object Экземпляр класса ядра - **/ -VK::init()->log(); +// Инициализация пользователя ВКонтакте +$account = (new vk($id))->auth('login', 'password')->key($project_id); -/** - * Сборка робота из ядра фреймворка - * - * @return int Идентификатор робота (0) - **/ -VK::init()->build()->robot(); +// Инициализация робота-группы +$robot = core::init()->group($account); -// Отправка сообщения (ID робота, кому, сообщение) -Message::post(0, 214547089, 'Робот роботает!!!', 1); +// Отправка сообщения +$robot->message($to, 'Привет, я создал робота!'); ``` \ No newline at end of file diff --git a/composer.json b/composer.json index d954868..3c0fbcf 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "hood/vk", "type": "library", - "description": "Фреймворк для работы с VK API", + "description": "Фреймворк VK API", "keywords": [ "vk", "hood", @@ -18,43 +18,35 @@ } ], "support": { - "docs": "https://git.hood.su/vk/manual", - "issues": "https://git.hood.su/vk/issues", - "chat": "https://vk.com/cyberhybrid" + "docs": "https://git.hood.su/hood/vk/manual", + "issues": "https://git.hood.su/hood/vk/issues", + "chat": "https://vk.me/darkweb228" }, "require": { "php": ">=7.4.0", "psr/log": "1.*", "monolog/monolog": ">=1.6", - "jasny/error-handler": "^0.2.0" + "jasny/error-handler": "^0.2.0", + "hood/accounts": "^0.0.2" }, "require-dev": { "phpdocumentor/phpdocumentor": ">=2.9", - "phpunit/phpunit": "^9.2" - }, - "suggest": { - "phpunit/dbunit": "Тестирование базы данных. Требует phpunit ^7.0" + "phpunit/phpunit": "^9" }, "autoload": { "psr-4": { - "VK\\": "system/" + "hood\\vk\\": "hood/vk/system" } }, - "config": {}, - "archive": { - "exclude": [ - "CONTRIBUTING.md", - ".env" - ] + "autoload-dev": { + "psr-4": { + "hood\\vk\\tests\\": "hood/vk/tests" + } }, "funding": [ { - "type": "Hood (later)", + "type": "Hood", "url": "https://git.hood.su/vk/thanks" - }, - { - "type": "Evil Alliance", - "url": "https://vk.com/darkweb228" } ] } diff --git a/composer.lock b/composer.lock index 5105abc..a9f0c85 100644 --- a/composer.lock +++ b/composer.lock @@ -4,37 +4,56 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "031634121077f98f72f550b8b41f97c1", + "content-hash": "890608b64debcef7c0a1d909dc4bd81e", "packages": [ { - "name": "dragonmantank/cron-expression", - "version": "3.0.1", + "name": "guzzlehttp/guzzle", + "version": "7.2.0", "source": { "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "fa4e95ff5a7f1d62c3fbc05c32729b7f3ca14b52" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/fa4e95ff5a7f1d62c3fbc05c32729b7f3ca14b52", - "reference": "fa4e95ff5a7f1d62c3fbc05c32729b7f3ca14b52", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0aa74dfb41ae110835923ef10a9d803a22d50e79", + "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79", "shasum": "" }, "require": { - "php": "^7.1" + "ext-json": "*", + "guzzlehttp/promises": "^1.4", + "guzzlehttp/psr7": "^1.7", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0" }, - "replace": { - "mtdowling/cron-expression": "^1.0" + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { - "phpstan/phpstan": "^0.11", - "phpunit/phpunit": "^6.4|^7.0" + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.1-dev" + } + }, "autoload": { "psr-4": { - "Cron\\": "src/Cron/" - } + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -42,23 +61,221 @@ ], "authors": [ { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", "keywords": [ - "cron", - "schedule" + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" ], "funding": [ { - "url": "https://github.com/dragonmantank", + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://github.com/alexeyshockov", + "type": "github" + }, + { + "url": "https://github.com/gmponos", "type": "github" } ], - "time": "2020-08-21T02:30:13+00:00" + "time": "2020-10-10T11:47:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "60d379c243457e073cff02bc323a2a86cb355631" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", + "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2020-09-30T07:37:28+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2020-09-30T07:37:11+00:00" + }, + { + "name": "hood/accounts", + "version": "0.0.2", + "source": { + "type": "git", + "url": "https://git.hood.su/hood/accounts", + "reference": "a75c2e1f6dfc8edd8f09999714a4ead4da54a490" + }, + "require": { + "ext-dom": "20031129", + "ext-libxml": "^7.4", + "guzzlehttp/guzzle": "^7.2", + "php": ">=7.4.0" + }, + "require-dev": { + "phpdocumentor/phpdocumentor": ">=2.9", + "phpunit/phpunit": "^9" + }, + "type": "library", + "autoload": { + "psr-4": { + "hood\\accounts\\": "hood/accounts/system" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "AGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Arsen Mirzaev", + "email": "red@hood.su", + "homepage": "https://hood.su/sex", + "role": "Developer" + } + ], + "description": "Менеджер аккаунтов", + "homepage": "https://git.hood.su/hood/accounts", + "keywords": [ + "accounts", + "hood", + "vk" + ], + "funding": [ + { + "url": "https://git.hood.su/hood/accounts/thanks", + "type": "Hood" + } + ], + "time": "2020-10-25T06:14:50+00:00" }, { "name": "jasny/error-handler", @@ -111,16 +328,16 @@ }, { "name": "monolog/monolog", - "version": "1.25.4", + "version": "1.25.5", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "3022efff205e2448b560c833c6fbbf91c3139168" + "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/3022efff205e2448b560c833c6fbbf91c3139168", - "reference": "3022efff205e2448b560c833c6fbbf91c3139168", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0", + "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0", "shasum": "" }, "require": { @@ -194,7 +411,56 @@ "type": "tidelift" } ], - "time": "2020-05-22T07:31:27+00:00" + "time": "2020-07-23T08:35:51+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "time": "2020-06-29T06:28:15+00:00" }, { "name": "psr/http-message", @@ -292,6 +558,46 @@ "psr-3" ], "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" } ], "packages-dev": [ @@ -415,16 +721,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.2.7", + "version": "1.2.8", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd" + "reference": "8a7ecad675253e4654ea05505233285377405215" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/95c63ab2117a72f48f5a55da9740a3273d45b7fd", - "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/8a7ecad675253e4654ea05505233285377405215", + "reference": "8a7ecad675253e4654ea05505233285377405215", "shasum": "" }, "require": { @@ -472,12 +778,16 @@ "url": "https://packagist.com", "type": "custom" }, + { + "url": "https://github.com/composer", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" } ], - "time": "2020-04-08T08:27:21+00:00" + "time": "2020-08-23T12:54:47+00:00" }, { "name": "container-interop/container-interop", @@ -513,16 +823,16 @@ }, { "name": "doctrine/annotations", - "version": "1.10.3", + "version": "1.10.4", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" + "reference": "bfe91e31984e2ba76df1c1339681770401ec262f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", - "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/bfe91e31984e2ba76df1c1339681770401ec262f", + "reference": "bfe91e31984e2ba76df1c1339681770401ec262f", "shasum": "" }, "require": { @@ -532,7 +842,8 @@ }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "^7.5" + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^9.1.5" }, "type": "library", "extra": { @@ -578,7 +889,7 @@ "docblock", "parser" ], - "time": "2020-05-25T17:24:27+00:00" + "time": "2020-08-10T19:35:50+00:00" }, { "name": "doctrine/instantiator", @@ -772,271 +1083,6 @@ ], "time": "2019-12-30T22:54:17+00:00" }, - { - "name": "graham-campbell/result-type", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb", - "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb", - "shasum": "" - }, - "require": { - "php": "^7.0|^8.0", - "phpoption/phpoption": "^1.7.3" - }, - "require-dev": { - "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "An Implementation Of The Result Type", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" - ], - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2020-04-13T13:17:36+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.0.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "2d9d3c186a6637a43193e66b097c50e4451eaab2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/2d9d3c186a6637a43193e66b097c50e4451eaab2", - "reference": "2d9d3c186a6637a43193e66b097c50e4451eaab2", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": "^7.2.5", - "psr/http-client": "^1.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.0", - "ext-curl": "*", - "php-http/client-integration-tests": "dev-phpunit8", - "phpunit/phpunit": "^8.5.5", - "psr/log": "^1.1" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.0-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "time": "2020-06-27T10:33:25+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2019-07-01T23:21:34+00:00" - }, { "name": "jms/metadata", "version": "1.7.0", @@ -1424,6 +1470,7 @@ "self-update", "update" ], + "abandoned": true, "time": "2018-03-30T12:52:15+00:00" }, { @@ -1855,24 +1902,24 @@ }, { "name": "phpoption/phpoption", - "version": "1.7.4", + "version": "1.7.5", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "b2ada2ad5d8a32b89088b8adc31ecd2e3a13baf3" + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/b2ada2ad5d8a32b89088b8adc31ecd2e3a13baf3", - "reference": "b2ada2ad5d8a32b89088b8adc31ecd2e3a13baf3", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", "shasum": "" }, "require": { "php": "^5.5.9 || ^7.0 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.3", - "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { @@ -1916,7 +1963,7 @@ "type": "tidelift" } ], - "time": "2020-06-07T10:40:07+00:00" + "time": "2020-07-20T17:29:33+00:00" }, { "name": "phpspec/prophecy", @@ -2053,23 +2100,23 @@ }, { "name": "phpunit/php-file-iterator", - "version": "3.0.3", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "8e282e5f5e2db5fb2271b3962ad69875c34a6f41" + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/8e282e5f5e2db5fb2271b3962ad69875c34a6f41", - "reference": "8e282e5f5e2db5fb2271b3962ad69875c34a6f41", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -2105,28 +2152,28 @@ "type": "github" } ], - "time": "2020-06-26T11:50:37+00:00" + "time": "2020-09-28T05:57:25+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.0.2", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66" + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f6eedfed1085dd1f4c599629459a0277d25f9a66", - "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-pcntl": "*" @@ -2134,7 +2181,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -2164,27 +2211,27 @@ "type": "github" } ], - "time": "2020-06-26T11:53:53+00:00" + "time": "2020-09-28T05:58:55+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324" + "reference": "18c887016e60e52477e54534956d7b47bc52cd84" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", - "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/18c887016e60e52477e54534956d7b47bc52cd84", + "reference": "18c887016e60e52477e54534956d7b47bc52cd84", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -2219,27 +2266,27 @@ "type": "github" } ], - "time": "2020-06-26T11:55:37+00:00" + "time": "2020-09-28T06:03:05+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.1", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7" + "reference": "c9ff14f493699e2f6adee9fd06a0245b276643b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/cc49734779cbb302bf51a44297dab8c4bbf941e7", - "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/c9ff14f493699e2f6adee9fd06a0245b276643b7", + "reference": "c9ff14f493699e2f6adee9fd06a0245b276643b7", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.2" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -2274,20 +2321,20 @@ "type": "github" } ], - "time": "2020-06-26T11:58:13+00:00" + "time": "2020-09-28T06:00:25+00:00" }, { "name": "phpunit/php-token-stream", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374" + "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5672711b6b07b14d5ab694e700c62eeb82fcf374", - "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/a853a0e183b9db7eed023d7933a858fa1c8d25a3", + "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3", "shasum": "" }, "require": { @@ -2329,50 +2376,51 @@ "type": "github" } ], - "time": "2020-06-27T06:36:25+00:00" + "abandoned": true, + "time": "2020-08-04T08:28:15+00:00" }, { "name": "phpunit/phpunit", - "version": "9.2.5", + "version": "9.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ad7cc5ec3ab2597b329880e30442d9054526023b" + "reference": "1c6a9e4312e209e659f1fce3ce88dd197c2448f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ad7cc5ec3ab2597b329880e30442d9054526023b", - "reference": "ad7cc5ec3ab2597b329880e30442d9054526023b", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c6a9e4312e209e659f1fce3ce88dd197c2448f6", + "reference": "1c6a9e4312e209e659f1fce3ce88dd197c2448f6", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2.0", + "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.9.1", + "myclabs/deep-copy": "^1.9.5", "phar-io/manifest": "^1.0.3", "phar-io/version": "^2.0.1", "php": "^7.3", - "phpspec/prophecy": "^1.8.1", - "phpunit/php-code-coverage": "^8.0.1", - "phpunit/php-file-iterator": "^3.0", - "phpunit/php-invoker": "^3.0", - "phpunit/php-text-template": "^2.0", - "phpunit/php-timer": "^5.0", - "sebastian/code-unit": "^1.0.2", - "sebastian/comparator": "^4.0", - "sebastian/diff": "^4.0", - "sebastian/environment": "^5.0.1", - "sebastian/exporter": "^4.0", + "phpspec/prophecy": "^1.10.3", + "phpunit/php-code-coverage": "^8.0.2", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-invoker": "^3.0.2", + "phpunit/php-text-template": "^2.0.2", + "phpunit/php-timer": "^5.0.1", + "sebastian/code-unit": "^1.0.5", + "sebastian/comparator": "^4.0.3", + "sebastian/diff": "^4.0.1", + "sebastian/environment": "^5.1.2", + "sebastian/exporter": "^4.0.2", "sebastian/global-state": "^4.0", - "sebastian/object-enumerator": "^4.0", - "sebastian/resource-operations": "^3.0", - "sebastian/type": "^2.1", - "sebastian/version": "^3.0" + "sebastian/object-enumerator": "^4.0.2", + "sebastian/resource-operations": "^3.0.2", + "sebastian/type": "^2.1.1", + "sebastian/version": "^3.0.1" }, "require-dev": { "ext-pdo": "*", @@ -2427,7 +2475,7 @@ "type": "github" } ], - "time": "2020-06-22T07:10:55+00:00" + "time": "2020-07-13T17:55:55+00:00" }, { "name": "pimple/pimple", @@ -2570,55 +2618,6 @@ ], "time": "2017-02-14T16:28:37+00:00" }, - { - "name": "psr/http-client", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "time": "2020-06-29T06:28:15+00:00" - }, { "name": "psr/simple-cache", "version": "1.0.1", @@ -2667,65 +2666,25 @@ ], "time": "2017-10-23T01:57:42+00:00" }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "time": "2019-03-08T08:55:37+00:00" - }, { "name": "sebastian/code-unit", - "version": "1.0.5", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "c1e2df332c905079980b119c4db103117e5e5c90" + "reference": "59236be62b1bb9919e6d7f60b0b832dc05cef9ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/c1e2df332c905079980b119c4db103117e5e5c90", - "reference": "c1e2df332c905079980b119c4db103117e5e5c90", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/59236be62b1bb9919e6d7f60b0b832dc05cef9ab", + "reference": "59236be62b1bb9919e6d7f60b0b832dc05cef9ab", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -2757,27 +2716,27 @@ "type": "github" } ], - "time": "2020-06-26T12:50:45+00:00" + "time": "2020-10-02T14:47:54+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819" + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ee51f9bb0c6d8a43337055db3120829fa14da819", - "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -2808,29 +2767,29 @@ "type": "github" } ], - "time": "2020-06-26T12:04:00+00:00" + "time": "2020-09-28T05:30:19+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.3", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f" + "reference": "7a8ff306445707539c1a6397372a982a1ec55120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", - "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/7a8ff306445707539c1a6397372a982a1ec55120", + "reference": "7a8ff306445707539c1a6397372a982a1ec55120", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0", + "php": ">=7.3", "sebastian/diff": "^4.0", "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -2878,27 +2837,27 @@ "type": "github" } ], - "time": "2020-06-26T12:05:46+00:00" + "time": "2020-09-30T06:47:25+00:00" }, { "name": "sebastian/diff", - "version": "4.0.2", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113" + "reference": "ffc949a1a2aae270ea064453d7535b82e4c32092" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", - "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ffc949a1a2aae270ea064453d7535b82e4c32092", + "reference": "ffc949a1a2aae270ea064453d7535b82e4c32092", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0", + "phpunit/phpunit": "^9.3", "symfony/process": "^4.2 || ^5" }, "type": "library", @@ -2940,27 +2899,27 @@ "type": "github" } ], - "time": "2020-06-30T04:46:02+00:00" + "time": "2020-09-28T05:32:55+00:00" }, { "name": "sebastian/environment", - "version": "5.1.2", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2" + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", - "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-posix": "*" @@ -2968,7 +2927,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2999,29 +2958,29 @@ "type": "github" } ], - "time": "2020-06-26T12:07:24+00:00" + "time": "2020-09-28T05:52:38+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.2", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "571d721db4aec847a0e59690b954af33ebf9f023" + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/571d721db4aec847a0e59690b954af33ebf9f023", - "reference": "571d721db4aec847a0e59690b954af33ebf9f023", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0", + "php": ">=7.3", "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^9.2" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -3072,7 +3031,7 @@ "type": "github" } ], - "time": "2020-06-26T12:08:55+00:00" + "time": "2020-09-28T05:24:23+00:00" }, { "name": "sebastian/global-state", @@ -3130,25 +3089,25 @@ }, { "name": "sebastian/object-enumerator", - "version": "4.0.2", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8" + "reference": "f6f5957013d84725427d361507e13513702888a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/074fed2d0a6d08e1677dd8ce9d32aecb384917b8", - "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f6f5957013d84725427d361507e13513702888a4", + "reference": "f6f5957013d84725427d361507e13513702888a4", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0", + "php": ">=7.3", "sebastian/object-reflector": "^2.0", "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -3179,27 +3138,27 @@ "type": "github" } ], - "time": "2020-06-26T12:11:32+00:00" + "time": "2020-09-28T05:55:06+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "127a46f6b057441b201253526f81d5406d6c7840" + "reference": "d9d0ab3b12acb1768bc1e0a89b23c90d2043cbe5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/127a46f6b057441b201253526f81d5406d6c7840", - "reference": "127a46f6b057441b201253526f81d5406d6c7840", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/d9d0ab3b12acb1768bc1e0a89b23c90d2043cbe5", + "reference": "d9d0ab3b12acb1768bc1e0a89b23c90d2043cbe5", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -3230,27 +3189,27 @@ "type": "github" } ], - "time": "2020-06-26T12:12:55+00:00" + "time": "2020-09-28T05:56:16+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.2", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63" + "reference": "ed8c9cd355089134bc9cba421b5cfdd58f0eaef7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/062231bf61d2b9448c4fa5a7643b5e1829c11d63", - "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/ed8c9cd355089134bc9cba421b5cfdd58f0eaef7", + "reference": "ed8c9cd355089134bc9cba421b5cfdd58f0eaef7", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -3289,24 +3248,24 @@ "type": "github" } ], - "time": "2020-06-26T12:14:17+00:00" + "time": "2020-09-28T05:17:32+00:00" }, { "name": "sebastian/resource-operations", - "version": "3.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0653718a5a629b065e91f774595267f8dc32e213" + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0653718a5a629b065e91f774595267f8dc32e213", - "reference": "0653718a5a629b065e91f774595267f8dc32e213", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.0" @@ -3340,32 +3299,32 @@ "type": "github" } ], - "time": "2020-06-26T12:16:22+00:00" + "time": "2020-09-28T06:45:17+00:00" }, { "name": "sebastian/type", - "version": "2.1.1", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "56b3ba194e0cbaaf3de7ccd353c289d7a84ed022" + "reference": "fa592377f3923946cb90bf1f6a71ba2e5f229909" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/56b3ba194e0cbaaf3de7ccd353c289d7a84ed022", - "reference": "56b3ba194e0cbaaf3de7ccd353c289d7a84ed022", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fa592377f3923946cb90bf1f6a71ba2e5f229909", + "reference": "fa592377f3923946cb90bf1f6a71ba2e5f229909", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.2" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.3-dev" } }, "autoload": { @@ -3392,24 +3351,24 @@ "type": "github" } ], - "time": "2020-06-26T12:17:54+00:00" + "time": "2020-10-06T08:41:03+00:00" }, { "name": "sebastian/version", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "626586115d0ed31cb71483be55beb759b5af5a3c" + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/626586115d0ed31cb71483be55beb759b5af5a3c", - "reference": "626586115d0ed31cb71483be55beb759b5af5a3c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "type": "library", "extra": { @@ -3441,7 +3400,7 @@ "type": "github" } ], - "time": "2020-06-26T12:18:43+00:00" + "time": "2020-09-28T06:39:44+00:00" }, { "name": "symfony/config", @@ -3778,16 +3737,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.17.1", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d" + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", - "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", "shasum": "" }, "require": { @@ -3799,7 +3758,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3850,20 +3809,20 @@ "type": "tidelift" } ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.17.1", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7110338d81ce1cbc3e273136e4574663627037a7" + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7", - "reference": "7110338d81ce1cbc3e273136e4574663627037a7", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", "shasum": "" }, "require": { @@ -3875,7 +3834,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3927,87 +3886,7 @@ "type": "tidelift" } ], - "time": "2020-06-06T08:46:27+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.17.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4a5b6bba3259902e386eb80dd1956181ee90b5b2", - "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2", - "shasum": "" - }, - "require": { - "php": ">=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/process", @@ -4247,23 +4126,23 @@ }, { "name": "theseer/tokenizer", - "version": "1.1.3", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -4283,34 +4162,40 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-06-13T22:48:21+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" }, { "name": "twig/twig", - "version": "v1.42.5", + "version": "v1.43.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e" + "reference": "2311602f6a208715252febe682fa7c38e56a3373" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", - "reference": "87b2ea9d8f6fd014d0621ca089bb1b3769ea3f8e", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/2311602f6a208715252febe682fa7c38e56a3373", + "reference": "2311602f6a208715252febe682fa7c38e56a3373", "shasum": "" }, "require": { - "php": ">=5.5.0", + "php": ">=7.1.3", "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/phpunit-bridge": "^4.4.9|^5.0.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.42-dev" + "dev-master": "1.43-dev" } }, "autoload": { @@ -4347,100 +4232,34 @@ "keywords": [ "templating" ], - "time": "2020-02-11T05:59:23+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v5.0.0", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "fbb6a5f65512f21d0db9e21bd49e67f70a9bbd5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/fbb6a5f65512f21d0db9e21bd49e67f70a9bbd5e", - "reference": "fbb6a5f65512f21d0db9e21bd49e67f70a9bbd5e", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.1", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.7.4", - "symfony/polyfill-ctype": "^1.17", - "symfony/polyfill-mbstring": "^1.17", - "symfony/polyfill-php80": "^1.17" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.2 || ^9.0" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "homepage": "https://gjcampbell.co.uk/" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://vancelucas.com/" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], "funding": [ { - "url": "https://github.com/GrahamCampbell", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "url": "https://tidelift.com/funding/github/packagist/twig/twig", "type": "tidelift" } ], - "time": "2020-06-07T19:04:14+00:00" + "time": "2020-08-05T15:05:05+00:00" }, { "name": "webmozart/assert", - "version": "1.9.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "9dc4f203e36f2b486149058bade43c851dd97451" + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/9dc4f203e36f2b486149058bade43c851dd97451", - "reference": "9dc4f203e36f2b486149058bade43c851dd97451", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", + "php": "^5.3.3 || ^7.0 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -4472,7 +4291,7 @@ "check", "validate" ], - "time": "2020-06-16T10:16:42+00:00" + "time": "2020-07-08T17:02:28+00:00" }, { "name": "zendframework/zend-cache", @@ -4797,22 +4616,26 @@ }, { "name": "zendframework/zend-i18n", - "version": "2.9.2", + "version": "2.10.1", "source": { "type": "git", "url": "https://github.com/zendframework/zend-i18n.git", - "reference": "e17a54b3aee333ab156958f570cde630acee8b07" + "reference": "84038e6a1838b611dcc491b1c40321fa4c3a123c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/e17a54b3aee333ab156958f570cde630acee8b07", - "reference": "e17a54b3aee333ab156958f570cde630acee8b07", + "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/84038e6a1838b611dcc491b1c40321fa4c3a123c", + "reference": "84038e6a1838b611dcc491b1c40321fa4c3a123c", "shasum": "" }, "require": { + "ext-intl": "*", "php": "^5.6 || ^7.0", "zendframework/zend-stdlib": "^2.7 || ^3.0" }, + "conflict": { + "phpspec/prophecy": "<1.9.0" + }, "require-dev": { "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.16", "zendframework/zend-cache": "^2.6.1", @@ -4825,7 +4648,6 @@ "zendframework/zend-view": "^2.6.3" }, "suggest": { - "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", "zendframework/zend-cache": "Zend\\Cache component", "zendframework/zend-config": "Zend\\Config component", "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", @@ -4838,8 +4660,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.9.x-dev", - "dev-develop": "2.10.x-dev" + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" }, "zf": { "component": "Zend\\I18n", @@ -4862,7 +4684,7 @@ "zf" ], "abandoned": "laminas/laminas-i18n", - "time": "2019-09-30T12:04:37+00:00" + "time": "2019-12-12T14:08:22+00:00" }, { "name": "zendframework/zend-json", diff --git a/hood/vk/logs/2020.10.07-ERROR.log b/hood/vk/logs/2020.10.07-ERROR.log new file mode 100644 index 0000000..69a9349 --- /dev/null +++ b/hood/vk/logs/2020.10.07-ERROR.log @@ -0,0 +1,18 @@ +[2020-10-07 16:14:21] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined method Hood\VK\Robots\Group::token() in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 {main} thrown in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:08:57] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined method Hood\VK\Robots\Group::token() in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 {main} thrown in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:09:35] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined method Hood\VK\Robots\Group::token() in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 {main} thrown in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:16:23] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught TypeError: Argument 3 passed to Hood\VK\Robots\Group::message() must be of the type string, int given, called in D:\Проектs\Репозитории\s.php on line 63 and defined in D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php:54 Stack trace: #0 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->message() #1 D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php(262): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(66): Hood\VK\API\LongPoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php:54 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:41:46] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\RobotAbstract::$id must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:132 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php(131): Hood\VK\Robots\RobotAbstract->__get() #1 D:\Проектs\Репозитории\vk\Hood\VK\Builder.php(85): Hood\VK\Robots\User->__get() #2 D:\Проектs\Репозитории\vk\Hood\VK\Builder.php(70): Hood\VK\Builder->reg() #3 D:\Проектs\Репозитории\s.php(68): Hood\VK\Builder->user() #4 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:132 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:42:08] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\RobotAbstract::$id must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:132 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php(131): Hood\VK\Robots\RobotAbstract->__get() #1 D:\Проектs\Репозитории\vk\Hood\VK\Builder.php(85): Hood\VK\Robots\User->__get() #2 D:\Проектs\Репозитории\vk\Hood\VK\Builder.php(70): Hood\VK\Builder->reg() #3 D:\Проектs\Репозитории\s.php(68): Hood\VK\Builder->user() #4 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:132 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:43:15] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\RobotAbstract::$id must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php:80 Stack trace: #0 D:\Проектs\Репозитории\s.php(68): Hood\VK\Robots\User->key() #1 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:43:24] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php:81 Stack trace: #0 D:\Проектs\Репозитории\s.php(68): Hood\VK\Robots\User->key() #1 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php:81 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:45:29] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать ключ для доступа к LongPoll in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:45:45] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать ключ для доступа к LongPoll in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:46:24] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\RobotAbstract::$key must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:136 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(125): Hood\VK\Robots\RobotAbstract->__get() #1 D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php(79): Hood\VK\Robots\Group->__get() #2 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #3 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #4 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:136 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:46:31] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:46:40] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\RobotAbstract::$key must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:136 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(125): Hood\VK\Robots\RobotAbstract->__get() #1 D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php(79): Hood\VK\Robots\Group->__get() #2 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #3 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #4 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:136 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:47:25] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:47:31] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:47:33] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:47:50] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:48:46] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] diff --git a/hood/vk/logs/2020.10.07-INFO.log b/hood/vk/logs/2020.10.07-INFO.log new file mode 100644 index 0000000..8fc5403 --- /dev/null +++ b/hood/vk/logs/2020.10.07-INFO.log @@ -0,0 +1,46 @@ +[2020-10-07 15:30:17] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 15:30:17] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 15:31:09] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 15:31:09] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 16:14:21] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 16:14:21] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:08:57] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:08:57] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:09:35] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:09:35] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:16:08] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:16:23] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:16:50] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:22:23] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:24:52] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:25:12] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:32:26] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:36:51] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:41:46] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:41:46] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:42:08] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:42:08] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:43:15] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:43:15] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:43:24] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:43:24] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:45:29] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:45:29] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:45:44] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:45:45] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:46:24] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:46:24] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:46:31] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:46:31] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:46:40] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:46:40] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:47:25] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:47:25] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:47:31] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:47:31] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:47:33] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:47:33] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:47:50] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:47:50] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:48:46] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:48:46] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] diff --git a/hood/vk/logs/2020.10.07.log b/hood/vk/logs/2020.10.07.log new file mode 100644 index 0000000..8751fc2 --- /dev/null +++ b/hood/vk/logs/2020.10.07.log @@ -0,0 +1,64 @@ +[2020-10-07 15:30:17] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 15:30:17] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 15:31:09] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 15:31:09] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 16:14:21] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 16:14:21] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined method Hood\VK\Robots\Group::token() in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 {main} thrown in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 16:14:21] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:08:57] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:08:57] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined method Hood\VK\Robots\Group::token() in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 {main} thrown in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:08:57] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:09:35] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:09:35] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined method Hood\VK\Robots\Group::token() in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 {main} thrown in D:\Проектs\Репозитории\s.php:58 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:09:35] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:16:08] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:16:23] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught TypeError: Argument 3 passed to Hood\VK\Robots\Group::message() must be of the type string, int given, called in D:\Проектs\Репозитории\s.php on line 63 and defined in D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php:54 Stack trace: #0 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->message() #1 D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php(262): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(66): Hood\VK\API\LongPoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php:54 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:16:23] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:16:50] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:22:23] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:24:52] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:25:12] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:32:26] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:36:51] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:41:46] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:41:46] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\RobotAbstract::$id must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:132 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php(131): Hood\VK\Robots\RobotAbstract->__get() #1 D:\Проектs\Репозитории\vk\Hood\VK\Builder.php(85): Hood\VK\Robots\User->__get() #2 D:\Проектs\Репозитории\vk\Hood\VK\Builder.php(70): Hood\VK\Builder->reg() #3 D:\Проектs\Репозитории\s.php(68): Hood\VK\Builder->user() #4 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:132 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:41:46] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:42:08] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:42:08] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\RobotAbstract::$id must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:132 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php(131): Hood\VK\Robots\RobotAbstract->__get() #1 D:\Проектs\Репозитории\vk\Hood\VK\Builder.php(85): Hood\VK\Robots\User->__get() #2 D:\Проектs\Репозитории\vk\Hood\VK\Builder.php(70): Hood\VK\Builder->reg() #3 D:\Проектs\Репозитории\s.php(68): Hood\VK\Builder->user() #4 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:132 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:42:08] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:43:15] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:43:15] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\RobotAbstract::$id must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php:80 Stack trace: #0 D:\Проектs\Репозитории\s.php(68): Hood\VK\Robots\User->key() #1 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:43:15] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:43:24] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:43:24] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php:81 Stack trace: #0 D:\Проектs\Репозитории\s.php(68): Hood\VK\Robots\User->key() #1 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\User.php:81 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:43:24] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:45:29] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:45:29] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать ключ для доступа к LongPoll in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:45:29] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:45:44] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:45:45] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать ключ для доступа к LongPoll in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:45:45] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:46:24] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:46:24] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\RobotAbstract::$key must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:136 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(125): Hood\VK\Robots\RobotAbstract->__get() #1 D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php(79): Hood\VK\Robots\Group->__get() #2 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #3 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #4 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:136 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:46:24] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:46:31] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:46:31] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:46:31] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:46:40] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:46:40] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\RobotAbstract::$key must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:136 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(125): Hood\VK\Robots\RobotAbstract->__get() #1 D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php(79): Hood\VK\Robots\Group->__get() #2 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #3 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #4 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:136 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:46:40] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:47:25] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:47:25] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:47:25] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:47:31] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:47:31] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:47:31] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:47:33] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:47:33] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:47:33] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:47:50] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:47:50] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:78 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:47:50] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-07 17:48:46] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-07 17:48:46] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-07 17:48:46] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] diff --git a/hood/vk/logs/2020.10.08-ERROR.log b/hood/vk/logs/2020.10.08-ERROR.log new file mode 100644 index 0000000..a596a4d --- /dev/null +++ b/hood/vk/logs/2020.10.08-ERROR.log @@ -0,0 +1,35 @@ +[2020-10-08 09:06:40] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:11:12] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:11:35] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\Group::$longpoll must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php:133 Stack trace: #0 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #1 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php:133 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:11:41] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:12:35] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:12:45] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:12:51] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(62): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:13:05] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:13:34] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:13:39] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:13:55] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:14:01] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:18:47] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: syntax error, unexpected ';', expecting ')' in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:161 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:21:22] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Call to a member function postShutdownHandler() on null in D:\Проектs\Репозитории\vk\core.php:111 Stack trace: #0 D:\Проектs\Репозитории\s.php(56): hood\vk\core->log() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:111 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:21:34] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Call to a member function postShutdownHandler() on null in D:\Проектs\Репозитории\vk\core.php:111 Stack trace: #0 D:\Проектs\Репозитории\s.php(56): hood\vk\core->log() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:111 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:27:33] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined function \hood\vk\api\methods\messages() in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 D:\Проектs\Репозитории\s.php(62): hood\vk\Robots\robot->__call() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(64): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:28:35] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Return value of hood\vk\Robots\robot::__call() must be an instance of hood\vk\api\methods\method, instance of hood\vk\api\methods\messages returned in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 D:\Проектs\Репозитории\s.php(62): hood\vk\Robots\robot->__call() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(64): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:29:12] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Return value of hood\vk\Robots\robot::__call() must be an instance of hood\vk\api\methods\method, instance of hood\vk\api\methods\messages returned in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 D:\Проектs\Репозитории\s.php(62): hood\vk\Robots\robot->__call() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(64): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:42:46] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Argument 1 passed to hood\vk\api\methods\messages::__construct() must be of the type string, object given, called in D:\Проектs\Репозитории\vk\robots\robot.php on line 179 and defined in D:\Проектs\Репозитории\vk\api\methods\messages.php:30 Stack trace: #0 D:\Проектs\Репозитории\vk\robots\robot.php(179): hood\vk\api\methods\messages->__construct() #1 D:\Проектs\Репозитории\s.php(67): hood\vk\Robots\robot->__call() #2 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #3 D:\Проектs\Репозитории\s.php(82): hood\vk\api\longpoll->handle() #4 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:30 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 15:02:53] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Argument 2 passed to hood\vk\api\methods\messages::__construct() must be of the type string, array given, called in D:\Проектs\Репозитории\vk\robots\robot.php on line 179 and defined in D:\Проектs\Репозитории\vk\api\methods\messages.php:44 Stack trace: #0 D:\Проектs\Репозитории\vk\robots\robot.php(179): hood\vk\api\methods\messages->__construct() #1 D:\Проектs\Репозитории\s.php(64): hood\vk\Robots\robot->__call() #2 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #3 D:\Проектs\Репозитории\s.php(66): hood\vk\api\longpoll->handle() #4 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:44 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 15:03:25] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Typed property hood\vk\api\methods\messages::$robot must not be accessed before initialization in D:\Проектs\Репозитории\vk\api\methods\messages.php:83 Stack trace: #0 D:\Проектs\Репозитории\s.php(64): hood\vk\api\methods\messages->send() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(66): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:83 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 15:04:49] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Typed property hood\vk\api\methods\messages::$robot must not be accessed before initialization in D:\Проектs\Репозитории\vk\api\methods\messages.php:83 Stack trace: #0 D:\Проектs\Репозитории\s.php(64): hood\vk\api\methods\messages->send() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(66): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:83 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 15:05:23] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Cannot access uninitialized non-nullable property hood\vk\api\methods\messages::$attachments by reference in D:\Проектs\Репозитории\vk\api\methods\messages.php:114 Stack trace: #0 D:\Проектs\Репозитории\s.php(64): hood\vk\api\methods\messages->send() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(66): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:114 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 15:06:40] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Cannot access uninitialized non-nullable property hood\vk\api\methods\messages::$attachments by reference in D:\Проектs\Репозитории\vk\api\methods\messages.php:114 Stack trace: #0 D:\Проектs\Репозитории\s.php(64): hood\vk\api\methods\messages->send() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(66): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:114 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:14:13] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Class 'Hood\VK\robots\user' not found in D:\Проектs\Репозитории\vk\builder.php:70 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): Hood\VK\builder->user() #1 {main} thrown in D:\Проектs\Репозитории\vk\builder.php:70 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:44:26] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Argument 2 passed to hood\vk\core::__call() must be of the type int, array given, called in D:\Проектs\Репозитории\s.php on line 69 and defined in D:\Проектs\Репозитории\vk\core.php:87 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): hood\vk\core->__call() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:87 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:56:29] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Argument 1 passed to hood\vk\Robots\robot::__construct() must be of the type int, object given, called in D:\Проектs\Репозитории\vk\core.php on line 91 and defined in D:\Проектs\Репозитории\vk\robots\robot.php:87 Stack trace: #0 D:\Проектs\Репозитории\vk\core.php(91): hood\vk\Robots\robot->__construct() #1 D:\Проектs\Репозитории\s.php(69): hood\vk\core->__call() #2 {main} thrown in D:\Проектs\Репозитории\vk\robots\robot.php:87 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:56:39] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Return value of hood\vk\core::__call() must be an instance of hood\vk\Robots\robot, none returned in D:\Проектs\Репозитории\vk\core.php:95 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): hood\vk\core->__call() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:95 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:57:57] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать адрес сервера in D:\Проектs\Репозитории\vk\robots\user.php:80 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): hood\vk\robots\user->key() #1 {main} thrown in D:\Проектs\Репозитории\vk\robots\user.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:58:08] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Class 'hood\vk\Exception' not found in D:\Проектs\Репозитории\vk\core.php:93 Stack trace: #0 D:\Проектs\Репозитории\s.php(58): hood\vk\core->__call() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:93 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:58:26] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Exception: Не найден робот: build in D:\Проектs\Репозитории\vk\core.php:94 Stack trace: #0 D:\Проектs\Репозитории\s.php(58): hood\vk\core->__call() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:94 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 17:05:01] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать адрес сервера in D:\Проектs\Репозитории\vk\hood\vk\robots\user.php:80 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): hood\vk\robots\user->key() #1 {main} thrown in D:\Проектs\Репозитории\vk\hood\vk\robots\user.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 19:20:35] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать адрес сервера in D:\Проектs\Репозитории\vk\hood\vk\robots\user.php:80 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): hood\vk\robots\user->key() #1 {main} thrown in D:\Проектs\Репозитории\vk\hood\vk\robots\user.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 19:42:21] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined function SHAMIL\sense\core() in D:\Проектs\Репозитории\s.php:60 Stack trace: #0 {main} thrown in D:\Проектs\Репозитории\s.php:60 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 19:42:34] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined function hood\vk\core() in D:\Проектs\Репозитории\s.php:61 Stack trace: #0 {main} thrown in D:\Проектs\Репозитории\s.php:61 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] diff --git a/hood/vk/logs/2020.10.08-INFO.log b/hood/vk/logs/2020.10.08-INFO.log new file mode 100644 index 0000000..abbc23f --- /dev/null +++ b/hood/vk/logs/2020.10.08-INFO.log @@ -0,0 +1,83 @@ +[2020-10-08 09:06:39] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:06:40] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:11:12] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:11:12] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:11:35] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:11:35] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:11:41] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:11:41] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:12:35] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:12:35] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:12:45] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:12:45] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:12:51] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:12:51] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:13:05] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:13:05] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:13:34] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:13:34] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:13:39] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:13:39] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:13:55] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:13:55] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:14:01] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:14:01] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:18:47] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:18:47] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:18:59] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:19:15] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:19:20] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 12:20:33] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:20:58] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:21:22] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:21:34] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:22:09] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:27:11] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:27:23] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:27:33] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 12:28:34] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:28:35] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 12:29:10] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:29:12] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 12:30:11] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:42:41] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:42:46] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:02:25] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:02:45] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:02:53] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:03:19] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:03:25] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:04:38] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:04:49] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:05:14] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:05:23] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:06:28] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:06:40] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:07:13] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:14:13] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:14:13] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:44:26] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:44:26] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:56:29] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:56:29] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:56:39] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:56:39] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:57:57] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:57:57] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:58:08] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:58:08] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:58:26] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:58:26] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:58:45] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 17:04:09] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 17:05:01] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 17:05:01] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 19:20:35] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 19:20:35] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 19:20:49] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 19:42:21] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 19:42:21] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 19:42:34] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 19:42:34] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 19:42:42] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 19:42:42] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] diff --git a/hood/vk/logs/2020.10.08.log b/hood/vk/logs/2020.10.08.log new file mode 100644 index 0000000..b5b8d7e --- /dev/null +++ b/hood/vk/logs/2020.10.08.log @@ -0,0 +1,118 @@ +[2020-10-08 09:06:39] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:06:40] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:06:40] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:11:12] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:11:12] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:11:12] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:11:35] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:11:35] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Error: Typed property Hood\VK\Robots\Group::$longpoll must not be accessed before initialization in D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php:133 Stack trace: #0 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #1 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php:133 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:11:35] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:11:41] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:11:41] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(61): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:11:41] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:12:35] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:12:35] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:12:35] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:12:45] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:12:45] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:12:45] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:12:51] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:12:51] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(62): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:12:51] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:13:05] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:13:05] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:79 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:13:05] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:13:34] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:13:34] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:13:34] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:13:39] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:13:39] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:13:39] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:13:55] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:13:55] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:13:55] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:14:01] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:14:01] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать идентификатор ВКонтакте in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 D:\Проектs\Репозитории\vk\Hood\VK\robots\Group.php(131): Hood\VK\API\LongPoll->__construct() #1 D:\Проектs\Репозитории\s.php(63): Hood\VK\Robots\Group->__get() #2 {main} thrown in D:\Проектs\Репозитории\vk\Hood\VK\api\LongPoll.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:14:01] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:18:47] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:18:47] Hood\VK\Loggers\Jasmo.ERROR: ErrorException: syntax error, unexpected ';', expecting ')' in D:\Проектs\Репозитории\vk\Hood\VK\robots\RobotAbstract.php:161 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 09:18:47] Hood\VK\Loggers\Jasmo.INFO: Завершение работы [] [] +[2020-10-08 09:18:59] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:19:15] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 09:19:20] Hood\VK\Loggers\Jasmo.INFO: Начало работы [] [] +[2020-10-08 12:20:33] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:20:58] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:21:22] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:21:22] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Call to a member function postShutdownHandler() on null in D:\Проектs\Репозитории\vk\core.php:111 Stack trace: #0 D:\Проектs\Репозитории\s.php(56): hood\vk\core->log() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:111 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:21:34] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:21:34] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Call to a member function postShutdownHandler() on null in D:\Проектs\Репозитории\vk\core.php:111 Stack trace: #0 D:\Проектs\Репозитории\s.php(56): hood\vk\core->log() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:111 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:22:09] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:27:11] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:27:23] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:27:33] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined function \hood\vk\api\methods\messages() in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 D:\Проектs\Репозитории\s.php(62): hood\vk\Robots\robot->__call() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(64): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:27:33] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 12:28:34] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:28:35] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Return value of hood\vk\Robots\robot::__call() must be an instance of hood\vk\api\methods\method, instance of hood\vk\api\methods\messages returned in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 D:\Проектs\Репозитории\s.php(62): hood\vk\Robots\robot->__call() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(64): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:28:35] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 12:29:10] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:29:12] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Return value of hood\vk\Robots\robot::__call() must be an instance of hood\vk\api\methods\method, instance of hood\vk\api\methods\messages returned in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 D:\Проектs\Репозитории\s.php(62): hood\vk\Robots\robot->__call() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(64): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\robots\robot.php:179 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:29:12] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 12:30:11] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:42:41] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 12:42:46] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Argument 1 passed to hood\vk\api\methods\messages::__construct() must be of the type string, object given, called in D:\Проектs\Репозитории\vk\robots\robot.php on line 179 and defined in D:\Проектs\Репозитории\vk\api\methods\messages.php:30 Stack trace: #0 D:\Проектs\Репозитории\vk\robots\robot.php(179): hood\vk\api\methods\messages->__construct() #1 D:\Проектs\Репозитории\s.php(67): hood\vk\Robots\robot->__call() #2 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #3 D:\Проектs\Репозитории\s.php(82): hood\vk\api\longpoll->handle() #4 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:30 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 12:42:46] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:02:25] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:02:45] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:02:53] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Argument 2 passed to hood\vk\api\methods\messages::__construct() must be of the type string, array given, called in D:\Проектs\Репозитории\vk\robots\robot.php on line 179 and defined in D:\Проектs\Репозитории\vk\api\methods\messages.php:44 Stack trace: #0 D:\Проектs\Репозитории\vk\robots\robot.php(179): hood\vk\api\methods\messages->__construct() #1 D:\Проектs\Репозитории\s.php(64): hood\vk\Robots\robot->__call() #2 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #3 D:\Проектs\Репозитории\s.php(66): hood\vk\api\longpoll->handle() #4 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:44 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 15:02:53] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:03:19] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:03:25] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Typed property hood\vk\api\methods\messages::$robot must not be accessed before initialization in D:\Проектs\Репозитории\vk\api\methods\messages.php:83 Stack trace: #0 D:\Проектs\Репозитории\s.php(64): hood\vk\api\methods\messages->send() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(66): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:83 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 15:03:25] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:04:38] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:04:49] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Typed property hood\vk\api\methods\messages::$robot must not be accessed before initialization in D:\Проектs\Репозитории\vk\api\methods\messages.php:83 Stack trace: #0 D:\Проектs\Репозитории\s.php(64): hood\vk\api\methods\messages->send() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(66): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:83 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 15:04:49] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:05:14] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:05:23] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Cannot access uninitialized non-nullable property hood\vk\api\methods\messages::$attachments by reference in D:\Проектs\Репозитории\vk\api\methods\messages.php:114 Stack trace: #0 D:\Проектs\Репозитории\s.php(64): hood\vk\api\methods\messages->send() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(66): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:114 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 15:05:23] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:06:28] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 15:06:40] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Cannot access uninitialized non-nullable property hood\vk\api\methods\messages::$attachments by reference in D:\Проектs\Репозитории\vk\api\methods\messages.php:114 Stack trace: #0 D:\Проектs\Репозитории\s.php(64): hood\vk\api\methods\messages->send() #1 D:\Проектs\Репозитории\vk\api\longpoll.php(261): SHAMIL\sense\{closure}() #2 D:\Проектs\Репозитории\s.php(66): hood\vk\api\longpoll->handle() #3 {main} thrown in D:\Проектs\Репозитории\vk\api\methods\messages.php:114 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 15:06:40] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 15:07:13] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:14:13] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:14:13] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Class 'Hood\VK\robots\user' not found in D:\Проектs\Репозитории\vk\builder.php:70 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): Hood\VK\builder->user() #1 {main} thrown in D:\Проектs\Репозитории\vk\builder.php:70 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:14:13] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:44:26] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:44:26] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Argument 2 passed to hood\vk\core::__call() must be of the type int, array given, called in D:\Проектs\Репозитории\s.php on line 69 and defined in D:\Проектs\Репозитории\vk\core.php:87 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): hood\vk\core->__call() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:87 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:44:26] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:56:29] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:56:29] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Argument 1 passed to hood\vk\Robots\robot::__construct() must be of the type int, object given, called in D:\Проектs\Репозитории\vk\core.php on line 91 and defined in D:\Проектs\Репозитории\vk\robots\robot.php:87 Stack trace: #0 D:\Проектs\Репозитории\vk\core.php(91): hood\vk\Robots\robot->__construct() #1 D:\Проектs\Репозитории\s.php(69): hood\vk\core->__call() #2 {main} thrown in D:\Проектs\Репозитории\vk\robots\robot.php:87 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:56:29] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:56:39] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:56:39] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught TypeError: Return value of hood\vk\core::__call() must be an instance of hood\vk\Robots\robot, none returned in D:\Проектs\Репозитории\vk\core.php:95 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): hood\vk\core->__call() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:95 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:56:39] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:57:57] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:57:57] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать адрес сервера in D:\Проектs\Репозитории\vk\robots\user.php:80 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): hood\vk\robots\user->key() #1 {main} thrown in D:\Проектs\Репозитории\vk\robots\user.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:57:57] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:58:08] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:58:08] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Class 'hood\vk\Exception' not found in D:\Проектs\Репозитории\vk\core.php:93 Stack trace: #0 D:\Проектs\Репозитории\s.php(58): hood\vk\core->__call() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:93 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:58:08] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:58:26] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 16:58:26] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Exception: Не найден робот: build in D:\Проектs\Репозитории\vk\core.php:94 Stack trace: #0 D:\Проектs\Репозитории\s.php(58): hood\vk\core->__call() #1 {main} thrown in D:\Проектs\Репозитории\vk\core.php:94 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 16:58:26] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 16:58:45] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 17:04:09] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 17:05:01] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 17:05:01] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать адрес сервера in D:\Проектs\Репозитории\vk\hood\vk\robots\user.php:80 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): hood\vk\robots\user->key() #1 {main} thrown in D:\Проектs\Репозитории\vk\hood\vk\robots\user.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 17:05:01] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 19:20:35] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 19:20:35] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Exception: Необходимо указать адрес сервера in D:\Проектs\Репозитории\vk\hood\vk\robots\user.php:80 Stack trace: #0 D:\Проектs\Репозитории\s.php(69): hood\vk\robots\user->key() #1 {main} thrown in D:\Проектs\Репозитории\vk\hood\vk\robots\user.php:80 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 19:20:35] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 19:20:49] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 19:42:21] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 19:42:21] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined function SHAMIL\sense\core() in D:\Проектs\Репозитории\s.php:60 Stack trace: #0 {main} thrown in D:\Проектs\Репозитории\s.php:60 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 19:42:21] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 19:42:34] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 19:42:34] hood\vk\loggers\jasmo.ERROR: ErrorException: Uncaught Error: Call to undefined function hood\vk\core() in D:\Проектs\Репозитории\s.php:61 Stack trace: #0 {main} thrown in D:\Проектs\Репозитории\s.php:61 Stack trace: #0 [internal function]: Jasny\ErrorHandler->shutdownFunction() #1 {main} [] [] +[2020-10-08 19:42:34] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] +[2020-10-08 19:42:42] hood\vk\loggers\jasmo.INFO: Начало работы [] [] +[2020-10-08 19:42:42] hood\vk\loggers\jasmo.INFO: Завершение работы [] [] diff --git a/hood/vk/logs/2020.10.09-INFO.log b/hood/vk/logs/2020.10.09-INFO.log new file mode 100644 index 0000000..aa0486b --- /dev/null +++ b/hood/vk/logs/2020.10.09-INFO.log @@ -0,0 +1 @@ +[2020-10-09 08:53:00] hood\vk\loggers\jasmo.INFO: Начало работы [] [] diff --git a/hood/vk/logs/2020.10.09.log b/hood/vk/logs/2020.10.09.log new file mode 100644 index 0000000..aa0486b --- /dev/null +++ b/hood/vk/logs/2020.10.09.log @@ -0,0 +1 @@ +[2020-10-09 08:53:00] hood\vk\loggers\jasmo.INFO: Начало работы [] [] diff --git a/system/API/CallBack.php b/hood/vk/system/api/callback.php similarity index 89% rename from system/API/CallBack.php rename to hood/vk/system/api/callback.php index a4a9915..13a5377 100644 --- a/system/API/CallBack.php +++ b/hood/vk/system/api/callback.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace VK\API; +namespace Hood\VK\API; class CallBack extends CallBackAbstract { @@ -42,7 +42,7 @@ class CallBack extends CallBackAbstract 'title' => $this->group_id . 'CallBackServer', 'secret_key' => $this->secret_key ]); - $this->confirmation_token = request('groups.getCallbackConfirmationCode', [$this->group_id]); + // $this->confirmation_token = request('groups.getCallbackConfirmationCode', [$this->group_id]); echo $this->confirmation_token; } diff --git a/system/API/LongPoll.php b/hood/vk/system/api/longpoll.php similarity index 76% rename from system/API/LongPoll.php rename to hood/vk/system/api/longpoll.php index 2fbe725..9e18fa8 100644 --- a/system/API/LongPoll.php +++ b/hood/vk/system/api/longpoll.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace VK\API; +namespace hood\vk\api; -use \Exception; -use \VK\Core, - \VK\Robots\RobotAbstract; +use Exception; +use hood\vk\core, + hood\vk\robots\robot; /** * LongPoll @@ -23,19 +23,19 @@ use \VK\Core, * @see https://vk.com/dev/groups.getLongPollServer * @see https://vk.com/dev/groups.setLongPollSettings * - * @package VK\API\LongPoll - * @author Арсен Мирзаев + * @package hood\vk\api + * @author Arsen Mirzaev Tatyano-Muradovich * * @todo Добавить обработку ошибок ($request['errors];) */ -class LongPoll +final class longpoll { /** * Робот * * @var string */ - private RobotAbstract $robot; + private robot $robot; /** * Ключ к серверу @@ -69,28 +69,27 @@ class LongPoll /** * Инициализация * - * @param object $robot Робот + * @param robot $robot Робот */ - public function __construct(object $robot) + public function __construct(robot $robot) { // Инициализация робота - if (!$robot->id) { - throw new Exception('Роботу необходимо задать идентификатор ВКонтакте'); - } - if (!$robot->token) { - throw new Exception('Роботу необходимо задать токен для доступа к LongPoll'); - } - if (!$robot->version) { - throw new Exception('Роботу необходимо задать версию используемого API ВКонтакте'); + if (!isset($robot->id)) { + throw new Exception('Необходимо указать идентификатор ВКонтакте'); + } else if (!isset($robot->key)) { + throw new Exception('Необходимо указать ключ для доступа к LongPoll'); + } else if (!isset($robot->version)) { + throw new Exception('Необходимо указать версию используемого API ВКонтакте'); } + $this->robot = $robot; // Остановка процессов-дубликатов - if (!file_exists(Core::init()->path['temp'])) { + if (!file_exists(core::init()->path['temp'])) { // Если не существует каталога temp, то создать - mkdir(Core::init()->path['temp'], 0775, true); + mkdir(core::init()->path['temp'], 0775, true); } - if (file_exists($lock = Core::init()->path['temp'] . '/' . $this->robot->id . '_' . (int) $this->robot->session . '.longpoll')) { + if (file_exists($lock = core::init()->path['temp'] . '/' . $this->robot->id . '_' . (int) $this->robot->session . '.longpoll')) { // Если существует файл-блокировщик, то удалить его unlink($lock); } @@ -111,11 +110,18 @@ class LongPoll // Инициализация настроек $settings = [ 'group_id' => $this->robot->id, - 'access_token' => $this->robot->token, + 'access_token' => $this->robot->key, 'v' => $this->robot->version, 'api_version' => $this->robot->version ]; + if ($status === true && !array_key_exists('enabled', $settings)) { + // Если запущена активация и не был передан параметр статуса LongPoll + + // Установка параметра активации LongPoll + $settings['enabled'] = 1; + } + // Установка переданных параметров foreach ($params as $param) { if ($param === 'group_id' || $param === 'access_token' || $param === 'v' || $param === 'api_version') { @@ -123,16 +129,17 @@ class LongPoll continue; } - if ($status === true && !array_key_exists('enabled', $settings)) { - // Если запущена активация и не был передан параметр статуса LongPoll - - // Установка параметра активации LongPoll - $settings['enabled'] = 1; - } - + // Конвертация типа $status = (int) $status; - if ($param === 'all') { + if ($param !== 'all') { + // Если параметр не указывает на установку всех значений + + // Установка значения + $settings[$param] = $status; + } else { + // Иначе установить все значения + // Если передан параметр: установка ВСЕХ значений $settings['message_new'] = $status; $settings['message_reply'] = $status; @@ -176,16 +183,10 @@ class LongPoll $settings['like_add'] = $status; $settings['like_remove'] = $status; $settings['message_event'] = $status; - } else { - // Иначе - - // Установка значения - $settings[$param] = $status; } - } - return $this->robot->browser()->api('groups.setLongPollSettings', $settings); + return $this->robot->browser()->post('https://api.vk.com/method/groups.setLongPollSettings', $settings); } /** @@ -201,9 +202,9 @@ class LongPoll // Если не инициализирован LongPoll-сервер // Запрос на получение доступа и данных LongPoll-сервера - $response = $this->robot->browser()->api('groups.getLongPollServer', [ + $response = $this->robot->browser()->post('https://api.vk.com/method/groups.getLongPollServer', [ 'group_id' => $this->robot->id, - 'access_token' => $this->robot->token, + 'access_token' => $this->robot->key, 'v' => $this->robot->version ])['response']; @@ -234,7 +235,7 @@ class LongPoll public function handle(callable $function, int $wait = 25): array { // Файл-блокировщик и PID процесса - $lock = Core::init()->path['temp'] . '/' . $this->robot->id . '_' . (int) $this->robot->session . '.longpoll'; + $lock = core::init()->path['temp'] . '/' . $this->robot->id . '_' . (int) $this->robot->session . '.longpoll'; $pid = getmypid(); // Создание или пересоздание файла-блокировщика @@ -258,14 +259,24 @@ class LongPoll if (!empty($request['response']['updates'])) { // Если получены необработанные события - // Обработка событий - $function($request['response']); - } + foreach ($request['response']['updates'] as $update) { + // Перебор полученных событий + $function($update); + } - // Новый идентификатор последнего события - $this->ts = $request['response']['ts']; + // Обновление идентификатора последнего события + $this->ts = $request['response']['ts']; + } } while (true); return $request; } + + public function __destruct() + { + if (file_exists($lock = core::init()->path['temp'] . '/' . $this->robot->id . '_' . (int) $this->robot->session . '.longpoll')) { + // Если существует файл-блокировщик, то удалить его + unlink($lock); + } + } } diff --git a/hood/vk/system/api/methods/messages.php b/hood/vk/system/api/methods/messages.php new file mode 100644 index 0000000..759bdec --- /dev/null +++ b/hood/vk/system/api/methods/messages.php @@ -0,0 +1,254 @@ + + * + * @todo Доработать строгий режим отправки: проверку сообщения в беседе (не имеет ID сообщений) + */ +final class messages extends method +{ + /** + * @param string $message Сообщение + */ + protected string $message; + + /** + * @param int|string|array|null $destination Получатель + */ + protected $destination; + + /** + * @param array $attachments Вложения + */ + protected array $attachments = []; + + /** + * @param int $mode Режим отправки + */ + protected int $mode = 1; + + /** + * Создать сообщение + * + * Если переданы все параметры, то сразу отправляет + * + * @param robot $robot Робот + * @param string $message Текст + * @param int|string|array|null $destination Получатель + * @param string|null ...$attachments Вложения + * + * @return self + */ + public function __construct(robot $robot, string $message, $destination = null, string ...$attachments) + { + // Инициализация параметров + + // Робот + $this->robot = $robot; + + // Сообщение + $this->message = $message; + + // Получатель + if (isset($destination)) { + $this->destination = $destination; + } else { + return; + } + + // Вложения + if (isset($attachments)) { + $this->attachments = $attachments; + } else { + return; + } + + // Отправка, если все параметры инициализированы + return $this->send($destination); + } + + /** + * Отправить сообщение + * + * @param int|string|array $destination Получатель + * + * @see https://vk.com/dev/messages.send + * + * @return array Ответ сервера + */ + public function send($destination): array + { + // Идентификатор сообщения + $random_id = time(); + + if ($this->mode = 1) { + // Перемножение (по умолчанию) + $random_id *= rand(); + } + + # Ключ + if ($this->robot instanceof group) { + // Робот-группа + $settings['access_token'] = $this->robot->key; + } else if ($this->robot instanceof User) { + // Робот-пользователь + $settings['access_token'] = $this->robot->key; + } + + // Версия API + $settings['v'] = $this->robot->version; + + // Цель отправки + if (is_int($destination)) { + // Отправить по идентификатору + $settings['peer_id'] = $destination; + } else if (is_array($destination)) { + // Массовая отправка по идентификаторам + $settings['user_ids'] = $destination; + } else { + // Отправить по домену + $settings['domain'] = $destination; + } + + // Сообщение + $settings['message'] = $this->message; + + // Идентификатор сообщения + $settings['random_id'] = $random_id; + + // Фильтрация вложений + $forward_messages = []; + foreach ($this->attachments as &$attachment) { + if (iconv_substr($attachment, 0, 7, "UTF-8") === 'message') { + // Если среди вложений найдено сообщение для пересылки + $forward_messages[] = $attachment; + unset($attachment); + } + } + + if (!empty($forward_messages)) { + // Если есть пересылаемые сообщения + $settings['forward_messages'] = implode(',', $forward_messages); + } + + if (!empty($attachments)) { + // Если есть вложения + $settings['attachment'] = implode(',', $attachments); + } + + // Запрос + $request = $this->robot->browser->request('POST', 'messages.send', $settings); + + // Очистка + unset($settings); + + if ($this->mode >= 2) { + // Если установлен режим 2 (усиленная проверка отправленного сообщения) + + if (!empty($request["response"])) { + // Если пришел ID сообщения + + // Ключ + if ($this->robot instanceof Group) { + // Робот-группа + $settings['access_token'] = $this->robot->key; + } else if ($this->robot instanceof User) { + // Робот-пользователь + $settings['access_token'] = $this->robot->key; + } + + // Версия API + $settings['v'] = $this->robot->version; + + // Запрашиваемые сообщения + $settings['message_ids'] = $request["response"]; + + // Запрос + if ($this->robot->browser()->post('https://api.vk.com/method/messages.getById', $settings)['response']['count'] === 0) { + // Если сообщения не существует, то повторить отправку + $this->send($destination); + } + } else { + // Что-то придумать :) + } + } + + return (array) $request; + } + + /** + * Получить информацию о сообщении + * + * @return array Информация о сообщении + */ + public function info(): array + { + # Ключ + if ($this->robot instanceof group) { + // Робот-группа + $settings['access_token'] = $this->robot->key; + } else if ($this->robot instanceof User) { + // Робот-пользователь + $settings['access_token'] = $this->robot->key; + } + + // Цель отправки + if (is_int($this->destination)) { + // Отправить по идентификатору + $settings['peer_id'] = $this->destination; + } else if (is_array($this->destination)) { + // Массовая отправка по идентификаторам + $settings['user_ids'] = $this->destination; + } else { + // Отправить по домену + $settings['domain'] = $this->destination; + } + + // Версия API + $settings['v'] = $this->robot->version; + + // Сообщение + $settings['message'] = $this->message; + + // Режим отправки + $settings['mode'] = $this->mode; + + // Фильтрация вложений + $forward_messages = []; + foreach ($this->attachments as &$attachment) { + if (iconv_substr($attachment, 0, 7, "UTF-8") === 'message') { + // Если среди вложений найдено сообщение для пересылки + $forward_messages[] = $attachment; + unset($attachment); + } + } + + if (!empty($forward_messages)) { + // Если есть пересылаемые сообщения + $settings['forward_messages'] = implode(',', $forward_messages); + } + + if (!empty($attachments)) { + // Если есть вложения + $settings['attachment'] = implode(',', $attachments); + } + + return $settings; + } +} diff --git a/system/API/Methods/MethodAbstract.php b/hood/vk/system/api/methods/method.php similarity index 82% rename from system/API/Methods/MethodAbstract.php rename to hood/vk/system/api/methods/method.php index c0c1014..0435eaa 100644 --- a/system/API/Methods/MethodAbstract.php +++ b/hood/vk/system/api/methods/method.php @@ -2,7 +2,9 @@ declare(strict_types=1); -namespace VK\API\Methods; +namespace hood\vk\api\methods; + +use hood\vk\robots\robot; /** * Абстракция метода API @@ -12,11 +14,18 @@ namespace VK\API\Methods; * @method protected static get(string $url, ...$params) Получить * @method protected static delete(string $url, ...$params) Удалить * - * @package VK\API\Methods - * @author Арсен Мирзаев + * @package hood\vk\api\methods + * @author Arsen Mirzaev Tatyano-Muradovich */ -abstract class MethodAbstract +abstract class method { + /** + * Робот + * + * @param robot $robot Робот + */ + protected robot $robot; + /** * Создать * diff --git a/hood/vk/system/api/methods/photos.php b/hood/vk/system/api/methods/photos.php new file mode 100644 index 0000000..49e638f --- /dev/null +++ b/hood/vk/system/api/methods/photos.php @@ -0,0 +1,199 @@ + + * + * @todo Добавить обработку ошибок ($request['errors];) + */ +final class photos +{ + /** + * Сохранить + * + * @param robot $robot Робот + * @param int $album_id Альбом + * @param int|null $group_id Группа + * @param string|null $caption Описание + * @param float|null $latitude Географическая широта (-90, 90) + * @param float|null $longitude Географическая долгота (-180, 180) + * + * @see https://vk.com/dev/photos.save + * + * @return array|null Ответ сервера + */ + public static function save(robot $robot, int $album_id, array $images, ?string $caption = null, ?int $group_id = null, ?float $latitude = null, ?float $longitude = null): ?array + { + if (isset($robot->account)) { + // Если инициализирован аккаунт + + // Порядок инициализации ДОЛЖЕН соответствовать порядку в документации + + // Ключ + $settings['access_token'] = $robot->account->key; + + // Версия API + $settings['v'] = $robot->version; + + // Альбом + $settings['album_id'] = $album_id; + + // Группа + if (isset($group_id)) { + $settings['group_id'] = $group_id; + } + + $upload = self::upload(...$images); + + // Сервер + $settings['server'] = $upload['server']; + + // Изображения + $settings['photos_list'] = $upload['photos_list']; + + // Хеш + $settings['hash'] = $upload['hash']; + + // Широта + if (isset($latitude)) { + $settings['latitude'] = $latitude; + } + + // Долгота + if (isset($longitude)) { + $settings['longitude'] = $longitude; + } + + // Описание + if (isset($caption)) { + $settings['caption'] = $caption; + } + + return (array) $robot->browser->api('photos.save', $settings); + } + + throw new Exception('Аккаунт не инициализирован'); + } + + /** + * Загрузить + * + * @param Type $var + * @return void + */ + public static function upload(string ...$images) + { + if (count($images) > 5) { + throw new Exception('Запрещено отправлять более 5 фотографий'); + } + + + } + + /** + * Получить сервер для загрузки изображений + * + * @param robot $robot Робот + * @param int|null $album_id Альбом + * @param int|group|null $group_id Группа + * + * @see https://vk.com/dev/photos.getUploadServer + * + * @return array|null Ответ сервера + */ + public static function getUploadServer(robot $robot, ?int $album_id = null, $group_id = null): ?array + { + if (isset($robot->account)) { + // Если инициализирован аккаунт + + // Порядок инициализации ДОЛЖЕН соответствовать порядку в документации API ВКонтакте + + // Ключ + $settings['access_token'] = $robot->account->key; + + // Версия API + $settings['v'] = $robot->version; + + // Альбом + if (isset($album_id)) { + $settings['album_id'] = $album_id; + } else { + $settings['album_id'] = self::getAlbums($robot); + } + + // Группа + if (isset($group_id)) { + // При неудачном чтении воспринимать как целочисленное атомарное значение + $settings['group_id'] = $group_id->id ?? $group_id; + } + + return (array) $robot->browser->api('photos.getUploadServer', $settings); + } + + throw new Exception('Аккаунт не инициализирован'); + } + + /** + * Получить альбомы + * + * @param robot $robot Робот + * @param array $album_ids = null Идентификаторы альбомов + * @param int $offset = null Смещение для выборки подмножества + * @param int $count = null Количество для возврата + * @param bool $need_system = null Активация возврата системных альбомов + * @param bool $need_covers = null Активация возврата поля с обложкой альбома + * @param bool $photo_sizes = null Активация специального формата размеров фотографий + * + * @see https://vk.com/dev/photos.getUploadServer + * + * @return array Ответ сервера + */ + public static function getAlbums(robot $robot, array $album_ids = null, int $offset = null, int $count = null, bool $need_system = null, bool $need_covers = null, bool $photo_sizes = null): array + { + // Настройки + $settings['access_token'] = $robot->key; + $settings['v'] = $robot->version; + $settings['owner_id'] = $robot->id; + if (isset($album_ids)) { + $settings['album_ids'] = implode(',', $album_ids); + } + if (isset($offset)) { + $settings['offset'] = $offset; + } + if (isset($count)) { + $settings['count'] = $count; + } + if (isset($need_system)) { + $settings['need_system'] = (int) $need_system; + } + if (isset($need_covers)) { + $settings['need_covers'] = (int) $need_covers; + } + if (isset($photo_sizes)) { + $settings['photo_sizes'] = (int) $photo_sizes; + } + + // Запрос + $request = $robot->browser()->api('photos.getUploadServer', $settings); + + return (array) $request; + } +} diff --git a/hood/vk/system/core.php b/hood/vk/system/core.php new file mode 100644 index 0000000..ee2b6ba --- /dev/null +++ b/hood/vk/system/core.php @@ -0,0 +1,283 @@ + + */ +final class core +{ + use singleton; + + /** + * Счётчик роботов + * + * @var int + */ + private int $robots = 0; + + /** + * Реестр роботов + * + * @var array + */ + private array $registry = []; + + /** + * Временная зона + * + * Используется в логировании + * + * @var string + */ + private string $timezone; + + /** + * Путь до корня проекта + * + * @var string + */ + private string $path_root; + + /** + * Путь до папки журналов + * + * @var string + */ + private string $path_logs; + + /** + * Путь до временной папки + * + * @var string + */ + private string $path_temp; + + /** + * Журналист + * + * @param string $file Файл для журналирования + * + * @return self + * + * @todo Добавить установку иного журналиста по спецификации PSR-3 + * @todo Более гибкое журналирование + */ + public function log(string $file = null): self + { + // Инициализация журналиста (требует переработки) + jasmo::init()::post($file)::postErrorHandler()::postShutdownHandler(); + + return $this; + } + + /** + * Записать в реестр + * + * @param int $id + * @param robot $robot + * + * @see hood\vk\traits\registry Модификация метода + * + * @return void + */ + public function set(int $id, robot $robot): void + { + // if (empty($this->registry[$id])) { + // // Если нет сессий, то инициализировать + // $this->registry[$id] = []; + // } + + // Создать новую сессию и обновить счётчик роботов + $this->registry[$id][++$this->robots] = $robot; + } + + /** + * Прочитать из реестра + * + * Если не передать идентификатор, то вернёт все значения + * + * @param int|null $id Идентификатор + * @param int|null $session Сессия + * + * @see hood\vk\traits\registry Модификация метода + * + * @return mixed + */ + public function get(int $id = null, int $session = null) + { + if (isset($id) && array_key_exists($id, $this->registry)) { + // Робот передан и найден + if (isset($session) && array_key_exists($session, $this->registry[$id])) { + // Сессия робота передана и найдена + return $this->registry[$id][$session]; + } + return $this->registry[$id]; + } + return $this->registry; + } + + /** + * Удалить из реестра + * + * @param int|null $id Идентификатор + * @param int|null $session Сессия + * + * @see hood\vk\traits\registry Модификация метода + * + * @return void + */ + public function delete(int $id = null, int $session = null): void + { + if (isset($id)) { + // Робот передан + + if (!array_key_exists($id, $this->registry)) { + throw new Exception('Робот не найден'); + } + + if (isset($session)) { + // Сессия передана + + if (!array_key_exists($session, $this->registry[$id])) { + throw new Exception('Сессия не найдена'); + } + + // Счётчик роботов + --$this->robots; + + // Удаление сессии + unset($this->registry[$id][$session]); + + return; + } + + // Счётчик роботов + $this->robots = $this->robots - count($this->registry[$id]); + + // Удаление робота и всех его сессий + unset($this->registry[$id]); + + return; + } + + // Удаление всех роботов и их сессий + $this->registry = []; + } + + /** + * Записать свойство + * + * @param mixed $name Название + * @param mixed $value Значение + * + * @return void + */ + public function __set($name, $value): void + { + if ($name === 'timezone') { + if (!isset($this->timezone)) { + $this->timezone = $value; + } else { + throw new Exception('Запрещено переопределять часовой пояс'); + } + } else if ($name === 'path_root') { + if (!isset($this->path_root)) { + $this->path_root = $value; + } else { + throw new Exception('Запрещено переопределять корневой каталог'); + } + } else if ($name === 'path_logs') { + if (!isset($this->path_logs)) { + $this->path_logs = $value; + } else { + throw new Exception('Запрещено переопределять каталог журналов'); + } + } else if ($name === 'path_temp') { + if (!isset($this->path_temp)) { + $this->path_temp = $value; + } else { + throw new Exception('Запрещено переопределять каталог временных файлов'); + } + } + } + + /** + * Прочитать свойство + * + * @param mixed $name Название + * + * @return mixed + */ + public function __get($name) + { + if ($name === 'robots') { + return $this->robots; + } else if ($name === 'timezone') { + if (!isset($this->timezone)) { + // Значение по умолчанию + $this->timezone = 'Europe/Moscow'; + } + return $this->timezone; + } else if ($name === 'path_root') { + if (!isset($this->path_root)) { + // Значение по умолчанию + $this->path_root = dirname(__DIR__); + } + return $this->path_root; + } else if ($name === 'path_logs') { + if (!isset($this->path_logs)) { + // Значение по умолчанию + $this->path_logs = $this->path_root . '/logs'; + } + return $this->path_logs; + } else if ($name === 'path_temp') { + if (!isset($this->path_temp)) { + // Значение по умолчанию + $this->path_temp = $this->path_root . '/temp'; + } + return $this->path_temp; + } + } + + /** + * Вызвать метод + * + * Ищет класс описывающий робота, + * создаёт и возвращает его объект + * + * @param string $method Метод + * @param array $params Параметры + * + * @return robot + */ + public function __call(string $method, array $params): robot + { + if (class_exists($robot = '\\hood\\vk\\robots\\' . $method)) { + // Если найден класс реализующий запрошенного робота + return new $robot(...$params); + } else { + throw new Exception('Не найден робот: ' . $method); + } + } +} diff --git a/hood/vk/system/loggers/jasmo.php b/hood/vk/system/loggers/jasmo.php new file mode 100644 index 0000000..6aebe22 --- /dev/null +++ b/hood/vk/system/loggers/jasmo.php @@ -0,0 +1,133 @@ + + */ +final class jasmo extends logger +{ + use singleton; + + /** + * Экземпляр класса журналиста + * + * @var logger + */ + public static $logger; + + // /** + // * Экземпляр класса обработчика ошибок + // * + // * @var ErrorHandler + // */ + // public ErrorHandler $handler; + + public static function post($file = null): ?jasmo + { + $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)); // Уведомления + self::$logger->pushHandler(new StreamHandler(core::init()->path['logs'] . "/${file}-WARNING.log", logger::WARNING, false)); // Предупреждения + self::$logger->pushHandler(new StreamHandler(core::init()->path['logs'] . "/${file}-ERROR.log", logger::ERROR, false)); // Ошибки + self::$logger->pushHandler(new StreamHandler(core::init()->path['logs'] . "/${file}-CRITICAL.log", logger::CRITICAL, false)); // Критические ошибки + self::$logger->pushHandler(new StreamHandler(core::init()->path['logs'] . "/${file}-ALERT.log", logger::ALERT, false)); // Критические ошибки + self::$logger->pushHandler(new StreamHandler(core::init()->path['logs'] . "/${file}-EMERGENCY.log", logger::EMERGENCY, false)); // Критические ошибки + self::$logger->pushHandler(new StreamHandler(core::init()->path['logs'] . "/$file.log", logger::DEBUG)); // Общий лог + + // test + // self::$logger->pushProcessor(function ($record) { + // $record['extra']['dummy'] = 'Hello world!'; + + // return $record; + // }); + + echo '[' . date_format(new DateTime(core::init()->timezone), 'd-m-Y H:i:s') . '] Начало работы', PHP_EOL; + self::$logger->info('Начало работы'); + + return self::$instance; + } + + public static function get(): ?jasmo + { + return self::$instance; + } + + public static function delete(): ?jasmo + { + return self::$instance; + } + + public static function postErrorHandler(): ?jasmo + { + /** + * Подключение логгера в обработчик ошибок (Jasny) + */ + $handler = new ErrorHandler(self::$logger); + + $handler->logUncaught(E_ALL); // Обрабатывать все ошибки + $handler->onFatalError(function ($error) { + self::$logger->error($error); + }, true); + + return self::$instance; + } + + public static function deleteErrorHandler(): ?jasmo + { + return self::$instance; + } + + public static function postShutdownHandler(): ?jasmo + { + register_shutdown_function(array(self::$instance, 'handlerShutdown')); + + return self::$instance; + } + + + public function handlerShutdown(): void + { + self::$logger->info('Завершение работы'); + echo '[' . date_format(new DateTime(core::init()->timezone), 'd-m-Y H:i:s') . '] Завершение работы', PHP_EOL; + } + + // public function handlerErrors($errno, $errstr, $errfile, $errline, $errcontext): bool + // { + // echo "друг, да ты вероянто напортачил $errno $errstr", PHP_EOL, PHP_EOL; + // if ($this->logger->error("друг, да ты вероянто напортачил $errno $errstr")) { + // return true; + // } else { + // return false; + // } + // } +} diff --git a/hood/vk/system/loggers/logger.php b/hood/vk/system/loggers/logger.php new file mode 100644 index 0000000..68b45d1 --- /dev/null +++ b/hood/vk/system/loggers/logger.php @@ -0,0 +1,25 @@ + + */ +abstract class logger +{ + /** + * Экземпляр класса журналиста + * + * @var logger + */ + public static $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/hood/vk/system/robots/group.php new file mode 100644 index 0000000..93c18a6 --- /dev/null +++ b/hood/vk/system/robots/group.php @@ -0,0 +1,109 @@ + + */ +final class group extends robot +{ + /** + * @var longpoll $longpoll LongPoll-сессия + */ + protected longpoll $longpoll; + + /** + * Запись свойства + * + * @param string $name Название + * @param mixed $value Значение + * + * @see hood\vk\robots\robot Наследуемый метод + * + * @return void + */ + public function __set(string $name, $value): void + { + try { + parent::__set($name, $value); + } catch (Throwable $e) { + // Если свойство не найдено в родительском методе + + if ($name === 'longpoll') { + if ($value instanceof LongPoll) { + $this->longpoll = $value; + } else { + $this->longpoll = new LongPoll($this); + } + } + + throw new Exception($e->getMessage(), $e->getCode(), $e->getPrevious()); + } + } + + /** + * Чтение свойства + * + * @param string $name Название + * + * @see hood\vk\robots\robot Наследуемый метод + * + * @return mixed + */ + public function __get(string $name) + { + try { + return parent::__get($name); + } catch (Throwable $e) { + // Если свойство не найдено в родительском методе + + if ($name === 'longpoll') { + if (!isset($this->longpoll)) { + $this->longpoll = new LongPoll($this); + } + return $this->longpoll; + } + + throw new Exception($e->getMessage(), $e->getCode(), $e->getPrevious()); + } + } + + /** + * Проверка на инициализированность свойства + * + * @param string $name Название + * + * @return mixed + */ + public function __isset(string $name) + { + try { + return parent::__isset($name); + } catch (Throwable $e) { + // Если свойство не найдено в родительском методе + + if ($name === 'longpoll') { + return isset($this->longpoll); + } + + throw new Exception($e->getMessage(), $e->getCode(), $e->getPrevious()); + } + } +} diff --git a/hood/vk/system/robots/robot.php b/hood/vk/system/robots/robot.php new file mode 100644 index 0000000..bda383b --- /dev/null +++ b/hood/vk/system/robots/robot.php @@ -0,0 +1,381 @@ + + */ +abstract class robot +{ + /** + * @var int Идентификатор + */ + protected int $id; + + /** + * @var int Сессия + */ + protected int $session; + + /** + * @var string Ключ + */ + protected string $key; + + /** + * @var float Версия API + */ + protected float $version = 5.124; + + /** + * @var string Аккаунт + */ + private account $account; + + /** + * @var proxy Прокси + */ + protected proxy $proxy; + + /** + * @var captcha Обработчик капчи + */ + protected captcha $captcha; + + /** + * @var int $messages_mode Режим отправки сообщений + */ + protected int $messages_mode = 1; + + /** + * Конструктор + * + * @param int|null $id Идентификатор + * @param float|null $version Версия API + */ + public function __construct(int $id = null, float $version = null) + { + // Инициализация ядра + $core = core::init(); + + // Идентификация робота + $this->id = empty($id) ? $core->robots + 1 : $id; + + // Регистрация робота в ядре + $core->set($this->id, $this); + + // Идентификация сессии робота + $this->session = count($core->get($this->id)); + + if (isset($version)) { + // Инициализация версии + $this->version = $version; + } + } + + /** + * Инициализация ключа + * + * @param string $key Ключ + * + * @return self + */ + public function key(string $key): self + { + if (!isset($this->key)) { + $this->key = $key; + } else { + throw new Exception('Запрещено перезаписывать ключ'); + } + + return $this; + } + + /** + * Инициализация аккаунта + * + * @param account $account Аккаунт + * + * @return self + */ + public function account(account $account): self + { + if (!isset($this->account)) { + $this->account = $account; + } else { + throw new Exception('Запрещено перезаписывать аккаунт'); + } + + return $this; + } + + /** + * Инициализация прокси + * + * @param proxy $proxy Прокси + * + * @return self + */ + public function proxy(proxy $proxy): self + { + $this->proxy = $proxy; + + return $this; + } + + /** + * Инициализация обработчика капчи + * + * @param captcha $captcha Обработчик капчи + * + * @return self + */ + public function captcha(captcha $captcha): self + { + $this->captcha = $captcha; + + return $this; + } + + /** + * Записать свойство + * + * @param string $name Название + * @param mixed $value Значение + * + * @return void + */ + public function __set(string $name, $value): void + { + if ($name === 'id') { + if (!isset($this->id)) { + $this->id = (int) $value; + return; + } else { + throw new Exception('Запрещено перезаписывать идентификатор'); + } + } else if ($name === 'session') { + if (!isset($this->session)) { + $this->session = (int) $value; + return; + } else { + throw new Exception('Запрещено перезаписывать сессию'); + } + } else if ($name === 'key') { + if (!isset($this->key)) { + $this->key = (string) $value; + return; + } else { + throw new Exception('Запрещено перезаписывать ключ'); + } + } else if ($name === 'version') { + if (!isset($this->version)) { + $this->version = (float) $value; + return; + } else { + throw new Exception('Запрещено перезаписывать версию API'); + } + } else if ($name === 'account') { + if (!isset($this->account) && $value instanceof account) { + $this->account = $value; + return; + } else { + throw new Exception('Запрещено перезаписывать аккаунт'); + } + } else if ($name === 'browser') { + if (!isset($this->browser) && $value instanceof browser) { + $this->browser = $value; + return; + } else { + throw new Exception('Запрещено перезаписывать браузер'); + } + } else if ($name === 'proxy') { + $this->proxy = $value; + return; + } else if ($name === 'captcha') { + $this->captcha = $value; + return; + } else if ($name === 'messages_new') { + $this->messages_new = (int) $value; + return; + } + + // Если свойство не найдено + throw new Exception('Свойство не найдено: ' . $name); + } + + /** + * Прочитать свойство + * + * @param string $name Название + * + * @return mixed + */ + public function __get(string $name) + { + if ($name === 'id') { + if (isset($this->id)) { + return $this->id; + } else { + throw new Exception('Идентификатор не инициализирован'); + } + } else if ($name === 'session') { + if (isset($this->session)) { + return $this->session; + } else { + throw new Exception('Сессия не инициализирована'); + } + } else if ($name === 'key') { + if (isset($this->key)) { + return $this->key; + } else { + throw new Exception('Ключ не инициализирован'); + } + } else if ($name === 'account') { + if (isset($this->account)) { + return $this->account; + } else { + throw new Exception('Аккаунт не инициализирован'); + } + } else if ($name === 'version') { + if (isset($this->version)) { + return $this->version; + } else { + throw new Exception('Версия не инициализирована'); + } + } else if ($name === 'browser') { + return $this->browser ?? $this->browser = new browser([ + 'base_uri' => 'https://api.vk.com/method/', + 'cookies' => true + ]);; + } else if ($name === 'proxy') { + return $this->proxy; + } else if ($name === 'captcha') { + return $this->captcha; + } else if ($name === 'messages_new') { + return $this->messages_new; + } + + throw new Exception('Свойство не найдено: ' . $name); + } + + /** + * Проверить свойство на инициализированность + * + * @param string $name Название + * + * @return mixed + */ + public function __isset(string $name) + { + if ($name === 'id') { + return isset($this->id); + } else if ($name === 'session') { + return isset($this->session); + } else if ($name === 'key') { + return isset($this->key); + } else if ($name === 'account') { + return isset($this->account); + } else if ($name === 'version') { + return isset($this->version); + } else if ($name === 'browser') { + return isset($this->browser); + } else if ($name === 'proxy') { + return isset($this->proxy); + } else if ($name === 'captcha') { + return isset($this->captcha); + } else if ($name === 'messages_new') { + return isset($this->messages_new); + } + + throw new Exception('Свойство не найдено: ' . $name); + } + + /** + * Вызвать метод + * + * Ищет класс описывающий метод API ВКонтакте, + * создаёт и возвращает его объект + * + * @param string $method Метод + * @param array $params Параметры + * + * @return method + */ + public function __call(string $method, array $params): method + { + if (class_exists($class = '\\hood\\vk\\api\\methods\\' . $method . 's')) { + // Если найден класс реализующий запрошенный метод + return new $class($this, ...$params); + } + + throw new Exception('Метод не найден: ' . $method); + } + + /** + * Вызвать статический метод + * + * Ищет класс описывающий метод API ВКонтакте, + * создаёт и возвращает его объект + * + * @param string $method Метод + * @param array $params Параметры + * + * @return method + */ + public static function __callStatic(string $method, array $params): method + { + if (class_exists($class = '\\hood\\vk\\api\\methods\\' . $method . 's')) { + return $class(self, ...$params); + } + + throw new Exception('Метод не найден: ' . $method); + } + + /** + * Конвертировать в строку + * + * @return string + */ + public function __toString(): string + { + return (string) $this->id; + } +} diff --git a/hood/vk/system/robots/user.php b/hood/vk/system/robots/user.php new file mode 100644 index 0000000..8bf401c --- /dev/null +++ b/hood/vk/system/robots/user.php @@ -0,0 +1,34 @@ + + */ +final class user extends robot +{ + /** + * Инициализация аккаунта + * + * @param account $account Аккаунт + * + * @return self + */ + public function account(account $account): self + { + parent::account($account); + + $this->key = $account->key; + + return $this; + } +} diff --git a/system/Traits/Registry.php b/hood/vk/system/traits/registry.php similarity index 76% rename from system/Traits/Registry.php rename to hood/vk/system/traits/registry.php index bc4c809..b50adbd 100644 --- a/system/Traits/Registry.php +++ b/hood/vk/system/traits/registry.php @@ -2,14 +2,13 @@ declare(strict_types=1); -namespace VK\Traits; +namespace hood\vk\traits; /** * Паттерн registry */ -trait Registry +trait registry { - /** * Хеш-таблица реестра * @@ -17,19 +16,12 @@ trait Registry */ protected static array $registry = []; - /** - * Блокировка конструктора - */ - protected function __construct() - { - } - /** * Запись в реестр - * - * @param mixed $key + * + * @param int $key * @param mixed $value - * + * * @return void */ public static function set(int $key, $value): bool @@ -44,11 +36,11 @@ trait Registry /** * Извлечение из реестра - * + * * Если не отправить ключ, то вернёт все значения - * - * @param mixed $key - * + * + * @param int $key + * * @return mixed */ public static function get(int $key = null) @@ -62,11 +54,12 @@ trait Registry /** * Удалить из реестра - * - * @param string $key - * @return void + * + * @param int $key + * + * @return bool */ - public static function remove(int $key): bool + public static function delete(int $key): bool { if (array_key_exists($key, self::$registry)) { unset(self::$registry[$key]); diff --git a/hood/vk/system/traits/singleton.php b/hood/vk/system/traits/singleton.php new file mode 100644 index 0000000..32b9433 --- /dev/null +++ b/hood/vk/system/traits/singleton.php @@ -0,0 +1,67 @@ +deauth(); + } + + /** + * @testdox Инициализация аккаунта + * @beforeClass + */ + public function testAccountInit(): void + { + // Проверка входных данных + if (empty(self::$project_id)) { + self::$markTestSkipped('Не найден идентификатор проекта'); + } + + // Инициализация аккаунта + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../accounts'); + + // Запись режима SSL-протокола + self::$account->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 Деинициализация робота + * @after + */ + public function testRobotGroupDeinit(): void + { + // Очистка реестра + self::$core->delete(); + + // Проверка + $this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота'); + } + + /** + * @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 Инициализация робота + */ + public function testApiMethodMessagesNew(): void + { + var_dump(self::$robot->message('Тестирование отправки сообщения', self::$target_id ?? 'pizba228')); + } +} diff --git a/hood/vk/tests/robots/groupTest.php b/hood/vk/tests/robots/groupTest.php new file mode 100644 index 0000000..871b573 --- /dev/null +++ b/hood/vk/tests/robots/groupTest.php @@ -0,0 +1,248 @@ +deauth(); + } + + /** + * @testdox Инициализация аккаунта + * @beforeClass + */ + public function testAccountInit(): void + { + // Проверка входных данных + if (empty(self::$project_id)) { + self::$markTestSkipped('Не найден идентификатор проекта'); + } + + // Инициализация аккаунта + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../accounts'); + + // Запись режима SSL-протокола + self::$account->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 Деинициализация робота + * @after + */ + public function testRobotGroupDeinit(): void + { + // Очистка реестра + self::$core->delete(); + + // Проверка + $this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота'); + } + + /** + * @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 Запись идентификатора + */ + public function testRobotGroupWriteId(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Запрещено перезаписывать идентификатор'); + + // Запись идентификатора + self::$robot->id = empty(self::$robot->id) ? rand(0, 10) : self::$robot->id; + } + + /** + * @testdox Чтение идентификатора + */ + public function testRobotGroupReadId(): void + { + // Проверки + $this->assertNotNull(self::$robot->id, 'Не удалось прочитать идентификатор'); + $this->assertNotEmpty(self::$core->get(self::$robot->id), 'Робот не найден'); + } + + /** + * @testdox Запись сессии + */ + public function testRobotGroupWriteSession(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Запрещено перезаписывать сессию'); + + // Запись сессии + self::$robot->session = rand(0, 10); + } + + /** + * @testdox Чтение сессии + */ + public function testRobotGroupReadSession(): void + { + // Проверки + $this->assertNotNull(self::$robot->session, 'Не удалось прочитать сессию'); + $this->assertNotEmpty(self::$core->get(self::$robot->id, self::$robot->session), 'Сессия не найдена'); + } + + /** + * @testdox Запись ключа + */ + public function testRobotGroupWriteKey(): void + { + // Запись ключа + self::$robot->key = empty(self::$group_key) ? rand(0, 10) : self::$group_key; + + // Проверка ключа + $this->assertNotNull(self::$robot->key, 'Не удалось записать ключ робота-группы'); + } + + /** + * @testdox Запись ключа с использованием метода + */ + public function testRobotGroupWriteKeyUsingMethod(): void + { + // Запись ключа + self::$robot->key((string) (empty(self::$group_key) ? rand(0, 10) : self::$group_key)); + + // Проверка ключа + $this->assertNotNull(self::$robot->key, 'Не удалось записать ключ робота-группы'); + } + + /** + * @testdox Запись ключа (повторная) + */ + public function testRobotGroupWriteKeyWhenHeIsAlreadyWrited(): void + { + // Запись ключа + self::$robot->key = empty(self::$group_key) ? rand(0, 10) : self::$group_key; + + // Проверка ключа + $this->assertNotNull(self::$robot->key, 'Не удалось записать ключ робота-группы'); + + // Проверка выброса исключения + $this->expectExceptionMessage('Запрещено перезаписывать ключ'); + + // Повторная запись ключа + self::$robot->key = empty(self::$group_key) ? rand(0, 10) : self::$group_key; + } + + /** + * @testdox Чтение ключа + */ + public function testRobotGroupReadKey(): void + { + // Запись ключа + self::$robot->key((string) (empty(self::$group_key) ? rand(0, 10) : self::$group_key)); + + // Проверки + $this->assertNotNull(self::$robot->key, 'Не удалось записать ключ робота-группы'); + $this->assertNotNull(self::$robot->key, 'Не удалось прочитать ключ'); + } + + /** + * @testdox Чтение ключа, если он не инициализирован + */ + public function testRobotGroupReadKeyWhenHeIsNotInit(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Ключ не инициализирован'); + + // Чтение ключа + $key = self::$robot->key; + } + + /** + * @testdox Запись версии API + */ + public function testRobotGroupWriteVersion(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Запрещено перезаписывать версию API'); + + // Запись версии + self::$robot->version = empty(self::$robot->version) ? rand(0, 10) : self::$robot->version; + } + + /** + * @testdox Чтение версии + */ + public function testRobotGroupReadVersion(): void + { + // Проверка + $this->assertNotNull(self::$robot->version, 'Не удалось прочитать версию'); + } +} diff --git a/hood/vk/tests/robots/userTest.php b/hood/vk/tests/robots/userTest.php new file mode 100644 index 0000000..b3a0d74 --- /dev/null +++ b/hood/vk/tests/robots/userTest.php @@ -0,0 +1,248 @@ +deauth(); + } + + /** + * @testdox Инициализация аккаунта + * @beforeClass + */ + public function testAccountInit(): void + { + // Проверка входных данных + if (empty(self::$project_id)) { + self::$markTestSkipped('Не найден идентификатор проекта'); + } + + // Инициализация аккаунта + self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../accounts'); + + // Запись режима SSL-протокола + self::$account->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 Деинициализация робота + * @after + */ + public function testRobotGroupDeinit(): void + { + // Очистка реестра + self::$core->delete(); + + // Проверка + $this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота'); + } + + /** + * @testdox Инициализация робота + * @before + */ + public function testRobotGroupInit(): void + { + // Инициализация ядра + self::$core = core::init(); + + // Сохранение количества роботов + $count = self::$core->robots; + + // Инициализация робота + self::$robot = self::$core->user(empty(self::$id) ? rand(0, 10) : self::$id); + + // Проверка + $this->assertEquals(self::$core->robots, $count + 1, 'Ошибка при инициализации робота'); + } + + /** + * @testdox Запись идентификатора + */ + public function testRobotGroupWriteId(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Запрещено перезаписывать идентификатор'); + + // Запись идентификатора + self::$robot->id = empty(self::$robot->id) ? rand(0, 10) : self::$robot->id; + } + + /** + * @testdox Чтение идентификатора + */ + public function testRobotGroupReadId(): void + { + // Проверки + $this->assertNotNull(self::$robot->id, 'Не удалось прочитать идентификатор'); + $this->assertNotEmpty(self::$core->get(self::$robot->id), 'Робот не найден'); + } + + /** + * @testdox Запись сессии + */ + public function testRobotGroupWriteSession(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Запрещено перезаписывать сессию'); + + // Запись сессии + self::$robot->session = rand(0, 10); + } + + /** + * @testdox Чтение сессии + */ + public function testRobotGroupReadSession(): void + { + // Проверки + $this->assertNotNull(self::$robot->session, 'Не удалось прочитать сессию'); + $this->assertNotEmpty(self::$core->get(self::$robot->id, self::$robot->session), 'Сессия не найдена'); + } + + /** + * @testdox Запись ключа + */ + public function testRobotGroupWriteKey(): void + { + // Запись ключа + self::$robot->key = empty(self::$key) ? rand(0, 10) : self::$key; + + // Проверка ключа + $this->assertNotNull(self::$robot->key, 'Не удалось записать ключ пользователя'); + } + + /** + * @testdox Запись ключа с использованием метода + */ + public function testRobotGroupWriteKeyUsingMethod(): void + { + // Запись ключа + self::$robot->key((string) (empty(self::$key) ? rand(0, 10) : self::$key)); + + // Проверка ключа + $this->assertNotNull(self::$robot->key, 'Не удалось записать ключ пользователя'); + } + + /** + * @testdox Запись ключа (повторная) + */ + public function testRobotGroupWriteKeyWhenHeIsAlreadyWrited(): void + { + // Запись ключа + self::$robot->key = empty(self::$key) ? rand(0, 10) : self::$key; + + // Проверка ключа + $this->assertNotNull(self::$robot->key, 'Не удалось записать ключ пользователя'); + + // Проверка выброса исключения + $this->expectExceptionMessage('Запрещено перезаписывать ключ'); + + // Повторная запись ключа + self::$robot->key = empty(self::$key) ? rand(0, 10) : self::$key; + } + + /** + * @testdox Чтение ключа + */ + public function testRobotGroupReadKey(): void + { + // Запись ключа + self::$robot->key((string) (empty(self::$key) ? rand(0, 10) : self::$key)); + + // Проверки + $this->assertNotNull(self::$robot->key, 'Не удалось записать ключ пользователя'); + $this->assertNotNull(self::$robot->key, 'Не удалось прочитать ключ'); + } + + /** + * @testdox Чтение ключа, если он не инициализирован + */ + public function testRobotGroupReadKeyWhenHeIsNotInit(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Ключ не инициализирован'); + + // Чтение ключа + $key = self::$robot->key; + } + + /** + * @testdox Запись версии API + */ + public function testRobotGroupWriteVersion(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Запрещено перезаписывать версию API'); + + // Запись версии + self::$robot->version = empty(self::$robot->version) ? rand(0, 10) : self::$robot->version; + } + + /** + * @testdox Чтение версии + */ + public function testRobotGroupReadVersion(): void + { + // Проверка + $this->assertNotNull(self::$robot->version, 'Не удалось прочитать версию'); + } +} diff --git a/hood/vk/tests/settings.php b/hood/vk/tests/settings.php new file mode 100644 index 0000000..e6deb96 --- /dev/null +++ b/hood/vk/tests/settings.php @@ -0,0 +1,68 @@ + - * - * @todo Добавить обработку ошибок ($request['errors];) - */ -class Message -{ - /** - * Отправить сообщение - * - * @param $from Экземпляр робота - * @param int $to Идентификатор получателя - * @param string $message Текст сообщения - * @param int $mode Режим доставки сообщения - * - * @return array Ответ сервера - */ - public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2): array - { - $random_id = time(); - $check = false; - - // Режим доставки сообщений (усложнение по возрастанию) - if ($mode >= 1) { - // Дополнительное умножение - $random_id *= rand(); - - if ($mode >= 2) { - // Проверка отправки (по умолчанию) - $check = true; - } - } - - // Запрос: отправить сообщение - $request = $from->browser()->api('messages.send', [ - 'access_token' => $from->token, - 'v' => $from->version, - 'peer_id' => $to, - 'message' => $message, - 'random_id' => $random_id - ]); - - if ($check) { - // Если активирована проверка отправленного сообщения - - // Запрос: получить сообщение по ID - if ($from->browser()->api('messages.getById', [ - 'access_token' => $from->token, - 'v' => $from->version, - 'message_ids' => is_int($request["response"]) ? $request["response"] : $request["response"]['message_id'] - ])['response']['count'] === 0) { - // Если сообщения не существует, то повтор - self::put($from, $to, $message, $mode); - } - } - - return $request; - } -} diff --git a/system/Browsers/BrowserAbstract.php b/system/Browsers/BrowserAbstract.php deleted file mode 100644 index bb1af25..0000000 --- a/system/Browsers/BrowserAbstract.php +++ /dev/null @@ -1,111 +0,0 @@ -post($url, $params); - // } catch (Exception $e) { - // // if (in_array($e->getCode(), $this->request_ignore_error)) { - // // sleep(1); - // // continue; - // // } else - // // throw new Exception($e->getMessage(), $e->getCode()); - // throw new Exception('Жопа'); - // } - // } - } - - /** - * Создать - * - * Для запросов на создание (REST) - * Реализация HTTP PUT - * - * @param string $url Запрашиваемая ссылка - * @param array $params Передаваемые параметры - * - * @return array Ответ сервера - */ - public static function put(string $url, array $params = null): array - { - return ['error' => 'Метод не поддерживается']; - } - - /** - * Изменить - * - * Для запросов на изменение (REST) - * Реализация HTTP POST - * - * @param string $url Запрашиваемая ссылка - * @param array $params Передаваемые параметры - * - * @return array Ответ сервера - */ - public static function post(string $url, array $params = null): array - { - return ['error' => 'Метод не поддерживается']; - } - - /** - * Получить - * - * Для запросов на получение (REST) - * Реализация HTTP GET - * - * @param string $url Запрашиваемая ссылка - * @param array $params Передаваемые параметры - * - * @return array Ответ сервера - */ - public static function get(string $url, array $params = null): array - { - return ['error' => 'Метод не поддерживается']; - } - - /** - * Удалить - * - * Для запросов на удаление (REST) - * Реализация HTTP DELETE - * - * @param string $url Запрашиваемая ссылка - * @param array $params Передаваемые параметры - * - * @return array Ответ сервера - */ - public static function delete(string $url, array $params = null): array - { - return ['error' => 'Метод не поддерживается']; - } -} diff --git a/system/Browsers/Curl.php b/system/Browsers/Curl.php deleted file mode 100644 index 91e19e7..0000000 --- a/system/Browsers/Curl.php +++ /dev/null @@ -1,66 +0,0 @@ - $result]; - } - } - - protected static function checkSSL($domain) - { - $ssl_check = @fsockopen('ssl://' . $domain, 443, $errno, $errstr, 30); - $res = !!$ssl_check; - - if ($ssl_check) { - fclose($ssl_check); - } - - return $res; - } -} diff --git a/system/BuildAbstract.php b/system/BuildAbstract.php deleted file mode 100644 index d1340ef..0000000 --- a/system/BuildAbstract.php +++ /dev/null @@ -1,11 +0,0 @@ - - */ -class Builder -{ - /** - * Инициализация - * - * @param Core $core Ядро - */ - public function __construct(Core $core = null) - { - if (isset($core)) { - $this->core = $core::init(); - } - } - - /** - * Создание робота-группы - * - * @param int $id Идентификатор - * - * @return Group - */ - public function group(int $id): Group - { - // Создание робота - $robot = new Group(); - - // Идентификатор - $robot->id = $id; - - // Сессия - $robot->session = isset($this->core) ? count($this->core->get($id)) : 0; - - return isset($this->core) ? $this->reg($robot) : $robot; - } - - /** - * Создание робота-пользователя - * - * @param int $id Идентификатор - * - * @return User - */ - public function user(): User - { - return $this->reg(new User()); - } - - /** - * Регистрация в ядре - * - * @param RobotAbstract $robot Регистрируемый робот - * - * @return RobotAbstract - * - * @todo Добавить создание нового процесса (многопоточность) - */ - private function reg(RobotAbstract $robot): RobotAbstract - { - // Регистрация в ядре - $this->core->set((int) $robot->id, $robot); - - // Количество роботов - ++$this->core->robots; - - return $robot; - } - - /** - * Журналирование - * - * @param string $file Файл для журналирования - * - * @return Builder - * - * @todo Добавить установку иного журналиста по спецификации PSR-3 - * @todo Более гибкое журналирование - */ - public function log(string $file = null): Builder - { - // Инициализация журналиста (требует переработки) - Jasmo::init()::post($file)::postErrorHandler()::postShutdownHandler(); - - return $this; - } -} diff --git a/system/Core.php b/system/Core.php deleted file mode 100644 index 353296d..0000000 --- a/system/Core.php +++ /dev/null @@ -1,108 +0,0 @@ - - */ -class Core -{ - use Singleton, Registry { - Singleton::__construct insteadof Registry; - } - - /** - * Количество роботов - * - * Хранит экземпляры роботов по их идентификаторам - * - * @var int - */ - public int $robots = 0; - - /** - * Временная зона - * - * Используется в логировании - * - * @var string - */ - public string $timezone = 'Europe/Moscow'; - - /** - * Пути - * - * Архитектура проекта - * - * @var array - */ - public array $path = [ - 'root' => '', - 'logs' => './logs', - 'temp' => './temp' - ]; - - /** - * Инициализация - * - * @see Singleton->__construct() Внимание на protected - */ - protected function __construct() - { - $this->path['root'] = $root = dirname(__DIR__); - $this->path['logs'] = $root . '/logs'; - $this->path['temp'] = $root . '/temp'; - } - - /** - * Сборщик - * - * @return Builder - */ - public function build(): Builder - { - return new Builder($this); - } - - /** - * Запись в реестр - * - * Модификация наследуемого метода - * - * @param mixed $id - * @param mixed $robot - * - * @return void - */ - public static function set(int $id, RobotAbstract $robot): bool - { - if (empty(self::$registry[$id])) { - self::$registry[$id] = []; - } - - array_push(self::$registry[$id], $robot); - - return true; - } -} diff --git a/system/Loggers/Jasmo.php b/system/Loggers/Jasmo.php deleted file mode 100644 index 75b4b49..0000000 --- a/system/Loggers/Jasmo.php +++ /dev/null @@ -1,130 +0,0 @@ -pushHandler(new StreamHandler(Core::$path['log'] . "/${file}-INFO.log", Logger::INFO, false)); // Инфомация о процессе работы - self::$logger->pushHandler(new StreamHandler(Core::$path['log'] . "/${file}-NOTICE.log", Logger::NOTICE, false)); // Уведомления - self::$logger->pushHandler(new StreamHandler(Core::$path['log'] . "/${file}-WARNING.log", Logger::WARNING, false)); // Предупреждения - self::$logger->pushHandler(new StreamHandler(Core::$path['log'] . "/${file}-ERROR.log", Logger::ERROR, false)); // Ошибки - self::$logger->pushHandler(new StreamHandler(Core::$path['log'] . "/${file}-CRITICAL.log", Logger::CRITICAL, false)); // Критические ошибки - self::$logger->pushHandler(new StreamHandler(Core::$path['log'] . "/${file}-ALERT.log", Logger::ALERT, false)); // Критические ошибки - self::$logger->pushHandler(new StreamHandler(Core::$path['log'] . "/${file}-EMERGENCY.log", Logger::EMERGENCY, false)); // Критические ошибки - self::$logger->pushHandler(new StreamHandler(Core::$path['log'] . "/$file.log", Logger::DEBUG)); // Общий лог - - // test - // self::$logger->pushProcessor(function ($record) { - // $record['extra']['dummy'] = 'Hello world!'; - - // return $record; - // }); - - echo '[' . date_format(new DateTime(Core::$timezone), 'd-m-Y H:i:s') . '] Начало работы', PHP_EOL; - self::$logger->info('Начало работы'); - - return self::$instance; - } - - public static function get(): ?Jasmo - { - return self::$instance; - } - - public static function delete(): ?Jasmo - { - return self::$instance; - } - - public static function postErrorHandler(): ?Jasmo - { - /** - * Подключение логгера в обработчик ошибок (Jasny) - */ - $handler = new ErrorHandler(self::$logger); - - $handler->logUncaught(E_ALL); // Обрабатывать все ошибки - $handler->onFatalError(function ($error) { - self::$logger->error($error); - }, true); - - return self::$instance; - } - - public static function deleteErrorHandler(): ?Jasmo - { - return self::$instance; - } - - public static function postShutdownHandler(): ?Jasmo - { - register_shutdown_function(array(self::$instance, 'handlerShutdown')); - - return self::$instance; - } - - - public function handlerShutdown(): void - { - self::$logger->info('Завершение работы'); - echo '[' . date_format(new DateTime(Core::$timezone), 'd-m-Y H:i:s') . '] Завершение работы', PHP_EOL; - } - - // public function handlerErrors($errno, $errstr, $errfile, $errline, $errcontext): bool - // { - // echo "друг, да ты вероянто напортачил $errno $errstr", PHP_EOL, PHP_EOL; - // if ($this->logger->error("друг, да ты вероянто напортачил $errno $errstr")) { - // return true; - // } else { - // return false; - // } - // } -} diff --git a/system/Loggers/LoggerAbstract.php b/system/Loggers/LoggerAbstract.php deleted file mode 100644 index 4e3e332..0000000 --- a/system/Loggers/LoggerAbstract.php +++ /dev/null @@ -1,26 +0,0 @@ - - * - * @todo Вместо методов реализовать фабрику методов API, как было раньше - */ -class Group extends RobotAbstract -{ - /** - * LongPoll-сессия - * - * @var LongPoll - */ - protected LongPoll $longpoll; - - /** - * Отправить сообщение - * - * @param int $to Идентификатор получателя - * @param string $message Текст сообщения - * @param int $mode Режим доставки сообщения - * - * @return array - */ - public function message(int $to, string $message, int $mode = 2): array - { - return Message::put($this, $to, $message, $mode); - } - - /** - * Магический метод-сеттер - * - * @param mixed $name Название - * @param mixed $value Значение - * - * @see RobotAbstract Модификация наследуемого метода - * - * @return void - */ - public function __set($name, $value): void - { - parent::__set($name, $value); - - if ($name === 'longpoll') { - if ($value instanceof LongPoll) { - $this->longpoll = $value; - } else { - $this->longpoll = new LongPoll($this); - } - } - } - - /** - * Магический метод-геттер - * - * @param mixed $name Название - * - * @see RobotAbstract Модификация наследуемого метода - * - * @return mixed - */ - public function __get($name) - { - if (!empty($parent = parent::__get($name))) { - return $parent; - } - - if ($name === 'longpoll') { - if (empty($this->longpoll)) { - $this->longpoll = new LongPoll($this); - } - return $this->longpoll; - } - } -} diff --git a/system/Robots/RobotAbstract.php b/system/Robots/RobotAbstract.php deleted file mode 100644 index 719da1a..0000000 --- a/system/Robots/RobotAbstract.php +++ /dev/null @@ -1,265 +0,0 @@ - - */ -abstract class RobotAbstract -{ - /** - * Идентификатор - * - * @var int - */ - protected int $id; - - /** - * Сессия - * - * @var int - */ - protected int $session; - - /** - * Токен - * - * @var string - */ - protected string $token; - - /** - * Версия API - * - * @var float - */ - protected float $version = 5.124; - - /** - * Браузер - * - * @var BrowserAbstract - */ - protected BrowserAbstract $browser; - - /** - * Прокси - * - * @var ProxyAbstract - */ - protected ProxyAbstract $proxy; - - /** - * Обработчик капчи - * - * @var CaptchaAbstract - */ - protected CaptchaAbstract $captcha; - - /** - * Магический сеттер - * - * @param mixed $name Название - * @param mixed $value Значение - * - * @return void - */ - public function __set($name, $value): void - { - if ($name === 'id' && empty($this->id)) { - $this->id = $value; - } else if ($name === 'session' && empty($this->session)) { - $this->session = $value; - } else if ($name === 'token' && empty($this->token)) { - $this->token = $value; - } else if ($name === 'version' && empty($this->version)) { - $this->version = $value; - } else if ($name === 'browser') { - $this->browser = $value; - } else if ($name === 'proxy') { - $this->proxy = $value; - } else if ($name === 'captcha') { - $this->captcha = $value; - } - } - - /** - * Магический геттер - * - * @param mixed $name Название - * - * @return mixed - */ - public function __get($name) - { - if ($name === 'id') { - return $this->id; - } else if ($name === 'session') { - return $this->session; - } else if ($name === 'token') { - return $this->token; - } else if ($name === 'version') { - return $this->version; - } else if ($name === 'browser') { - return $this->browser; - } else if ($name === 'proxy') { - return $this->proxy; - } else if ($name === 'captcha') { - return $this->captcha; - } - } - - /** - * Токен - * - * @param string $token Токен - * - * @return RobotAbstract - */ - public function token(string $token): RobotAbstract - { - $this->token = $token; - - return $this; - } - - - /** - * Браузер - * - * @param BrowserAbstract $browser Браузер - * - * @return BrowserAbstract - */ - public function browser(BrowserAbstract $browser = null): BrowserAbstract - { - if (isset($this->browser) && $browser === null) { - // Если не передан браузер и свойство иниициализировано - return $this->browser; - } else if ($browser === null) { - // Иначе если не передан браузер свойство не инициализировано - return $this->browser = new \VK\Browsers\Curl(); - } else { - // Иначе полученный браузер записывается в свойство и возвращается - return $this->browser = $browser; - } - } - - /** - * Установка прокси - * - * @param ProxyAbstract $proxy Прокси - * - * @return RobotAbstract - */ - public function proxy(ProxyAbstract $proxy): RobotAbstract - { - $this->proxy = $proxy; - - return $this; - } - - /** - * Установка обработчика капчи - * - * @param CaptchaAbstract $captcha Обработчик капчи - * - * @return RobotAbstract - */ - public function captcha(CaptchaAbstract $captcha): RobotAbstract - { - $this->captcha = $captcha; - - return $this; - } - - // /** - // * Метод получения токена аккаунта - // * - // * @return string - // */ - // public function getToken($captcha_key = null, $captcha_id = null): string - // { - // if (!empty($_ENV['ACCOUNT_TOKEN'])) { - // return $_ENV['ACCOUNT_TOKEN']; - // } else if ($this->mobile) { - // $this->token_access = $this->genTokenMobile($captcha_key, $this->captcha_id ?? $captcha_id); - // } else { - // $this->token_access = $this->genToken(); - // } - - // return $this->token_access; - // } - - - // abstract protected function genToken(): string; - // abstract protected function genTokenMobile(string $captcha_key, int $captcha_id): string; - - // /** - // * @param null $access_groups - // * @param bool $resend - // * @return mixed - // * @throws VkApiException - // */ - // private function getTokenAccess($scope = null, $resend = false) - // { - // $get_url_token = Curl::getToken('https://oauth.vk.com/authorize?client_id=' . $_ENV['APP_ID'] . - // '&scope=' . $_ENV['ACCESS_GROUPS'] . ($resend ? '&revoke=1' : '') . - // '&response_type=token'); - - // echo 'https://oauth.vk.com/authorize?client_id=' . $_ENV['APP_ID'] . - // '&scope=' . $_ENV['ACCESS_GROUPS'] . ($resend ? '&revoke=1' : '') . - // '&response_type=token', PHP_EOL; - // if ($get_url_token['body'] !== false) { - // if (isset($get_url_token['header']['location'][0])) - // $url_token = $get_url_token['header']['location'][0]; - // else { - // preg_match('!location.href = "(.*)"\+addr!s', $get_url_token['body'], $url_token); - - // if (!isset($url_token[1])) { - // throw new VkApiException("Не получилось получить токен на этапе получения ссылки подтверждения"); - // } - // $url_token = $url_token[1]; - // } - // } else { - // echo 'жопа'; - // die; - // } - // echo $url_token, PHP_EOL; - // die; - // $access_token_location = Curl::getToken($url_token)['header']['location'][0]; - - // if (preg_match("!access_token=(.*?)&!s", $access_token_location, $access_token) != 1) - // throw new Exception("Не удалось найти access_token в строке ридеректа, ошибка:" . Curl::getToken($access_token_location, null, false)['body']); - - // echo $url_token, PHP_EOL; - // die; - // return $access_token[1]; - // } -} diff --git a/system/Robots/User.php b/system/Robots/User.php deleted file mode 100644 index e3dfb7d..0000000 --- a/system/Robots/User.php +++ /dev/null @@ -1,47 +0,0 @@ -auth(); - } - - /** - * Метод авторизации робота - * - * @return void - */ - public function auth(string $token, float $version) - { - if ($token instanceof auth) { - $this->auth = $token; - $this->version = $version; - $this->token = $this->auth->getAccessToken(); - } else { - $this->token = $token; - $this->version = $version; - } - $this->data = json_decode(file_get_contents('php://input')); - } -} diff --git a/system/Traits/Singleton.php b/system/Traits/Singleton.php deleted file mode 100644 index cf7b9fd..0000000 --- a/system/Traits/Singleton.php +++ /dev/null @@ -1,59 +0,0 @@ -