diff --git a/README.md b/README.md index 867e854..17e6897 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ -# Telegram chat-robot implementing a register of people +# Viber chat-robot -⚠️ Documentation and code commenting not added +Sending requests from [mirzaev/spetsresurs-google_sheets-parser](https://git.mirzaev.sexy/mirzaev/spetsresurs-google_sheets-parser) to [mirzaev/arangodb](https://git.mirzaev.sexy/mirzaev/arangodb) and vice versa -Simple, asynchronous, scalable, easy to update -The robot sends messages in Russian, but they can easily be replaced with English +😼 Developed in 1 days for 100000 rubles ($1200) -😼 Developed lazily in 2 days diff --git a/START b/START deleted file mode 100644 index a7c449e..0000000 --- a/START +++ /dev/null @@ -1 +0,0 @@ -sudo -u www-data php mirzaev/telegram/registry/people/system/public/robot.php diff --git a/composer.json b/composer.json index 909884f..dce9480 100644 --- a/composer.json +++ b/composer.json @@ -1,13 +1,16 @@ { - "name": "mirzaev/telegram-registry-people", + "name": "mirzaev/spetsresurs-viber-registry-requests", "type": "robot", "require": { - "badfarm/zanzara": "^0.9.0" + "bogdaan/viber-bot-php": "^0.0.15", + "triagens/arangodb": "^3.8", + "mirzaev/arangodb": "^1.0", + "monolog/monolog": "^3.3" }, "license": "WTFPL", "autoload": { "psr-4": { - "mirzaev\\telegram\\registry\\people\\": "mirzaev/telegram/registry/people/system/" + "mirzaev\\spetsresurs\\viber\\registry\\requests\\": "mirzaev/spetsresurs/viber/registry/requests/system/" } }, "authors": [ @@ -16,10 +19,5 @@ "email": "arsen@mirzaev.sexy" } ], - "minimum-stability": "stable", - "config": { - "allow-plugins": { - "php-http/discovery": true - } - } + "minimum-stability": "stable" } diff --git a/composer.lock b/composer.lock index 28b821e..1895cf2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,46 +4,34 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "39ea6b3ef133c181d1814ce561dd40ae", + "content-hash": "3fd69eb362accef047acf98bf5aa1405", "packages": [ { - "name": "badfarm/zanzara", - "version": "0.9.0", + "name": "bogdaan/viber-bot-php", + "version": "0.0.15", "source": { "type": "git", - "url": "https://github.com/badfarm/zanzara.git", - "reference": "76edd38a2f161f105ddfaa00e02fd1e603b7882d" + "url": "https://github.com/Bogdaan/viber-bot-php.git", + "reference": "176dc938613d88e42ca04c7e7598f842f8f1cafc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/badfarm/zanzara/zipball/76edd38a2f161f105ddfaa00e02fd1e603b7882d", - "reference": "76edd38a2f161f105ddfaa00e02fd1e603b7882d", + "url": "https://api.github.com/repos/Bogdaan/viber-bot-php/zipball/176dc938613d88e42ca04c7e7598f842f8f1cafc", + "reference": "176dc938613d88e42ca04c7e7598f842f8f1cafc", "shasum": "" }, "require": { - "clue/http-proxy-react": "^1.8", - "ext-json": "*", - "ext-readline": "*", - "netresearch/jsonmapper": "^4.1", - "opis/closure": "^3.6", - "php": ">=7.4", - "php-di/php-di": "^6.4", - "php-http/multipart-stream-builder": "^1.2", - "psr/container": "^1.1", - "psr/log": "^1.1", - "react/cache": "^1.2", - "react/event-loop": "^1.3", - "react/http": "^1.8" + "guzzlehttp/guzzle": "^6.2 | ^7.0", + "php": ">=5.5.0" }, "require-dev": { - "monolog/monolog": "^2.9", - "phpunit/phpunit": "^9.6", - "symfony/dotenv": "^5.4" + "monolog/monolog": "^1.22", + "phpunit/phpunit": "^4.8" }, "type": "library", "autoload": { "psr-4": { - "Zanzara\\": "src/Zanzara" + "Viber\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -52,589 +40,179 @@ ], "authors": [ { - "name": "Michele Righetti" - }, - { - "name": "Mattia Corradi" + "name": "Novikov Bogdan", + "email": "hcbogdan@gmail.com" } ], - "description": "Asynchronous PHP Telegram Bot Framework", + "description": "Php bot interface to work with Viber API", "keywords": [ - "async", "bot", - "php", - "reactphp", - "telegram" + "im", + "viber" ], "support": { - "issues": "https://github.com/badfarm/zanzara/issues", - "source": "https://github.com/badfarm/zanzara/tree/0.9.0" + "issues": "https://github.com/Bogdaan/viber-bot-php/issues", + "source": "https://github.com/Bogdaan/viber-bot-php/tree/0.0.15" }, - "time": "2023-04-16T14:11:23+00:00" + "time": "2022-01-23T21:49:58+00:00" }, { - "name": "clue/http-proxy-react", - "version": "v1.8.0", + "name": "guzzlehttp/guzzle", + "version": "7.7.0", "source": { "type": "git", - "url": "https://github.com/clue/reactphp-http-proxy.git", - "reference": "09366dd3e13b36b90f8e47a6acaf5a2c96b79fb5" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/reactphp-http-proxy/zipball/09366dd3e13b36b90f8e47a6acaf5a2c96b79fb5", - "reference": "09366dd3e13b36b90f8e47a6acaf5a2c96b79fb5", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "react/promise": "^3 || ^2.1 || ^1.2.1", - "react/socket": "^1.12", - "ringcentral/psr7": "^1.2" - }, - "require-dev": { - "clue/block-react": "^1.5", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8", - "react/event-loop": "^1.2", - "react/http": "^1.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Clue\\React\\HttpProxy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering" - } - ], - "description": "Async HTTP proxy connector, tunnel any TCP/IP-based protocol through an HTTP CONNECT proxy server, built on top of ReactPHP", - "homepage": "https://github.com/clue/reactphp-http-proxy", - "keywords": [ - "async", - "connect", - "http", - "proxy", - "reactphp" - ], - "support": { - "issues": "https://github.com/clue/reactphp-http-proxy/issues", - "source": "https://github.com/clue/reactphp-http-proxy/tree/v1.8.0" - }, - "funding": [ - { - "url": "https://clue.engineering/support", - "type": "custom" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-09-01T14:36:49+00:00" - }, - { - "name": "evenement/evenement", - "version": "v3.0.1", - "source": { - "type": "git", - "url": "https://github.com/igorw/evenement.git", - "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/531bfb9d15f8aa57454f5f0285b18bec903b8fb7", - "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "Evenement": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "description": "Événement is a very simple event dispatching library for PHP", - "keywords": [ - "event-dispatcher", - "event-emitter" - ], - "support": { - "issues": "https://github.com/igorw/evenement/issues", - "source": "https://github.com/igorw/evenement/tree/master" - }, - "time": "2017-07-23T21:35:13+00:00" - }, - { - "name": "fig/http-message-util", - "version": "1.1.5", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message-util.git", - "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765", - "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "suggest": { - "psr/http-message": "The package containing the PSR-7 interfaces" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Fig\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "issues": "https://github.com/php-fig/http-message-util/issues", - "source": "https://github.com/php-fig/http-message-util/tree/1.1.5" - }, - "time": "2020-11-24T22:02:12+00:00" - }, - { - "name": "laravel/serializable-closure", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "nesbot/carbon": "^2.61", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\SerializableClosure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Nuno Maduro", - "email": "nuno@laravel.com" - } - ], - "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", - "keywords": [ - "closure", - "laravel", - "serializable" - ], - "support": { - "issues": "https://github.com/laravel/serializable-closure/issues", - "source": "https://github.com/laravel/serializable-closure" - }, - "time": "2023-01-30T18:31:20+00:00" - }, - { - "name": "netresearch/jsonmapper", - "version": "v4.2.0", - "source": { - "type": "git", - "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", "shasum": "" }, "require": { "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", - "squizlabs/php_codesniffer": "~3.5" - }, - "type": "library", - "autoload": { - "psr-0": { - "JsonMapper": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "OSL-3.0" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "cweiske@cweiske.de", - "homepage": "http://github.com/cweiske/jsonmapper/", - "role": "Developer" - } - ], - "description": "Map nested JSON structures onto PHP classes", - "support": { - "email": "cweiske@cweiske.de", - "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" - }, - "time": "2023-04-09T17:37:40+00:00" - }, - { - "name": "opis/closure", - "version": "3.6.3", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", - "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6.x-dev" - } - }, - "autoload": { - "files": [ - "functions.php" - ], - "psr-4": { - "Opis\\Closure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.3" - }, - "time": "2022-01-27T09:35:39+00:00" - }, - { - "name": "php-di/invoker", - "version": "2.3.3", - "source": { - "type": "git", - "url": "https://github.com/PHP-DI/Invoker.git", - "reference": "cd6d9f267d1a3474bdddf1be1da079f01b942786" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/cd6d9f267d1a3474bdddf1be1da079f01b942786", - "reference": "cd6d9f267d1a3474bdddf1be1da079f01b942786", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "psr/container": "^1.0|^2.0" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "mnapoli/hard-mode": "~0.3.0", - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Invoker\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Generic and extensible callable invoker", - "homepage": "https://github.com/PHP-DI/Invoker", - "keywords": [ - "callable", - "dependency", - "dependency-injection", - "injection", - "invoke", - "invoker" - ], - "support": { - "issues": "https://github.com/PHP-DI/Invoker/issues", - "source": "https://github.com/PHP-DI/Invoker/tree/2.3.3" - }, - "funding": [ - { - "url": "https://github.com/mnapoli", - "type": "github" - } - ], - "time": "2021-12-13T09:22:56+00:00" - }, - { - "name": "php-di/php-di", - "version": "6.4.0", - "source": { - "type": "git", - "url": "https://github.com/PHP-DI/PHP-DI.git", - "reference": "ae0f1b3b03d8b29dff81747063cbfd6276246cc4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/ae0f1b3b03d8b29dff81747063cbfd6276246cc4", - "reference": "ae0f1b3b03d8b29dff81747063cbfd6276246cc4", - "shasum": "" - }, - "require": { - "laravel/serializable-closure": "^1.0", - "php": ">=7.4.0", - "php-di/invoker": "^2.0", - "php-di/phpdoc-reader": "^2.0.1", - "psr/container": "^1.0" + "guzzlehttp/promises": "^1.5.3 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" }, "provide": { - "psr/container-implementation": "^1.0" + "psr/http-client-implementation": "1.0" }, "require-dev": { - "doctrine/annotations": "~1.10", - "friendsofphp/php-cs-fixer": "^2.4", - "mnapoli/phpunit-easymock": "^1.2", - "ocramius/proxy-manager": "^2.11.2", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^9.5" + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { - "doctrine/annotations": "Install it if you want to use annotations (version ~1.2)", - "ocramius/proxy-manager": "Install it if you want to use lazy injection (version ~2.0)" + "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": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, "autoload": { "files": [ - "src/functions.php" + "src/functions_include.php" ], "psr-4": { - "DI\\": "src/" + "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "The dependency injection container for humans", - "homepage": "https://php-di.org/", + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", "keywords": [ - "PSR-11", - "container", - "container-interop", - "dependency injection", - "di", - "ioc", - "psr11" + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" ], "support": { - "issues": "https://github.com/PHP-DI/PHP-DI/issues", - "source": "https://github.com/PHP-DI/PHP-DI/tree/6.4.0" + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.7.0" }, "funding": [ { - "url": "https://github.com/mnapoli", + "url": "https://github.com/GrahamCampbell", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/php-di/php-di", + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", "type": "tidelift" } ], - "time": "2022-04-09T16:46:38+00:00" + "time": "2023-05-21T14:04:53+00:00" }, { - "name": "php-di/phpdoc-reader", - "version": "2.2.1", + "name": "guzzlehttp/promises", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/PHP-DI/PhpDocReader.git", - "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c" + "url": "https://github.com/guzzle/promises.git", + "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/66daff34cbd2627740ffec9469ffbac9f8c8185c", - "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c", + "url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6", + "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "mnapoli/hard-mode": "~0.3.0", - "phpunit/phpunit": "^8.5|^9.0" + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "type": "library", - "autoload": { - "psr-4": { - "PhpDocReader\\": "src/PhpDocReader" + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)", - "keywords": [ - "phpdoc", - "reflection" - ], - "support": { - "issues": "https://github.com/PHP-DI/PhpDocReader/issues", - "source": "https://github.com/PHP-DI/PhpDocReader/tree/2.2.1" - }, - "time": "2020-10-12T12:39:22+00:00" - }, - { - "name": "php-http/discovery", - "version": "1.15.3", - "source": { - "type": "git", - "url": "https://github.com/php-http/discovery.git", - "reference": "3ccd28dd9fb34b52db946abea1b538568e34eae8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/3ccd28dd9fb34b52db946abea1b538568e34eae8", - "reference": "3ccd28dd9fb34b52db946abea1b538568e34eae8", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0|^2.0", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "nyholm/psr7": "<1.0" - }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/http-client-implementation": "*", - "psr/http-factory-implementation": "*", - "psr/http-message-implementation": "*" - }, - "require-dev": { - "composer/composer": "^1.0.2|^2.0", - "graham-campbell/phpspec-skip-example-extension": "^5.0", - "php-http/httplug": "^1.0 || ^2.0", - "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", - "symfony/phpunit-bridge": "^6.2" - }, - "type": "composer-plugin", - "extra": { - "class": "Http\\Discovery\\Composer\\Plugin", - "plugin-optional": true - }, "autoload": { "psr-4": { - "Http\\Discovery\\": "src/" + "GuzzleHttp\\Promise\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -643,165 +221,345 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], - "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", - "homepage": "http://php-http.org", + "description": "Guzzle promises library", "keywords": [ - "adapter", - "client", - "discovery", - "factory", - "http", - "message", - "psr17", - "psr7" + "promise" ], "support": { - "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.15.3" + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.0" }, - "time": "2023-03-31T14:40:37+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-05-21T13:50:22+00:00" }, { - "name": "php-http/message-factory", - "version": "1.1.0", + "name": "guzzlehttp/psr7", + "version": "2.5.0", "source": { "type": "git", - "url": "https://github.com/php-http/message-factory.git", - "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" + "url": "https://github.com/guzzle/psr7.git", + "reference": "b635f279edd83fc275f822a1188157ffea568ff6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", - "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", + "reference": "b635f279edd83fc275f822a1188157ffea568ff6", "shasum": "" }, "require": { - "php": ">=5.4", + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-04-17T16:11:26+00:00" + }, + { + "name": "mirzaev/arangodb", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://git.mirzaev.sexy/mirzaev/arangodb", + "reference": "e7da9978d01d3f8bdef6c74809dfb4eb8989f92c" + }, + "require": { + "php": "^8.1", + "triagens/arangodb": "~3.8" + }, + "require-dev": { + "phpunit/phpunit": "^9.3.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "mirzaev\\arangodb\\": "mirzaev/arangodb/system" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "WTFPL" + ], + "authors": [ + { + "name": "Arsen Mirzaev Tatyano-Muradovich", + "email": "arsen@mirzaev.sexy", + "homepage": "https://mirzaev.sexy", + "role": "Developer" + } + ], + "description": "Simple PHP-framework for ArangoDB", + "homepage": "https://git.hood.su/mirzaev/arangodb", + "keywords": [ + "ArangoDb" + ], + "support": { + "email": "arsen@mirzaev.sexy", + "issues": "https://git.mirzaev.sexy/mirzaev/arangodb/issues", + "wiki": "https://git.mirzaev.sexy/mirzaev/arangodb/manual" + }, + "funding": [ + { + "url": "https://fund.mirzaev.sexy", + "type": "funding" + } + ], + "time": "2022-11-06T00:03:56+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^9.5.26", + "predis/predis": "^1.1 || ^2", + "ruflin/elastica": "^7", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.3.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2023-02-06T13:46:10+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Factory interfaces for PSR-7 HTTP Message", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "stream", - "uri" - ], - "support": { - "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/1.1.0" - }, - "time": "2023-04-14T14:16:17+00:00" - }, - { - "name": "php-http/multipart-stream-builder", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/multipart-stream-builder.git", - "reference": "11c1d31f72e01c738bbce9e27649a7cca829c30e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/11c1d31f72e01c738bbce9e27649a7cca829c30e", - "reference": "11c1d31f72e01c738bbce9e27649a7cca829c30e", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/discovery": "^1.7", - "php-http/message-factory": "^1.0.2", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0" - }, - "require-dev": { - "nyholm/psr7": "^1.0", - "php-http/message": "^1.5", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Message\\MultipartStream\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com" - } - ], - "description": "A builder class that help you create a multipart stream", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "multipart stream", - "stream" - ], - "support": { - "issues": "https://github.com/php-http/multipart-stream-builder/issues", - "source": "https://github.com/php-http/multipart-stream-builder/tree/1.2.0" - }, - "time": "2021-05-21T08:32:01+00:00" - }, - { - "name": "psr/container", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" + "Psr\\Http\\Client\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -814,20 +572,18 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "http", + "http-client", + "psr", + "psr-18" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/http-client/tree/1.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2023-04-10T20:12:12+00:00" }, { "name": "psr/http-factory", @@ -886,16 +642,16 @@ }, { "name": "psr/http-message", - "version": "1.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { @@ -904,7 +660,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -919,7 +675,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -933,36 +689,36 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2023-04-04T09:50:52+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -983,364 +739,36 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:46:02+00:00" }, { - "name": "react/cache", - "version": "v1.2.0", + "name": "ralouphie/getallheaders", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/reactphp/cache.git", - "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", - "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "php": ">=5.3.0", - "react/promise": "^3.0 || ^2.0 || ^1.1" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Async, Promise-based cache interface for ReactPHP", - "keywords": [ - "cache", - "caching", - "promise", - "reactphp" - ], - "support": { - "issues": "https://github.com/reactphp/cache/issues", - "source": "https://github.com/reactphp/cache/tree/v1.2.0" - }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2022-11-30T15:59:55+00:00" - }, - { - "name": "react/dns", - "version": "v1.10.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/dns.git", - "reference": "a5427e7dfa47713e438016905605819d101f238c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/a5427e7dfa47713e438016905605819d101f238c", - "reference": "a5427e7dfa47713e438016905605819d101f238c", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "react/cache": "^1.0 || ^0.6 || ^0.5", - "react/event-loop": "^1.2", - "react/promise": "^3.0 || ^2.7 || ^1.2.1", - "react/promise-timer": "^1.9" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^4.8.35", - "react/async": "^4 || ^3 || ^2" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Dns\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Async DNS resolver for ReactPHP", - "keywords": [ - "async", - "dns", - "dns-resolver", - "reactphp" - ], - "support": { - "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.10.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-09-08T12:22:46+00:00" - }, - { - "name": "react/event-loop", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/event-loop.git", - "reference": "187fb56f46d424afb6ec4ad089269c72eec2e137" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/187fb56f46d424afb6ec4ad089269c72eec2e137", - "reference": "187fb56f46d424afb6ec4ad089269c72eec2e137", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "suggest": { - "ext-event": "~1.0 for ExtEventLoop", - "ext-pcntl": "For signal handling support when using the StreamSelectLoop", - "ext-uv": "* for ExtUvLoop" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\EventLoop\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", - "keywords": [ - "asynchronous", - "event-loop" - ], - "support": { - "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.3.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-03-17T11:10:22+00:00" - }, - { - "name": "react/http", - "version": "v1.8.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/http.git", - "reference": "aa7512ee17258c88466de30f9cb44ec5f9df3ff3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/http/zipball/aa7512ee17258c88466de30f9cb44ec5f9df3ff3", - "reference": "aa7512ee17258c88466de30f9cb44ec5f9df3ff3", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "fig/http-message-util": "^1.1", - "php": ">=5.3.0", - "psr/http-message": "^1.0", - "react/event-loop": "^1.2", - "react/promise": "^3 || ^2.3 || ^1.2.1", - "react/promise-stream": "^1.4", - "react/socket": "^1.12", - "react/stream": "^1.2", - "ringcentral/psr7": "^1.2" - }, - "require-dev": { - "clue/http-proxy-react": "^1.8", - "clue/reactphp-ssh-proxy": "^1.4", - "clue/socks-react": "^1.4", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "react/async": "^4 || ^3 || ^2", - "react/promise-timer": "^1.9" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Http\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Event-driven, streaming HTTP client and server implementation for ReactPHP", - "keywords": [ - "async", - "client", - "event-driven", - "http", - "http client", - "http server", - "https", - "psr-7", - "reactphp", - "server", - "streaming" - ], - "support": { - "issues": "https://github.com/reactphp/http/issues", - "source": "https://github.com/reactphp/http/tree/v1.8.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-09-29T12:55:52+00:00" - }, - { - "name": "react/promise", - "version": "v2.9.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", "autoload": { "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\": "src/" - } + "src/getallheaders.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1348,416 +776,48 @@ ], "authors": [ { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" } ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "keywords": [ - "promise", - "promises" - ], + "description": "A polyfill for getallheaders.", "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.9.0" + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-02-11T10:27:51+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { - "name": "react/promise-stream", - "version": "v1.5.0", + "name": "symfony/deprecation-contracts", + "version": "v3.3.0", "source": { "type": "git", - "url": "https://github.com/reactphp/promise-stream.git", - "reference": "e6d2805e09ad50c4896f65f5e8705fe4ee7731a3" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise-stream/zipball/e6d2805e09ad50c4896f65f5e8705fe4ee7731a3", - "reference": "e6d2805e09ad50c4896f65f5e8705fe4ee7731a3", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { - "php": ">=5.3", - "react/promise": "^3 || ^2.1 || ^1.2", - "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4.6" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\Stream\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "The missing link between Promise-land and Stream-land for ReactPHP", - "homepage": "https://github.com/reactphp/promise-stream", - "keywords": [ - "Buffer", - "async", - "promise", - "reactphp", - "stream", - "unwrap" - ], - "support": { - "issues": "https://github.com/reactphp/promise-stream/issues", - "source": "https://github.com/reactphp/promise-stream/tree/v1.5.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-09-09T11:42:18+00:00" - }, - { - "name": "react/promise-timer", - "version": "v1.9.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise-timer.git", - "reference": "aa7a73c74b8d8c0f622f5982ff7b0351bc29e495" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/aa7a73c74b8d8c0f622f5982ff7b0351bc29e495", - "reference": "aa7a73c74b8d8c0f622f5982ff7b0351bc29e495", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "react/event-loop": "^1.2", - "react/promise": "^3.0 || ^2.7.0 || ^1.2.1" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\Timer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.", - "homepage": "https://github.com/reactphp/promise-timer", - "keywords": [ - "async", - "event-loop", - "promise", - "reactphp", - "timeout", - "timer" - ], - "support": { - "issues": "https://github.com/reactphp/promise-timer/issues", - "source": "https://github.com/reactphp/promise-timer/tree/v1.9.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-06-13T13:41:03+00:00" - }, - { - "name": "react/socket", - "version": "v1.12.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/socket.git", - "reference": "81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b", - "reference": "81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.0", - "react/dns": "^1.8", - "react/event-loop": "^1.2", - "react/promise": "^3 || ^2.6 || ^1.2.1", - "react/promise-timer": "^1.9", - "react/stream": "^1.2" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "react/async": "^4 || ^3 || ^2", - "react/promise-stream": "^1.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Socket\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", - "keywords": [ - "Connection", - "Socket", - "async", - "reactphp", - "stream" - ], - "support": { - "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.12.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-08-25T12:32:25+00:00" - }, - { - "name": "react/stream", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/stream.git", - "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/7a423506ee1903e89f1e08ec5f0ed430ff784ae9", - "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.8", - "react/event-loop": "^1.2" - }, - "require-dev": { - "clue/stream-filter": "~1.2", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Stream\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", - "keywords": [ - "event-driven", - "io", - "non-blocking", - "pipe", - "reactphp", - "readable", - "stream", - "writable" - ], - "support": { - "issues": "https://github.com/reactphp/stream/issues", - "source": "https://github.com/reactphp/stream/tree/v1.2.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2021-07-11T12:37:55+00:00" - }, - { - "name": "ringcentral/psr7", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/ringcentral/psr7.git", - "reference": "360faaec4b563958b673fb52bbe94e37f14bc686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ringcentral/psr7/zipball/360faaec4b563958b673fb52bbe94e37f14bc686", - "reference": "360faaec4b563958b673fb52bbe94e37f14bc686", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "psr/http-message": "~1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "files": [ - "src/functions_include.php" - ], - "psr-4": { - "RingCentral\\Psr7\\": "src/" - } + "function.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1765,22 +825,95 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PSR-7 message implementation", + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + }, + "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": "2023-05-23T14:45:45+00:00" + }, + { + "name": "triagens/arangodb", + "version": "v3.8.0", + "source": { + "type": "git", + "url": "https://github.com/arangodb/arangodb-php.git", + "reference": "5104c4e2803d8b7fab97a0c80a3abe3f3ff3253e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/arangodb/arangodb-php/zipball/5104c4e2803d8b7fab97a0c80a3abe3f3ff3253e", + "reference": "5104c4e2803d8b7fab97a0c80a3abe3f3ff3253e", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "ArangoDBClient": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Jan Steemann", + "homepage": "https://github.com/arangodb/arangodb-php", + "role": "Developer" + }, + { + "name": "Frank Mayer", + "homepage": "https://github.com/arangodb/arangodb-php", + "role": "Developer" + }, + { + "name": "Contributors", + "homepage": "https://github.com/arangodb/arangodb-php/graphs/contributors" + } + ], + "description": "ArangoDB PHP client", + "homepage": "https://github.com/arangodb/arangodb-php", "keywords": [ - "http", - "message", - "stream", - "uri" + "Arango", + "ArangoDb", + "database", + "distributed", + "document store", + "graph database", + "multi-model", + "nosql" ], "support": { - "source": "https://github.com/ringcentral/psr7/tree/master" + "issues": "https://github.com/arangodb/arangodb-php/issues", + "source": "https://github.com/arangodb/arangodb-php/tree/v3.8.0" }, - "time": "2018-05-29T20:21:04+00:00" + "time": "2021-06-18T12:06:02+00:00" } ], "packages-dev": [], diff --git a/import.sql b/import.sql deleted file mode 100644 index cd29d3b..0000000 --- a/import.sql +++ /dev/null @@ -1,162 +0,0 @@ --- phpMyAdmin SQL Dump --- version 5.1.1deb5ubuntu1 --- https://www.phpmyadmin.net/ --- --- Хост: localhost:3306 --- Время создания: Июн 04 2023 г., 07:56 --- Версия сервера: 10.6.12-MariaDB-0ubuntu0.22.04.1 --- Версия PHP: 8.2.6 - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -START TRANSACTION; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; - --- --- База данных: `telegram-registry-people` --- -CREATE DATABASE IF NOT EXISTS `telegram-registry-people` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -USE `telegram-registry-people`; - -DELIMITER $$ --- --- Функции --- -CREATE DEFINER=`root`@`localhost` FUNCTION `LEVENSHTEIN` (`s1` VARCHAR(255) CHARACTER SET utf8, `s2` VARCHAR(255) CHARACTER SET utf8) RETURNS INT(11) BEGIN - DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT; - DECLARE s1_char CHAR CHARACTER SET utf8; - -- max strlen=255 for this function - DECLARE cv0, cv1 VARBINARY(256); - - SET s1_len = CHAR_LENGTH(s1), - s2_len = CHAR_LENGTH(s2), - cv1 = 0x00, - j = 1, - i = 1, - c = 0; - - IF (s1 = s2) THEN - RETURN (0); - ELSEIF (s1_len = 0) THEN - RETURN (s2_len); - ELSEIF (s2_len = 0) THEN - RETURN (s1_len); - END IF; - - WHILE (j <= s2_len) DO - SET cv1 = CONCAT(cv1, CHAR(j)), - j = j + 1; - END WHILE; - - WHILE (i <= s1_len) DO - SET s1_char = SUBSTRING(s1, i, 1), - c = i, - cv0 = CHAR(i), - j = 1; - - WHILE (j <= s2_len) DO - SET c = c + 1, - cost = IF(s1_char = SUBSTRING(s2, j, 1), 0, 1); - - SET c_temp = ORD(SUBSTRING(cv1, j, 1)) + cost; - IF (c > c_temp) THEN - SET c = c_temp; - END IF; - - SET c_temp = ORD(SUBSTRING(cv1, j+1, 1)) + 1; - IF (c > c_temp) THEN - SET c = c_temp; - END IF; - - SET cv0 = CONCAT(cv0, CHAR(c)), - j = j + 1; - END WHILE; - - SET cv1 = cv0, - i = i + 1; - END WHILE; - - RETURN (c); - END$$ - -DELIMITER ; - --- -------------------------------------------------------- - --- --- Структура таблицы `accounts` --- - -CREATE TABLE `accounts` ( - `id` int(11) NOT NULL COMMENT 'Идентификатор', - `id_telegram` int(11) NOT NULL COMMENT 'Идентификатор в телеграм', - `status` varchar(20) NOT NULL DEFAULT 'active' COMMENT 'Статус', - `admin` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Администратор?', - `created` timestamp NOT NULL DEFAULT current_timestamp() COMMENT 'Дата создания' -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Структура таблицы `people` --- - -CREATE TABLE `people` ( - `id` int(11) NOT NULL COMMENT 'Идентификатор', - `name` varchar(80) DEFAULT NULL COMMENT 'Имя', - `surname` varchar(80) DEFAULT NULL COMMENT 'Фамилия', - `patronymic` varchar(80) DEFAULT NULL COMMENT 'Отчество', - `phone` bigint(20) DEFAULT NULL COMMENT 'Номер смартфона', - `address` varchar(255) DEFAULT NULL COMMENT 'Адрес', - `day` int(2) DEFAULT NULL COMMENT 'День рождения', - `month` int(2) DEFAULT NULL COMMENT 'Месяц рождения', - `year` int(4) DEFAULT NULL COMMENT 'Год рождения', - `data` text DEFAULT NULL COMMENT 'Информация', - `cover` varchar(255) DEFAULT NULL COMMENT 'Обложка', - `created` timestamp NOT NULL DEFAULT current_timestamp() COMMENT 'Дата создания', - `updated` timestamp NOT NULL DEFAULT current_timestamp() COMMENT 'Дата обновления' -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Индексы сохранённых таблиц --- - --- --- Индексы таблицы `accounts` --- -ALTER TABLE `accounts` - ADD UNIQUE KEY `id_2` (`id`), - ADD KEY `id` (`id`); - --- --- Индексы таблицы `people` --- -ALTER TABLE `people` - ADD UNIQUE KEY `id_2` (`id`), - ADD KEY `id` (`id`); - --- --- AUTO_INCREMENT для сохранённых таблиц --- - --- --- AUTO_INCREMENT для таблицы `accounts` --- -ALTER TABLE `accounts` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор'; - --- --- AUTO_INCREMENT для таблицы `people` --- -ALTER TABLE `people` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор'; -COMMIT; - -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/levenshtein.sql b/levenshtein.sql deleted file mode 100644 index 153d2d2..0000000 --- a/levenshtein.sql +++ /dev/null @@ -1,70 +0,0 @@ --- Levenshtein function --- Source: https://openquery.com.au/blog/levenshtein-mysql-stored-function --- Levenshtein reference: http://en.wikipedia.org/wiki/Levenshtein_distance - --- Arjen note: because the levenshtein value is encoded in a byte array, distance cannot exceed 255; --- thus the maximum string length this implementation can handle is also limited to 255 characters. - -DELIMITER $$ -DROP FUNCTION IF EXISTS LEVENSHTEIN $$ -CREATE FUNCTION LEVENSHTEIN(s1 VARCHAR(255) CHARACTER SET utf8, s2 VARCHAR(255) CHARACTER SET utf8) - RETURNS INT - DETERMINISTIC - BEGIN - DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT; - DECLARE s1_char CHAR CHARACTER SET utf8; - -- max strlen=255 for this function - DECLARE cv0, cv1 VARBINARY(256); - - SET s1_len = CHAR_LENGTH(s1), - s2_len = CHAR_LENGTH(s2), - cv1 = 0x00, - j = 1, - i = 1, - c = 0; - - IF (s1 = s2) THEN - RETURN (0); - ELSEIF (s1_len = 0) THEN - RETURN (s2_len); - ELSEIF (s2_len = 0) THEN - RETURN (s1_len); - END IF; - - WHILE (j <= s2_len) DO - SET cv1 = CONCAT(cv1, CHAR(j)), - j = j + 1; - END WHILE; - - WHILE (i <= s1_len) DO - SET s1_char = SUBSTRING(s1, i, 1), - c = i, - cv0 = CHAR(i), - j = 1; - - WHILE (j <= s2_len) DO - SET c = c + 1, - cost = IF(s1_char = SUBSTRING(s2, j, 1), 0, 1); - - SET c_temp = ORD(SUBSTRING(cv1, j, 1)) + cost; - IF (c > c_temp) THEN - SET c = c_temp; - END IF; - - SET c_temp = ORD(SUBSTRING(cv1, j+1, 1)) + 1; - IF (c > c_temp) THEN - SET c = c_temp; - END IF; - - SET cv0 = CONCAT(cv0, CHAR(c)), - j = j + 1; - END WHILE; - - SET cv1 = cv0, - i = i + 1; - END WHILE; - - RETURN (c); - END $$ - -DELIMITER ; \ No newline at end of file diff --git a/mirzaev/spetsresurs/viber/registry/requests/system/bot.log b/mirzaev/spetsresurs/viber/registry/requests/system/bot.log new file mode 100644 index 0000000..b373717 --- /dev/null +++ b/mirzaev/spetsresurs/viber/registry/requests/system/bot.log @@ -0,0 +1,190 @@ +[2023-06-11T11:35:46.519191+00:00] bot.WARNING: Exception: Signature header not found [] [] +[2023-06-11T11:43:42.771944+00:00] bot.WARNING: Exception: Invalid webhook url: 512a5aeb6b27e6e7-c4d6bd43973012ec-8252b6aff92e4614 [] [] +[2023-06-11T11:44:02.951146+00:00] bot.WARNING: Exception: Invalid webhook url: 512a5aeb6b27e6e7-c4d6bd43973012ec-8252b6aff92e4614 [] [] +[2023-06-11T11:44:22.235737+00:00] bot.WARNING: Exception: Invalid webhook url: 512a5aeb6b27e6e7-c4d6bd43973012ec-8252b6aff92e4614 [] [] +[2023-06-11T11:45:54.290264+00:00] bot.WARNING: Exception: Invalid webhook url: 512a5aeb6b27e6e7-c4d6bd43973012ec-8252b6aff92e4614 [] [] +[2023-06-11T11:46:11.429147+00:00] bot.WARNING: Exception: Invalid webhook url: 512a5aeb6b27e6e7-c4d6bd43973012ec-8252b6aff92e4614 [] [] +[2023-06-11T11:46:19.232419+00:00] bot.WARNING: Exception: Invalid webhook url: 512a5aeb6b27e6e7-c4d6bd43973012ec-8252b6aff92e4614 [] [] +[2023-06-11T11:46:31.776657+00:00] bot.WARNING: Exception: Invalid webhook url: 512a5aeb6b27e6e7-c4d6bd43973012ec-8252b6aff92e4614 [] [] +[2023-06-11T11:46:32.722891+00:00] bot.WARNING: Exception: Invalid webhook url: 512a5aeb6b27e6e7-c4d6bd43973012ec-8252b6aff92e4614 [] [] +[2023-06-11T11:46:33.182810+00:00] bot.WARNING: Exception: Invalid webhook url: 512a5aeb6b27e6e7-c4d6bd43973012ec-8252b6aff92e4614 [] [] +[2023-06-11T11:46:37.210472+00:00] bot.WARNING: Exception: Invalid webhook url: 512a5aeb6b27e6e7-c4d6bd43973012ec-8252b6aff92e4614 [] [] +[2023-06-11T11:47:31.380168+00:00] bot.WARNING: Exception: Invalid webhook url: 512a5aeb6b27e6e7-c4d6bd43973012ec-8252b6aff92e4614 [] [] +[2023-06-11T11:48:08.654793+00:00] bot.WARNING: Exception: Remote error: - [] [] +[2023-06-11T11:48:26.745429+00:00] bot.WARNING: Exception: Remote error: - [] [] +[2023-06-11T11:48:43.509747+00:00] bot.WARNING: Exception: Remote error: - [] [] +[2023-06-11T12:00:21.806008+00:00] bot.WARNING: Exception: Signature header not found [] [] +[2023-06-11T13:38:33.856281+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:38:36.224978+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:38:38.597277+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:40:13.724334+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:40:16.102853+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:40:18.494383+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:42:45.078574+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:42:47.457266+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:42:49.837593+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:43:05.338332+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:43:07.719763+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:43:10.106732+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:43:56.494029+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:43:58.891976+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:44:01.284103+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T13:45:34.316550+00:00] bot.WARNING: Exception: Remote error: Bad receiver ID [] [] +[2023-06-11T13:45:34.317181+00:00] bot.WARNING: Actual sign: b2c3bb9f5acc627ce75dc91ae2d416d9d89c1324795a8a5e617e63407d6c8ad4 [] [] +[2023-06-11T13:45:34.317377+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686491133104,"chat_hostname":"SN-CALLBACK-01_","message_token":5848677407454711101,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"Hh","type":"text"},"silent":false} [] [] +[2023-06-11T13:45:44.114641+00:00] bot.WARNING: Exception: Remote error: Bad receiver ID [] [] +[2023-06-11T13:45:44.114993+00:00] bot.WARNING: Actual sign: 740a2e7c8c06cf38dadfdb389374ffa035e6deb53676dfdd72a86426a02a40b7 [] [] +[2023-06-11T13:45:44.115089+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686491143230,"chat_hostname":"SN-CALLBACK-01_","message_token":5848677449884290952,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"Hu","type":"text"},"silent":false} [] [] +[2023-06-11T13:48:06.951567+00:00] bot.INFO: click on button [] [] +[2023-06-11T14:01:42.573156+00:00] bot.INFO: click on button [] [] +[2023-06-11T14:01:48.194701+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:01:50.583477+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:01:52.966311+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:02:08.324155+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:02:10.763385+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:02:13.153888+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:04:32.033446+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:04:32.034095+00:00] bot.INFO: Viber\Api\Event\Subscribed Object ( [event:protected] => subscribed [timestamp:protected] => 1686492271944 [message_token:protected] => 5848682183542230541 [user:protected] => Viber\Api\User Object ( [propertiesMap:protected] => Array ( ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 [country:protected] => RU [language:protected] => ru-RU [primary_device_os:protected] => [api_version:protected] => 10 [viber_version:protected] => [mcc:protected] => [mnc:protected] => ) ) [] [] +[2023-06-11T14:04:34.426347+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:04:34.426625+00:00] bot.INFO: Viber\Api\Event\Subscribed Object ( [event:protected] => subscribed [timestamp:protected] => 1686492271944 [message_token:protected] => 5848682183542230541 [user:protected] => Viber\Api\User Object ( [propertiesMap:protected] => Array ( ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 [country:protected] => RU [language:protected] => ru-RU [primary_device_os:protected] => [api_version:protected] => 10 [viber_version:protected] => [mcc:protected] => [mnc:protected] => ) ) [] [] +[2023-06-11T14:04:36.811897+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:04:36.812226+00:00] bot.INFO: Viber\Api\Event\Subscribed Object ( [event:protected] => subscribed [timestamp:protected] => 1686492271944 [message_token:protected] => 5848682183542230541 [user:protected] => Viber\Api\User Object ( [propertiesMap:protected] => Array ( ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 [country:protected] => RU [language:protected] => ru-RU [primary_device_os:protected] => [api_version:protected] => 10 [viber_version:protected] => [mcc:protected] => [mnc:protected] => ) ) [] [] +[2023-06-11T14:06:48.027686+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:06:48.028342+00:00] bot.INFO: Viber\Api\User Object ( [propertiesMap:protected] => Array ( ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 [country:protected] => RU [language:protected] => ru-RU [primary_device_os:protected] => [api_version:protected] => 10 [viber_version:protected] => [mcc:protected] => [mnc:protected] => ) [] [] +[2023-06-11T14:06:59.862445+00:00] bot.INFO: click on button [] [] +[2023-06-11T14:07:05.739065+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:07:05.739408+00:00] bot.INFO: Viber\Api\User Object ( [propertiesMap:protected] => Array ( ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 [country:protected] => RU [language:protected] => ru-RU [primary_device_os:protected] => [api_version:protected] => 10 [viber_version:protected] => [mcc:protected] => [mnc:protected] => ) [] [] +[2023-06-11T14:07:53.125397+00:00] bot.INFO: onSubscribe handler [] [] +[2023-06-11T14:07:53.125750+00:00] bot.INFO: Viber\Api\User Object ( [propertiesMap:protected] => Array ( ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 [country:protected] => RU [language:protected] => ru-RU [primary_device_os:protected] => [api_version:protected] => 10 [viber_version:protected] => [mcc:protected] => [mnc:protected] => ) [] [] +[2023-06-11T14:08:04.961628+00:00] bot.INFO: onConversation handler [] [] +[2023-06-11T14:08:04.962016+00:00] bot.INFO: Viber\Api\User Object ( [propertiesMap:protected] => Array ( ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 [country:protected] => RU [language:protected] => ru-RU [primary_device_os:protected] => [api_version:protected] => 10 [viber_version:protected] => [mcc:protected] => [mnc:protected] => ) [] [] +[2023-06-11T15:51:28.541329+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [instance value ("share-phone") not found in enum (possible values: ["reply","open-url",""])] [] [] +[2023-06-11T15:51:28.542240+00:00] bot.WARNING: Actual sign: ac412d0d180b24decbed01142945609f3c622fc6e8fee224f4bcbe682a009bbe [] [] +[2023-06-11T15:51:28.542394+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686498687327,"chat_hostname":"SN-CALLBACK-01_","message_token":5848709091911181627,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"Ggu","type":"text"},"silent":false} [] [] +[2023-06-11T15:57:21.355484+00:00] bot.INFO: Viber\Api\Keyboard Object ( [propertiesMap:protected] => Array ( ) [Buttons:protected] => Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #8074d6 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 1 [TextVAlign:protected] => [TextHAlign:protected] => right [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #2fa4e7 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #555555 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 3 [TextVAlign:protected] => [TextHAlign:protected] => left [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [BgColor:protected] => [DefaultHeight:protected] => [InputFieldState:protected] => ) [] [] +[2023-06-11T15:57:23.738869+00:00] bot.INFO: Viber\Api\Keyboard Object ( [propertiesMap:protected] => Array ( ) [Buttons:protected] => Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #8074d6 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 1 [TextVAlign:protected] => [TextHAlign:protected] => right [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #2fa4e7 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #555555 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 3 [TextVAlign:protected] => [TextHAlign:protected] => left [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [BgColor:protected] => [DefaultHeight:protected] => [InputFieldState:protected] => ) [] [] +[2023-06-11T15:57:26.130228+00:00] bot.INFO: Viber\Api\Keyboard Object ( [propertiesMap:protected] => Array ( ) [Buttons:protected] => Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #8074d6 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 1 [TextVAlign:protected] => [TextHAlign:protected] => right [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #2fa4e7 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #555555 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 3 [TextVAlign:protected] => [TextHAlign:protected] => left [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [BgColor:protected] => [DefaultHeight:protected] => [InputFieldState:protected] => ) [] [] +[2023-06-11T15:57:49.533012+00:00] bot.INFO: Viber\Api\Keyboard Object ( [propertiesMap:protected] => Array ( ) [Buttons:protected] => Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #8074d6 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 1 [TextVAlign:protected] => [TextHAlign:protected] => right [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #2fa4e7 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #555555 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 3 [TextVAlign:protected] => [TextHAlign:protected] => left [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [BgColor:protected] => [DefaultHeight:protected] => [InputFieldState:protected] => ) [] [] +[2023-06-11T15:57:51.909778+00:00] bot.INFO: Viber\Api\Keyboard Object ( [propertiesMap:protected] => Array ( ) [Buttons:protected] => Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #8074d6 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 1 [TextVAlign:protected] => [TextHAlign:protected] => right [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #2fa4e7 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #555555 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 3 [TextVAlign:protected] => [TextHAlign:protected] => left [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [BgColor:protected] => [DefaultHeight:protected] => [InputFieldState:protected] => ) [] [] +[2023-06-11T15:57:54.297387+00:00] bot.INFO: Viber\Api\Keyboard Object ( [propertiesMap:protected] => Array ( ) [Buttons:protected] => Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #8074d6 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 1 [TextVAlign:protected] => [TextHAlign:protected] => right [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #2fa4e7 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #555555 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 3 [TextVAlign:protected] => [TextHAlign:protected] => left [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [BgColor:protected] => [DefaultHeight:protected] => [InputFieldState:protected] => ) [] [] +[2023-06-11T15:57:59.592123+00:00] bot.INFO: Viber\Api\Keyboard Object ( [propertiesMap:protected] => Array ( ) [Buttons:protected] => Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #8074d6 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 1 [TextVAlign:protected] => [TextHAlign:protected] => right [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #2fa4e7 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #555555 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 3 [TextVAlign:protected] => [TextHAlign:protected] => left [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [BgColor:protected] => [DefaultHeight:protected] => [InputFieldState:protected] => ) [] [] +[2023-06-11T15:58:01.978683+00:00] bot.INFO: Viber\Api\Keyboard Object ( [propertiesMap:protected] => Array ( ) [Buttons:protected] => Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #8074d6 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 1 [TextVAlign:protected] => [TextHAlign:protected] => right [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #2fa4e7 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #555555 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 3 [TextVAlign:protected] => [TextHAlign:protected] => left [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [BgColor:protected] => [DefaultHeight:protected] => [InputFieldState:protected] => ) [] [] +[2023-06-11T15:58:04.363295+00:00] bot.INFO: Viber\Api\Keyboard Object ( [propertiesMap:protected] => Array ( ) [Buttons:protected] => Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #8074d6 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 1 [TextVAlign:protected] => [TextHAlign:protected] => right [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #2fa4e7 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #555555 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-click [Image:protected] => [Text:protected] => Button 3 [TextVAlign:protected] => [TextHAlign:protected] => left [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [BgColor:protected] => [DefaultHeight:protected] => [InputFieldState:protected] => ) [] [] +[2023-06-11T16:02:51.702921+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [instance value ("share-phone") not found in enum (possible values: ["reply","open-url",""])] [] [] +[2023-06-11T16:02:51.703651+00:00] bot.WARNING: Actual sign: 8c8d8498499aa62b31681989c6d4eb2418f91718f332144cdc76fab5b759b6e3 [] [] +[2023-06-11T16:02:51.703764+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686499370435,"chat_hostname":"SN-CALLBACK-01_","message_token":5848711957124129875,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"Uui","type":"text"},"silent":false} [] [] +[2023-06-11T16:03:11.904592+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [instance value ("share-phone") not found in enum (possible values: ["reply","open-url",""])] [] [] +[2023-06-11T16:03:11.905071+00:00] bot.WARNING: Actual sign: 1d082e2d811854c5bfc2df4af10d601703358646b594af9acf2885ee0bb10e20 [] [] +[2023-06-11T16:03:11.905147+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686499390688,"chat_hostname":"SN-CALLBACK-01_","message_token":5848712042075563799,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"Bhhh","type":"text"},"silent":false} [] [] +[2023-06-11T16:29:42.686000+00:00] bot.INFO: Viber\Api\Event\Message Object ( [event:protected] => message [timestamp:protected] => 1686500982270 [message_token:protected] => 5848718717620758322 [sender:protected] => Viber\Api\Sender Object ( [propertiesMap:protected] => Array ( [id] => setId [name] => setName [avatar] => setAvatar ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 ) [message:protected] => Viber\Api\Message\Contact Object ( [propertiesMap:protected] => Array ( [contact] => setConcat ) [broadcast_list:protected] => [receiver:protected] => [type:protected] => [sender:protected] => [tracking_data:protected] => [min_api_version:protected] => 1 [keyboard:protected] => [name:protected] => [phone_number:protected] => 79242161570 ) ) [] [] +[2023-06-11T16:30:28.493786+00:00] bot.INFO: Viber\Api\Message\Contact Object ( [propertiesMap:protected] => Array ( [contact] => setConcat ) [broadcast_list:protected] => [receiver:protected] => [type:protected] => [sender:protected] => [tracking_data:protected] => [min_api_version:protected] => 1 [keyboard:protected] => [name:protected] => [phone_number:protected] => 79242161570 ) [] [] +[2023-06-11T16:31:52.909314+00:00] bot.INFO: 79242161570 [] [] +[2023-06-11T16:51:05.772680+00:00] bot.INFO: Viber\Api\Event\Message Object ( [event:protected] => message [timestamp:protected] => 1686502265338 [message_token:protected] => 5848724099185419732 [sender:protected] => Viber\Api\Sender Object ( [propertiesMap:protected] => Array ( [id] => setId [name] => setName [avatar] => setAvatar ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 ) [message:protected] => Viber\Api\Message\Contact Object ( [propertiesMap:protected] => Array ( [contact] => setConcat ) [broadcast_list:protected] => [receiver:protected] => [type:protected] => [sender:protected] => [tracking_data:protected] => [min_api_version:protected] => 1 [keyboard:protected] => [name:protected] => [phone_number:protected] => 79242161570 ) ) [] [] +[2023-06-11T16:52:52.754204+00:00] bot.INFO: Viber\Api\Sender Object ( [propertiesMap:protected] => Array ( [id] => setId [name] => setName [avatar] => setAvatar ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 ) [] [] +[2023-06-11T16:53:28.807294+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [instance value ("share-phone") not found in enum (possible values: ["reply","open-url",""])] [] [] +[2023-06-11T16:53:28.807779+00:00] bot.WARNING: Actual sign: b58da5dcc2d1a93076da692d58c739c29f9e07ebd093c6f0e0e54b6867bcc740 [] [] +[2023-06-11T16:53:28.807887+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686502407520,"chat_hostname":"SN-CALLBACK-07_","message_token":5848724695544145191,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"reply","type":"contact","contact":{"phone_number":"79242161570"}},"silent":false} [] [] +[2023-06-11T16:54:06.221926+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [instance value ("share-phone") not found in enum (possible values: ["reply","open-url",""])] [] [] +[2023-06-11T16:54:06.222345+00:00] bot.WARNING: Actual sign: e7210c8f6d253064ec42a13f0b8e20095e8b6e720e12788d4bdb53fcd6d6b9ad [] [] +[2023-06-11T16:54:06.222453+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686502445071,"chat_hostname":"SN-CALLBACK-07_","message_token":5848724853036066468,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"reply","type":"contact","contact":{"phone_number":"79242161570"}},"silent":false} [] [] +[2023-06-11T16:54:58.024444+00:00] bot.INFO: [] [] +[2023-06-11T16:55:16.883229+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T18:34:28.048500+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T18:37:32.837056+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T18:43:05.885122+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T18:43:05.891968+00:00] bot.WARNING: Exception: AQL: collection or view not found: connections (while parsing) [] [] +[2023-06-11T18:43:05.892045+00:00] bot.WARNING: Actual sign: 924f2dcc94aba0625986d52f46baef0e6ee74ccb3e2bd2eacc42035cdde8650d [] [] +[2023-06-11T18:43:05.892092+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686508985459,"chat_hostname":"SN-CALLBACK-01_","message_token":5848752285424199109,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"U","type":"text"},"silent":false} [] [] +[2023-06-11T18:43:15.073402+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T18:43:15.077017+00:00] bot.WARNING: Exception: AQL: collection or view not found: connections (while parsing) [] [] +[2023-06-11T18:43:15.077381+00:00] bot.WARNING: Actual sign: bebe9e7529c734cbfff509b1e5d35bdfebde468e95679781919abfc42a51933d [] [] +[2023-06-11T18:43:15.077630+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686508994931,"chat_hostname":"SN-CALLBACK-01_","message_token":5848752325114898062,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"Jjh","type":"text"},"silent":false} [] [] +[2023-06-11T18:47:25.375116+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T18:48:00.816903+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T18:48:13.124600+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:02:03.540281+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:02:07.562564+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [instance value ("share-phone") not found in enum (possible values: ["reply","open-url",""])] [] [] +[2023-06-11T19:02:07.562864+00:00] bot.WARNING: Actual sign: 0e1b9a98e17e825f1d4edc9695a98c5bc257463b4f514a52f45d3eef4ea5640a [] [] +[2023-06-11T19:02:07.562933+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686510126600,"chat_hostname":"SN-CALLBACK-01_","message_token":5848757071729042720,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"reply","type":"contact","contact":{"phone_number":"79242161570"}},"silent":false} [] [] +[2023-06-11T19:02:34.212278+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:02:48.720766+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:02:57.590338+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:03:01.912226+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [instance value ("share-phone") not found in enum (possible values: ["reply","open-url",""])] [] [] +[2023-06-11T19:03:01.912569+00:00] bot.WARNING: Actual sign: 7985d66274308208a9d8cd79642b890860b51e494687a0a643d40152eb079062 [] [] +[2023-06-11T19:03:01.912682+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686510180966,"chat_hostname":"SN-CALLBACK-01_","message_token":5848757299756574408,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"reply","type":"contact","contact":{"phone_number":"79242161570"}},"silent":false} [] [] +[2023-06-11T19:04:04.457464+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:04:21.299287+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:04:31.021838+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [instance value ("share-phone") not found in enum (possible values: ["reply","open-url",""])] [] [] +[2023-06-11T19:04:31.022297+00:00] bot.WARNING: Actual sign: 8615652f2a2f7e89c0f4109746c8bc7024447863020925441242986925cc3e16 [] [] +[2023-06-11T19:04:31.022410+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686510270084,"chat_hostname":"SN-CALLBACK-01_","message_token":5848757673569723460,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"reply","type":"contact","contact":{"phone_number":"79242161570"}},"silent":false} [] [] +[2023-06-11T19:05:39.649437+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:15:46.726938+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:17:10.665757+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:17:19.222191+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:18:07.922348+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:18:13.341713+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T19:18:18.195403+00:00] bot.INFO: Ryf1gTZQeWkZp1UtJSx7ew== [] [] +[2023-06-11T20:03:11.324248+00:00] bot.INFO: ArangoDBClient\Document Object ( [_id:protected] => works/758305 [_key:protected] => 758305 [_rev:protected] => _gIuLzei--_ [_values:protected] => Array ( [created] => 1686251192 [work] => Работа на кассе [date] => 5/1/2023 [start] => 11:00:00 [end] => 23:00:00 [confirmed] => нет [commentary] => [response] => ) [_changed:protected] => 1 [_isNew:protected] => [_doValidate:protected] => [_hiddenAttributes:protected] => Array ( ) [_ignoreHiddenAttributes:protected] => ) [] [] +[2023-06-11T20:03:47.299181+00:00] bot.INFO: ArangoDBClient\Document Object ( [_id:protected] => works/758305 [_key:protected] => 758305 [_rev:protected] => _gIuLzei--_ [_values:protected] => Array ( [created] => 1686251192 [work] => Работа на кассе [date] => 5/1/2023 [start] => 11:00:00 [end] => 23:00:00 [confirmed] => нет [commentary] => [response] => ) [_changed:protected] => 1 [_isNew:protected] => [_doValidate:protected] => [_hiddenAttributes:protected] => Array ( ) [_ignoreHiddenAttributes:protected] => ) [] [] +[2023-06-11T20:03:51.687299+00:00] bot.INFO: ArangoDBClient\Document Object ( [_id:protected] => works/758305 [_key:protected] => 758305 [_rev:protected] => _gIuLzei--_ [_values:protected] => Array ( [created] => 1686251192 [work] => Работа на кассе [date] => 5/1/2023 [start] => 11:00:00 [end] => 23:00:00 [confirmed] => нет [commentary] => [response] => ) [_changed:protected] => 1 [_isNew:protected] => [_doValidate:protected] => [_hiddenAttributes:protected] => Array ( ) [_ignoreHiddenAttributes:protected] => ) [] [] +[2023-06-11T20:07:47.174165+00:00] bot.INFO: ArangoDBClient\Cursor Object ( [_connection:ArangoDBClient\Cursor:private] => ArangoDBClient\Connection Object ( [_options:ArangoDBClient\Connection:private] => ArangoDBClient\ConnectionOptions Object ( [_values:ArangoDBClient\ConnectionOptions:private] => Array ( [endpoint] => Array ( [0] => unix:///var/run/arangodb3/arango.sock ) [host] => [port] => 0 [failoverTries] => 3 [failoverTimeout] => 30 [connectTimeout] => 3 [requestTimeout] => 3 [memcachedPersistentId] => arangodb-php-pool [memcachedOptions] => Array ( ) [memcachedEndpointsKey] => arangodb-php-endpoints [memcachedTtl] => 600 [createCollection] => 1 [policy] => last [rev] => [waitForSync] => [batchSize] => [isSystem] => [Connection] => Keep-Alive [trace] => [enhancedTrace] => [verifyCert] => [verifyCertName] => [allowSelfSigned] => 1 [caFile] => [ciphers] => [AuthUser] => viber-requests [AuthPasswd] => vebra_9929 [AuthType] => Basic [Reconnect] => 1 [Batch] => [BatchPart] => [database] => google-parser [CheckUtf8Conform] => [notifyCallback] => Closure Object ( [parameter] => Array ( [$message] => ) ) ) [_currentEndpointIndex:ArangoDBClient\ConnectionOptions:private] => 0 [_cache:ArangoDBClient\ConnectionOptions:private] => ) [_httpHeader:ArangoDBClient\Connection:private] => Authorization: Basic dmliZXItcmVxdWVzdHM6dmVicmFfOTkyOQ== Connection: Keep-Alive [_baseUrl:ArangoDBClient\Connection:private] => /_db/google-parser [_handle:ArangoDBClient\Connection:private] => Resource id #7 [_useKeepAlive:ArangoDBClient\Connection:private] => 1 [_batches:ArangoDBClient\Connection:private] => Array ( ) [_activeBatch:ArangoDBClient\Connection:private] => [_captureBatch:ArangoDBClient\Connection:private] => [_batchRequest:ArangoDBClient\Connection:private] => [_database:ArangoDBClient\Connection:private] => google-parser ) [_options:ArangoDBClient\Cursor:private] => Array ( [_sanitize] => [_flat] => [baseurl] => /_api/cursor [_isNew] => ) [data:ArangoDBClient\Cursor:private] => Array ( [result] => Array ( [0] => Array ( [_key] => 758305 [_id] => works/758305 [_rev] => _gIuLzei--_ [created] => 1686251192 [work] => Работа на кассе [date] => 5/1/2023 [start] => 11:00:00 [end] => 23:00:00 [confirmed] => нет [commentary] => [response] => ) [1] => Array ( [_key] => 758281 [_id] => works/758281 [_rev] => _gIuMrLu--_ [created] => 1686251192 [work] => Работа на кассе [date] => 5/1/2023 [start] => 10:00:00 [end] => 22:00:00 [confirmed] => нет [commentary] => [response] => ) ) [hasMore] => [cached] => [extra] => Array ( [stats] => Array ( [writesExecuted] => 0 [writesIgnored] => 0 [scannedFull] => 89 [scannedIndex] => 0 [filtered] => 87 [httpRequests] => 0 [executionTime] => 0.00092101097106934 [peakMemoryUsage] => 53744 ) [warnings] => Array ( ) ) [error] => [code] => 201 ) [_result:ArangoDBClient\Cursor:private] => Array ( [0] => ArangoDBClient\Document Object ( [_id:protected] => works/758305 [_key:protected] => 758305 [_rev:protected] => _gIuLzei--_ [_values:protected] => Array ( [created] => 1686251192 [work] => Работа на кассе [date] => 5/1/2023 [start] => 11:00:00 [end] => 23:00:00 [confirmed] => нет [commentary] => [response] => ) [_changed:protected] => 1 [_isNew:protected] => [_doValidate:protected] => [_hiddenAttributes:protected] => Array ( ) [_ignoreHiddenAttributes:protected] => ) [1] => ArangoDBClient\Document Object ( [_id:protected] => works/758281 [_key:protected] => 758281 [_rev:protected] => _gIuMrLu--_ [_values:protected] => Array ( [created] => 1686251192 [work] => Работа на кассе [date] => 5/1/2023 [start] => 10:00:00 [end] => 22:00:00 [confirmed] => нет [commentary] => [response] => ) [_changed:protected] => 1 [_isNew:protected] => [_doValidate:protected] => [_hiddenAttributes:protected] => Array ( ) [_ignoreHiddenAttributes:protected] => ) ) [_hasMore:ArangoDBClient\Cursor:private] => [_id:ArangoDBClient\Cursor:private] => [_position:ArangoDBClient\Cursor:private] => 0 [_length:ArangoDBClient\Cursor:private] => 2 [_fullCount:ArangoDBClient\Cursor:private] => [_extra:ArangoDBClient\Cursor:private] => Array ( [stats] => Array ( [writesExecuted] => 0 [writesIgnored] => 0 [scannedFull] => 89 [scannedIndex] => 0 [filtered] => 87 [httpRequests] => 0 [executionTime] => 0.00092101097106934 [peakMemoryUsage] => 53744 ) [warnings] => Array ( ) ) [_fetches:ArangoDBClient\Cursor:private] => 1 [_cached:ArangoDBClient\Cursor:private] => [_count:ArangoDBClient\Cursor:private] => [_documentClass:protected] => \ArangoDBClient\Document [_edgeClass:protected] => \ArangoDBClient\Edge ) [] [] +[2023-06-11T20:08:49.079522+00:00] bot.INFO: ArangoDBClient\Document Object ( [_id:protected] => works/758305 [_key:protected] => 758305 [_rev:protected] => _gIuLzei--_ [_values:protected] => Array ( [created] => 1686251192 [work] => Работа на кассе [date] => 5/1/2023 [start] => 11:00:00 [end] => 23:00:00 [confirmed] => нет [commentary] => [response] => ) [_changed:protected] => 1 [_isNew:protected] => [_doValidate:protected] => [_hiddenAttributes:protected] => Array ( ) [_ignoreHiddenAttributes:protected] => ) [] [] +[2023-06-11T20:23:19.167325+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [object has missing required properties (["ActionBody"])],[object has missing required properties (["ActionBody"])] [] [] +[2023-06-11T20:23:19.168078+00:00] bot.WARNING: Actual sign: 79ce7b9d2303b33607ca0338baa480c4ec8dad59490edeb3035877845a6abb6b [] [] +[2023-06-11T20:23:19.168256+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686514998048,"chat_hostname":"SN-CALLBACK-01_","message_token":5848777503995766513,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"btn-search","type":"text"},"silent":false} [] [] +[2023-06-11T20:24:26.912687+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [object has missing required properties (["ActionBody"])],[object has missing required properties (["ActionBody"])] [] [] +[2023-06-11T20:24:26.913167+00:00] bot.WARNING: Actual sign: 40ffdb9330441515917f18aef0edf4b976210c03dec7de26518f0ec2df695dcd [] [] +[2023-06-11T20:24:26.913269+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686515065844,"chat_hostname":"SN-CALLBACK-01_","message_token":5848777788352800492,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"btn-search","type":"text"},"silent":false} [] [] +[2023-06-11T20:24:46.260646+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [object has missing required properties (["ActionBody"])],[object has missing required properties (["ActionBody"])] [] [] +[2023-06-11T20:24:46.260992+00:00] bot.WARNING: Actual sign: 95e4393633f5c48483dfc0201db580c6dc74ba4dd0c31168c4e013b0d3d6612a [] [] +[2023-06-11T20:24:46.261101+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686515085195,"chat_hostname":"SN-CALLBACK-01_","message_token":5848777869516776920,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"btn-search","type":"text"},"silent":false} [] [] +[2023-06-11T20:25:37.628465+00:00] bot.INFO: Array ( [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #2f0826 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #a404bf [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [] [] +[2023-06-11T20:25:37.763998+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [object has missing required properties (["ActionBody"])],[object has missing required properties (["ActionBody"])] [] [] +[2023-06-11T20:25:37.764190+00:00] bot.WARNING: Actual sign: 2dba1d85cf61724a19eae44759011ffda74f76f959bd9260c62c1c98d9801e93 [] [] +[2023-06-11T20:25:37.764345+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686515136705,"chat_hostname":"SN-CALLBACK-01_","message_token":5848778085569570675,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":10},"message":{"text":"btn-search","type":"text"},"silent":false} [] [] +[2023-06-11T20:26:37.611860+00:00] bot.INFO: Array ( [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #87f77e [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #d1cbeb [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [] [] +[2023-06-11T20:26:40.836821+00:00] bot.INFO: Array ( [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #d2fb88 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #976000 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [] [] +[2023-06-11T20:26:43.979618+00:00] bot.INFO: Array ( [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #68ef2b [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #ae4cb2 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => center [TextOpacity:protected] => [TextSize:protected] => large [Silent:protected] => ) ) [] [] +[2023-06-11T20:29:09.636542+00:00] bot.INFO: Array ( [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #1e9077 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #e82810 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:29:12.778596+00:00] bot.INFO: Array ( [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #152239 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #86b58b [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:29:15.946679+00:00] bot.INFO: Array ( [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #0bfa5e [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #fd2a4a [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:31:13.584730+00:00] bot.INFO: Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #f3a4e8 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #2394a9 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:31:16.806388+00:00] bot.INFO: Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #1b5628 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #8cf793 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:31:20.004409+00:00] bot.INFO: Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #fc20e7 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #eab557 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:31:39.086211+00:00] bot.INFO: Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #13457e [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-asdasd [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #8b3542 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-asdasd [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:31:42.241771+00:00] bot.INFO: Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #73ddd3 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-asdasd [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #d61933 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-asdasd [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:31:45.381090+00:00] bot.INFO: Array ( [0] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #89480b [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-asdasd [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #9c176c [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => btn-asdasd [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:33:28.154767+00:00] bot.INFO: Array ( [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #151628 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #b6dcc4 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:33:31.603832+00:00] bot.INFO: Array ( [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #1d6204 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #53d8c1 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:33:35.030606+00:00] bot.INFO: Array ( [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #d8b2c1 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #374eb9 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => asdasd [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:35:02.112126+00:00] bot.INFO: Array ( [1] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #7c8cf1 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #1 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) [2] => Viber\Api\Keyboard\Button Object ( [propertiesMap:protected] => Array ( ) [Columns:protected] => 6 [Rows:protected] => 1 [BgColor:protected] => #7f9e81 [BgMediaType:protected] => [BgMedia:protected] => [BgLoop:protected] => [ActionType:protected] => reply [ActionBody:protected] => [Image:protected] => [Text:protected] => #2 [TextVAlign:protected] => [TextHAlign:protected] => [TextOpacity:protected] => [TextSize:protected] => small [Silent:protected] => ) ) [] [] +[2023-06-11T20:54:03.698427+00:00] bot.INFO: Viber\Api\Message\Text Object ( [propertiesMap:protected] => Array ( ) [broadcast_list:protected] => [receiver:protected] => [type:protected] => text [sender:protected] => [tracking_data:protected] => [min_api_version:protected] => 1 [keyboard:protected] => [text:protected] => btn-request-choose ) [] [] +[2023-06-11T20:55:32.127010+00:00] bot.INFO: Viber\Api\Event\Message Object ( [event:protected] => message [timestamp:protected] => 1686516931975 [message_token:protected] => 5848785615490295415 [sender:protected] => Viber\Api\Sender Object ( [propertiesMap:protected] => Array ( [id] => setId [name] => setName [avatar] => setAvatar ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 ) [message:protected] => Viber\Api\Message\Text Object ( [propertiesMap:protected] => Array ( ) [broadcast_list:protected] => [receiver:protected] => [type:protected] => text [sender:protected] => [tracking_data:protected] => [min_api_version:protected] => 1 [keyboard:protected] => [text:protected] => btn-request-choose ) ) [] [] +[2023-06-11T20:56:44.810372+00:00] bot.INFO: Viber\Api\Event\Message Object ( [event:protected] => message [timestamp:protected] => 1686517004662 [message_token:protected] => 5848785920386836274 [sender:protected] => Viber\Api\Sender Object ( [propertiesMap:protected] => Array ( [id] => setId [name] => setName [avatar] => setAvatar ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 ) [message:protected] => Viber\Api\Message\Text Object ( [propertiesMap:protected] => Array ( ) [broadcast_list:protected] => [receiver:protected] => [type:protected] => text [sender:protected] => [tracking_data:protected] => [min_api_version:protected] => 1 [keyboard:protected] => [text:protected] => btn-request-choose ) ) [] [] +[2023-06-11T20:58:05.628349+00:00] bot.INFO: Viber\Api\Message\Text Object ( [propertiesMap:protected] => Array ( ) [broadcast_list:protected] => [receiver:protected] => [type:protected] => text [sender:protected] => [tracking_data:protected] => [min_api_version:protected] => 1 [keyboard:protected] => [text:protected] => btn-request-choose ) [] [] +[2023-06-11T20:59:55.318074+00:00] bot.INFO: Viber\Api\Sender Object ( [propertiesMap:protected] => Array ( [id] => setId [name] => setName [avatar] => setAvatar ) [id:protected] => Ryf1gTZQeWkZp1UtJSx7ew== [name:protected] => Test Ababa [avatar:protected] => https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000 ) [] [] +[2023-06-11T21:00:37.505871+00:00] bot.INFO: btn-request-choose [] [] +[2023-06-11T21:00:47.778718+00:00] bot.INFO: btn-request-choose [] [] +[2023-06-11T21:05:51.176727+00:00] bot.INFO: btn-request-choose [] [] +[2023-06-11T21:07:40.966789+00:00] bot.INFO: btn-request-choose [] [] +[2023-06-11T21:08:01.274447+00:00] bot.INFO: btn-request-choose [] [] +[2023-06-11T21:08:40.298789+00:00] bot.INFO: btn-request-choose [] [] +[2023-06-11T21:08:50.760700+00:00] bot.INFO: btn-request-choose [] [] +[2023-06-11T21:09:40.696495+00:00] bot.INFO: btn-request-choose-758305 [] [] +[2023-06-11T21:11:52.214112+00:00] bot.INFO: 7 [] [] +[2023-06-11T21:12:24.902568+00:00] bot.INFO: 758305 [] [] +[2023-06-11T22:19:00.753318+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [array is too short: must have at least 1 elements but instance has 0 elements] [] [] +[2023-06-11T22:19:00.753798+00:00] bot.WARNING: Actual sign: cf9aa40d71d9cae20334bfd064e65eb3454dfbbc031c4adef7dc979321f77fd0 [] [] +[2023-06-11T22:19:00.753853+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686521939931,"chat_hostname":"SN-CALLBACK-02_","message_token":5848806620635662880,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":8},"message":{"text":"btn-search","type":"text"},"silent":false} [] [] +[2023-06-11T22:20:19.569086+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [array is too short: must have at least 1 elements but instance has 0 elements] [] [] +[2023-06-11T22:20:19.569537+00:00] bot.WARNING: Actual sign: 39686a59b4b5eb862d3d9d9370ea6482202f86e04416bfa35a7edc8dcd394b1d [] [] +[2023-06-11T22:20:19.569593+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686522018766,"chat_hostname":"SN-CALLBACK-02_","message_token":5848806951197149253,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":8},"message":{"text":"btn-search","type":"text"},"silent":false} [] [] +[2023-06-11T22:21:37.236368+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [array is too short: must have at least 1 elements but instance has 0 elements] [] [] +[2023-06-11T22:21:37.236852+00:00] bot.WARNING: Actual sign: 6ba884486d8e28e45300aa0972d97852f0d68f5d57d374a465920b7aff249b79 [] [] +[2023-06-11T22:21:37.236914+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686522096029,"chat_hostname":"SN-CALLBACK-02_","message_token":5848807275370711505,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":8},"message":{"text":"btn-search","type":"text"},"silent":false} [] [] +[2023-06-11T22:21:50.134067+00:00] bot.WARNING: Exception: Remote error: keyboard is not valid. [array is too short: must have at least 1 elements but instance has 0 elements] [] [] +[2023-06-11T22:21:50.134414+00:00] bot.WARNING: Actual sign: 442e4c898950e4c18660b238c00aabe793afd17361cbfedca9b916e05bb5b5a1 [] [] +[2023-06-11T22:21:50.134492+00:00] bot.WARNING: Actual body: {"event":"message","timestamp":1686522108911,"chat_hostname":"SN-CALLBACK-02_","message_token":5848807329359793121,"sender":{"id":"Ryf1gTZQeWkZp1UtJSx7ew==","name":"Test Ababa","avatar":"https://media-direct.cdn.viber.com/download_photo?dlid=wYwkYufmJ2vrWipRnrnskrR8H39UqdRAbTv-GMAMncwSuMK5kGs6aPieURE_gxaACiYZ_mQcWEgE1zB_ek_CQCGtnix_WuJA9K-wLPW2Y864oip89IqvzK4lf4usekTJDzseRw&fltp=jpg&imsz=0000","language":"ru-RU","country":"RU","api_version":8},"message":{"text":"btn-search","type":"text"},"silent":false} [] [] +[2023-06-11T22:23:16.694742+00:00] bot.INFO: ArangoDBClient\Cursor Object ( [_connection:ArangoDBClient\Cursor:private] => ArangoDBClient\Connection Object ( [_options:ArangoDBClient\Connection:private] => ArangoDBClient\ConnectionOptions Object ( [_values:ArangoDBClient\ConnectionOptions:private] => Array ( [endpoint] => Array ( [0] => unix:///var/run/arangodb3/arango.sock ) [host] => [port] => 0 [failoverTries] => 3 [failoverTimeout] => 30 [connectTimeout] => 3 [requestTimeout] => 3 [memcachedPersistentId] => arangodb-php-pool [memcachedOptions] => Array ( ) [memcachedEndpointsKey] => arangodb-php-endpoints [memcachedTtl] => 600 [createCollection] => 1 [policy] => last [rev] => [waitForSync] => [batchSize] => [isSystem] => [Connection] => Keep-Alive [trace] => [enhancedTrace] => [verifyCert] => [verifyCertName] => [allowSelfSigned] => 1 [caFile] => [ciphers] => [AuthUser] => viber-requests [AuthPasswd] => vebra_9929 [AuthType] => Basic [Reconnect] => 1 [Batch] => [BatchPart] => [database] => google-parser [CheckUtf8Conform] => [notifyCallback] => Closure Object ( [parameter] => Array ( [$message] => ) ) ) [_currentEndpointIndex:ArangoDBClient\ConnectionOptions:private] => 0 [_cache:ArangoDBClient\ConnectionOptions:private] => ) [_httpHeader:ArangoDBClient\Connection:private] => Authorization: Basic dmliZXItcmVxdWVzdHM6dmVicmFfOTkyOQ== Connection: Keep-Alive [_baseUrl:ArangoDBClient\Connection:private] => /_db/google-parser [_handle:ArangoDBClient\Connection:private] => Resource id #7 [_useKeepAlive:ArangoDBClient\Connection:private] => 1 [_batches:ArangoDBClient\Connection:private] => Array ( ) [_activeBatch:ArangoDBClient\Connection:private] => [_captureBatch:ArangoDBClient\Connection:private] => [_batchRequest:ArangoDBClient\Connection:private] => [_database:ArangoDBClient\Connection:private] => google-parser ) [_options:ArangoDBClient\Cursor:private] => Array ( [_sanitize] => [_flat] => [baseurl] => /_api/cursor [_isNew] => ) [data:ArangoDBClient\Cursor:private] => Array ( [result] => Array ( ) [hasMore] => [cached] => [extra] => Array ( [stats] => Array ( [writesExecuted] => 0 [writesIgnored] => 0 [scannedFull] => 13 [scannedIndex] => 0 [filtered] => 13 [httpRequests] => 0 [executionTime] => 0.00059914588928223 [peakMemoryUsage] => 38912 ) [warnings] => Array ( ) ) [error] => [code] => 201 ) [_result:ArangoDBClient\Cursor:private] => Array ( ) [_hasMore:ArangoDBClient\Cursor:private] => [_id:ArangoDBClient\Cursor:private] => [_position:ArangoDBClient\Cursor:private] => 0 [_length:ArangoDBClient\Cursor:private] => 0 [_fullCount:ArangoDBClient\Cursor:private] => [_extra:ArangoDBClient\Cursor:private] => Array ( [stats] => Array ( [writesExecuted] => 0 [writesIgnored] => 0 [scannedFull] => 13 [scannedIndex] => 0 [filtered] => 13 [httpRequests] => 0 [executionTime] => 0.00059914588928223 [peakMemoryUsage] => 38912 ) [warnings] => Array ( ) ) [_fetches:ArangoDBClient\Cursor:private] => 1 [_cached:ArangoDBClient\Cursor:private] => [_count:ArangoDBClient\Cursor:private] => [_documentClass:protected] => \ArangoDBClient\Document [_edgeClass:protected] => \ArangoDBClient\Edge ) [] [] +[2023-06-11T22:27:04.110269+00:00] bot.INFO: workers/918858 [] [] +[2023-06-11T22:27:04.111158+00:00] bot.INFO: works/965067 [] [] diff --git a/mirzaev/spetsresurs/viber/registry/requests/system/public/install.php b/mirzaev/spetsresurs/viber/registry/requests/system/public/install.php new file mode 100644 index 0000000..1d341f4 --- /dev/null +++ b/mirzaev/spetsresurs/viber/registry/requests/system/public/install.php @@ -0,0 +1,14 @@ + require('../settings/key.php')]); + $result = $client->setWebhook(require('../settings/url.php')); + echo "Установлено!\n"; +} catch (Exception $e) { + echo 'Ошибка: ' . $e->getMessage() . "\n"; +} diff --git a/mirzaev/spetsresurs/viber/registry/requests/system/public/robot.php b/mirzaev/spetsresurs/viber/registry/requests/system/public/robot.php new file mode 100644 index 0000000..04efd3f --- /dev/null +++ b/mirzaev/spetsresurs/viber/registry/requests/system/public/robot.php @@ -0,0 +1,478 @@ + 'Requests register', + 'avatar' => 'https://developers.viber.com/img/favicon.ico', +]); + +$log = new Logger('bot'); +$log->pushHandler(new StreamHandler('../bot.log')); + +/** + * Авторизация + * + * @param string $id Идентификатор Viber + * + * @return _document|null|false (инстанция аккаунта, если подключен и авторизован; null, если не подключен; false, если подключен но неавторизован) + */ +function authorization(string $id): _document|null|false +{ + global $arangodb; + + if (collection::init($arangodb->session, 'viber')) + if ( + ($viber = collection::search($arangodb->session, sprintf("FOR d IN viber FILTER d.id == '%s' RETURN d", $id))) + || $viber = collection::search( + $arangodb->session, + sprintf( + "FOR d IN viber FILTER d._id == '%s' RETURN d", + document::write($arangodb->session, 'viber', ['id' => $id, 'status' => 'inactive']) + ) + ) + ) + if ($viber->number === null) return null; + else if ( + $viber->status === 'active' + && collection::init($arangodb->session, 'workers') + && $worker = collection::search( + $arangodb->session, + sprintf( + "FOR d IN workers LET e = (FOR e IN connections FILTER e._to == '%s' RETURN e._from)[0] FILTER d._id == e RETURN d", + $viber->getId() + ) + ) + ) return $worker; + else return false; + else throw new exception('Не удалось найти или создать аккаунт'); + else throw new exception('Не удалось инициализировать коллекцию'); + + return false; +} + +function registration(string $id, string $number): bool +{ + global $arangodb; + + if (collection::init($arangodb->session, 'viber')) { + // Инициализация аккаунта + if ($viber = collection::search($arangodb->session, sprintf("FOR d IN viber FILTER d.id == '%s' RETURN d", $id))) { + // Запись номера + $viber->number = $number; + if (!document::update($arangodb->session, $viber)) return false; + } else if (!collection::search( + $arangodb->session, + sprintf( + "FOR d IN viber FILTER d._id == '%s' RETURN d", + document::write($arangodb->session, 'viber', ['id' => $id, 'status' => 'inactive', 'number' => $number]) + ) + )) return false; + else throw new exception('Не удалось создать аккаунт или записать номер в существующий'); + + // Инициализация ребра: workers -> viber + if (($worker = collection::search( + $arangodb->session, + sprintf( + "FOR d IN workers FILTER d.phone == '%d' RETURN d", + $viber->number + ) + )) + && collection::init($arangodb->session, 'connections', true) + && (collection::search( + $arangodb->session, + sprintf( + "FOR d IN connections FILTER d._from == '%s' && d._to == '%s' RETURN d", + $worker->getId(), + $viber->getId() + ) + ) + ?? collection::search( + $arangodb->session, + sprintf( + "FOR d IN connections FILTER d._id == '%s' RETURN d", + document::write( + $arangodb->session, + 'connections', + ['_from' => $worker->getId(), '_to' => $viber->getId()] + ) + ) + )) + ) { + // Инициализировано ребро: workers -> viber + + // Активация + $viber->status = 'active'; + return document::update($arangodb->session, $viber); + } + } else throw new exception('Не удалось инициализировать коллекцию'); + + return false; +} + +function generateMenuKeyboard(): Keyboard +{ + return (new Keyboard()) + ->setButtons([ + (new Button()) + ->setBgColor('#97d446') + ->setActionType('reply') + ->setActionBody('btn-search') + ->setText('🔍 Активные заявки') + ]); +} + +function generateNumberKeyboard(): Keyboard +{ + return (new Keyboard()) + ->setButtons([ + (new Button()) + ->setBgColor('#E9003A') + ->setTextSize('large') + ->setTextHAlign('center') + ->setActionType('share-phone') + ->setActionBody('reply') + ->setText('🔐 Аутентификация'), + ]); +} + +function requests(int $amount = 5): Cursor +{ + global $arangodb; + + return (new _statement( + $arangodb->session, + [ + 'query' => sprintf( + "FOR d IN works FILTER d.confirmed != 'да' LIMIT %d RETURN d", + $amount + ), + "batchSize" => 1000, + "sanitize" => true + ] + ))->execute(); +} + +try { + $bot = new Bot(['token' => require('../settings/key.php')]); + + $bot + ->onText('|btn-request-choose-*|s', function ($event) use ($bot, $botSender, $log) { + global $arangodb; + + $id = $event->getSender()->getId(); + + if (($worker = authorization($id)) instanceof _document) { + // Авторизован + + // Инициализация ключа инстанции works в базе данных + preg_match('/btn-request-choose-(\d+)/', $event->getMessage()->getText(), $matches); + $_key = $matches[1]; + + // Инициализация инстанции works в базе данных (выбранного задания) + $work = collection::search($arangodb->session, sprintf("FOR d IN works FILTER d._key == '%s' RETURN d", $_key)); + + // Запись о том, что задание подтверждено (в будущем здесь будет отправка на потдверждение модераторам) + $work->confirmed = 'да'; + + if (document::update($arangodb->session, $work)) { + // Записано обновление в базу данных + + if (collection::search( + $arangodb->session, + sprintf( + "FOR d IN readinesses FILTER d._id == '%s' RETURN d", + document::write($arangodb->session, 'readinesses', ['_from' => $worker->getId(), '_to' => $work->getId()]) + ) + ) + ) { + // Записано ребро: worker -> work (принятие заявки) + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText("✅ **Заявка принята:** #$_key") + ->setKeyboard(generateMenuKeyboard()) + ); + } + } + } else if ($worker === null) { + // Не подключен + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setMinApiVersion(3) + ->setText('⚠️ **Вы не подключили аккаунт**') + ->setKeyboard(generateNumberKeyboard($event)) + ); + } else { + // Не авторизован + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText('⛔️ **Вы не авторизованы**') + ); + } + }) + ->onText('|btn-search|s', function ($event) use ($bot, $botSender) { + global $arangodb; + + $id = $event->getSender()->getId(); + + if (($worker = authorization($id)) instanceof _document) { + // Авторизован + + $keyboard = []; + + $requests = requests(5); + + if ($requests->getCount() < 1) { + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText("📦 **Заявок нет**") + ); + + return; + } + + foreach ($requests as $request) { + // Перебор найденных заявок + + if (($market = collection::search( + $arangodb->session, + sprintf( + "FOR d IN markets LET e = (FOR e IN requests FILTER e._to == '%s' RETURN e._from)[0] FILTER d._id == e RETURN d", + $request->getId() + ) + )) instanceof _document) { + // Найден магазин + + // Отправка сообщения с данной заявки + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText("**#{$request->getKey()}**\n\n$request->date ($request->start - $request->end)\n**Работа:** \"$request->work\"\n\n**Город:** $market->city\n**Адрес:** $market->address") + ); + + // Запись выбора заявки в клавиатуру + $keyboard[] = (new Button()) + ->setBgColor(sprintf("#%02x%02x%02x", mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255))) + ->setTextSize('small') + ->setActionType('reply') + ->setActionBody("btn-request-choose-{$request->getKey()}") + ->setText("#{$request->getKey()}"); + } + } + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setMinApiVersion(3) + ->setText("🔍 Выберите заявку") + ->setKeyboard((new Keyboard())->setButtons($keyboard ?? [])) + ); + } else if ($worker === null) { + // Не подключен + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setMinApiVersion(3) + ->setText('⚠️ **Вы не подключили аккаунт**') + ->setKeyboard(generateNumberKeyboard($event)) + ); + } else { + // Не авторизован + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText('⛔️ **Вы не авторизованы**') + ); + } + }) + ->onText('|.*|si', function ($event) use ($bot, $botSender) { + $id = $event->getSender()->getId(); + + if (($worker = authorization($id)) instanceof _document) { + // Авторизован + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText('👋 Здравствуйте, ' . $worker->name) + ->setKeyboard(generateMenuKeyboard($event)) + ); + } else if ($worker === null) { + // Не подключен + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setMinApiVersion(3) + ->setText('⚠️ **Вы не подключили аккаунт**') + ->setKeyboard(generateNumberKeyboard($event)) + ); + } else { + // Не авторизован + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText('⛔️ **Вы не авторизованы**') + ); + } + }) + ->onConversation(function ($event) use ($bot, $botSender) { + $id = $event->getUser()->getId(); + + if (($worker = authorization($id)) instanceof _document) { + // Авторизован + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText('👋 Здравствуйте, ' . $worker->name) + ->setKeyboard(generateMenuKeyboard($event)) + ); + } else if ($worker === null) { + // Не подключен + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setMinApiVersion(3) + ->setText('⚠️ **Вы не подключили аккаунт**') + ->setKeyboard(generateNumberKeyboard($event)) + ); + } else { + // Не авторизован + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText('⛔️ **Вы не авторизованы**') + ); + } + }) + ->onSubscribe(function ($event) use ($bot, $botSender) { + $id = $event->getUser()->getId(); + + if (($worker = authorization($id)) instanceof _document) { + // Авторизован + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText('Здравствуйте, ' . $worker->name) + ->setKeyboard(generateMenuKeyboard($event)) + ); + } else if ($worker === null) { + // Не подключен + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setMinApiVersion(3) + ->setText('⚠️ **Вы не подключили аккаунт**') + ->setKeyboard(generateNumberKeyboard($event)) + ); + } else { + // Не авторизован + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText('⛔️ **Вы не авторизованы**') + ); + } + }) + ->on(function ($event) { + return ($event instanceof Message && $event->getMessage() instanceof Contact); + }, function ($event) use ($bot, $botSender, $log) { + $id = $event->getSender()->getId(); + + if (registration($id, $event->getMessage()->getPhoneNumber())) { + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText('✅ **Аккаунт подключен**') + ); + + if ($worker = authorization($id)) { + // Авторизован + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText('👋 Здравствуйте, ' . $worker->name) + ->setKeyboard(generateMenuKeyboard($event)) + ); + } else { + // Не авторизован + + $bot->getClient()->sendMessage( + (new Text()) + ->setSender($botSender) + ->setReceiver($id) + ->setText('⛔️ **Вы не авторизованы**') + ); + } + } + }) + ->run(); +} catch (Exception $e) { + $log->warning('Exception: ' . $e->getMessage()); + if ($bot) { + $log->warning('Actual sign: ' . $bot->getSignHeaderValue()); + $log->warning('Actual body: ' . $bot->getInputBody()); + } +} diff --git a/mirzaev/telegram/registry/people/system/settings/.gitignore b/mirzaev/spetsresurs/viber/registry/requests/system/settings/.gitignore similarity index 100% rename from mirzaev/telegram/registry/people/system/settings/.gitignore rename to mirzaev/spetsresurs/viber/registry/requests/system/settings/.gitignore diff --git a/mirzaev/spetsresurs/viber/registry/requests/system/settings/arangodb.php.sample b/mirzaev/spetsresurs/viber/registry/requests/system/settings/arangodb.php.sample new file mode 100644 index 0000000..fc1c2d1 --- /dev/null +++ b/mirzaev/spetsresurs/viber/registry/requests/system/settings/arangodb.php.sample @@ -0,0 +1,8 @@ + 'unix:///var/run/arangodb3/arango.sock', + 'database' => '', + 'name' => '', + 'password' => '' +]; diff --git a/mirzaev/spetsresurs/viber/registry/requests/system/settings/key.php.sample b/mirzaev/spetsresurs/viber/registry/requests/system/settings/key.php.sample new file mode 100644 index 0000000..7679934 --- /dev/null +++ b/mirzaev/spetsresurs/viber/registry/requests/system/settings/key.php.sample @@ -0,0 +1,3 @@ +setParseMode(Config::PARSE_MODE_MARKDOWN); - -$bot = new Zanzara(KEY, $config); - -$pdo = new \PDO('mysql:host=localhost;port=3306;dbname=telegram-registry-people;charset=utf8', 'dolboeb', 'sosiska228'); - -function isAdmin(int $id): bool -{ - global $pdo; - - return ($pdo->query("SELECT `admin` FROM accounts WHERE id_telegram=$id")->fetch(PDO::FETCH_ASSOC)['admin'] ?? 0) === 1; -} - -function isActive(int $id): bool -{ - global $pdo; - - return ($pdo->query("SELECT `status` FROM accounts WHERE id_telegram=$id")->fetch(PDO::FETCH_ASSOC)['status'] ?? 'inactive') === 'active'; -} - -function countEntries(): array -{ - global $pdo; - - $date = time(); - - $year = date('Y-m-d H:i:s', $date - 31556952); - $month = date('Y-m-d H:i:s', $date - 2678400); - $week = date('Y-m-d H:i:s', $date - 604800); - $day = date('Y-m-d H:i:s', $date - 86400); - - return $pdo->query( - <<= '$year') AS 'year', - (SELECT COUNT(`id`) FROM `people` WHERE `created` >= '$month') AS 'month', - (SELECT COUNT(`id`) FROM `people` WHERE `created` >= '$week') AS 'week', - (SELECT COUNT(`id`) FROM `people` WHERE `created` >= '$day') AS 'day' - SQL - )->fetch(PDO::FETCH_ASSOC); -} - -function lastUpdate(): string -{ - global $pdo; - - return date('Y\\\.m\\\.d H:i:s', strtotime($pdo->query('SELECT `updated` FROM people ORDER BY updated DESC LIMIT 1')->fetch(PDO::FETCH_ASSOC)['updated'] ?? 0)); -} - -function initEntry(): ?int -{ - global $pdo; - - $pdo->query("INSERT INTO `people` () VALUES ()")->fetch(); - - return $pdo->lastInsertId(); -} - -function generateMenu(Context $ctx): void -{ - $keyboard = [ - 'reply_markup' => - ['inline_keyboard' => [ - [ - ['callback_data' => 'read', 'text' => '🔍 Поиск'], - ] - ], 'resize_keyboard' => false] - ]; - - if (isAdmin($ctx->getMessage()?->getFrom()?->getId()) ?? $ctx->getCallbackQuery()->getFrom()->getId()) - $keyboard['reply_markup']['inline_keyboard'][0][] = ['callback_data' => 'write', 'text' => '📔 Записать']; - - $lastUpdate = lastUpdate(); - $count = countEntries(); - - $ctx->sendMessage( - <<deleteUserDataItem('wait_for'); - - match (null) { - $name => waitFor($ctx, 'name'), - $surname => waitFor($ctx, 'surname'), - $patronymic => waitFor($ctx, 'patronymic'), - $phone => waitFor($ctx, 'phone'), - $address => waitFor($ctx, 'address'), - $year => waitFor($ctx, 'year'), - $month => waitFor($ctx, 'month'), - $day => waitFor($ctx, 'day'), - $data => waitFor($ctx, 'data'), - $cover => waitFor($ctx, 'cover'), - default => (function () use ($ctx) { - $ctx->sendMessage('📦 *Все поля заполнены и записаны в реестре*')->then(function () use ($ctx) { - stopProcess($ctx)->then(function () use ($ctx) { - generateMenu($ctx); - }); - }); - })() - }; -} - -function readEntry( - Context $ctx, - ?string $name = null, - ?string $surname = null, - ?string $patronymic = null, - ?int $phone = null, - ?string $address = null, - ?int $year = null, - ?int $month = null, - ?int $day = null, - ?string $data = null -): PromiseInterface { - $ctx->deleteUserDataItem('wait_for'); - - return match (null) { - $name => waitFor($ctx, 'name'), - $surname => waitFor($ctx, 'surname'), - $patronymic => waitFor($ctx, 'patronymic'), - $phone => waitFor($ctx, 'phone'), - $address => waitFor($ctx, 'address'), - $year => waitFor($ctx, 'year'), - $month => waitFor($ctx, 'month'), - $day => waitFor($ctx, 'day'), - $data => waitFor($ctx, 'data'), - default => (function () use ($ctx) { - return $ctx->sendMessage('📦 *Все поля заполнены*'); - })() - }; -} - -function generateQueryStatus( - Context $ctx, - ?string $name = null, - ?string $surname = null, - ?string $patronymic = null, - ?int $phone = null, - ?string $address = null, - ?int $year = null, - ?int $month = null, - ?int $day = null, - ?string $data = null -): PromiseInterface { - if (isset($name)) $name = preg_replace('/([._\-()!])/', '\\\$1', $name); - if (isset($surname)) $surname = preg_replace('/([._\-()!])/', '\\\$1', $surname); - if (isset($patronymic)) $patronymic = preg_replace('/([._\-()!])/', '\\\$1', $patronymic); - if (isset($phone)) $phone = preg_replace('/([._\-()!])/', '\\\$1', $phone); - if (isset($address)) $address = preg_replace('/([._\-()!])/', '\\\$1', $address); - if (isset($year)) $year = preg_replace('/([._\-()!])/', '\\\$1', $year); - if (isset($month)) $month = preg_replace('/([._\-()!])/', '\\\$1', $month); - if (isset($day)) $day = preg_replace('/([._\-()!])/', '\\\$1', $day); - if (isset($data)) $data = preg_replace('/([._\-()!])/', '\\\$1', $data); - - $keyboard = generateFieldsButtons( - ...[ - 'name' => true, - 'surname' => true, - 'patronymic' => true, - 'name' => true, - 'phone' => true, - 'address' => true, - 'year' => true, - 'month' => true, - 'day' => true, - 'data' => true - ] - ); - - $keyboard['reply_markup']['inline_keyboard'][] = [ - ['callback_data' => 'stop', 'text' => '❎ Отмена'], - ['callback_data' => 'complete', 'text' => '✅ Отправить'] - ]; - - return $ctx->sendMessage( - << 'Введите имя', - 'surname' => 'Введите фамилию', - 'patronymic' => 'Введите отчество', - 'phone' => 'Введите номер телефона', - 'address' => 'Введите адрес', - 'year' => 'Введите год рождения', - 'month' => 'Введите номер месяца рождения', - 'day' => 'Введите номер дня рождения', - 'data' => 'Введите дополнительную информацию', - 'cover' => 'Отправьте обложку \(изображение\)', - default => 'Введите данные для записи в реестр', - }; - - if (isset($value)) $buffer .= "\n\n*Текущее значение:* " . preg_replace('/([._\-()!])/', '\\\$1', $value); - - return $buffer; -} - -function generateLabel(string $target): string -{ - return match ($target) { - 'name' => 'Имя', - 'surname' => 'Фамилия', - 'patronymic' => 'Отчество', - 'phone' => 'Номер', - 'address' => 'Адрес', - 'year' => 'Год', - 'month' => 'Месяц', - 'day' => 'День', - 'data' => 'Дополнительно', - 'cover' => 'Обложка', - default => 'Информация', - }; -} - -function generateFieldsButtons( - ?string $name = null, - ?string $surname = null, - ?string $patronymic = null, - ?int $phone = null, - ?string $address = null, - ?int $year = null, - ?int $month = null, - ?int $day = null, - ?string $data = null, - ?string $cover = null -): array { - $buffer = []; - $buffer2 = []; - - if (isset($name)) count($buffer) < 4 - ? $buffer[] = ['callback_data' => 'name', 'text' => generateLabel('name')] - : $buffer2[] = ['callback_data' => 'name', 'text' => generateLabel('name')]; - if (isset($surname)) count($buffer) < 4 - ? $buffer[] = ['callback_data' => 'surname', 'text' => generateLabel('surname')] - : $buffer2[] = ['callback_data' => 'surname', 'text' => generateLabel('surname')]; - if (isset($patronymic)) count($buffer) < 4 - ? $buffer[] = ['callback_data' => 'patronymic', 'text' => generateLabel('patronymic')] - : $buffer2[] = ['callback_data' => 'patronymic', 'text' => generateLabel('patronymic')]; - if (isset($phone)) count($buffer) < 4 - ? $buffer[] = ['callback_data' => 'phone', 'text' => generateLabel('phone')] - : $buffer2[] = ['callback_data' => 'phone', 'text' => generateLabel('phone')]; - if (isset($address)) count($buffer) < 4 - ? $buffer[] = ['callback_data' => 'address', 'text' => generateLabel('address')] - : $buffer2[] = ['callback_data' => 'address', 'text' => generateLabel('address')]; - if (isset($year)) count($buffer) < 4 - ? $buffer[] = ['callback_data' => 'year', 'text' => generateLabel('year')] - : $buffer2[] = ['callback_data' => 'year', 'text' => generateLabel('year')]; - if (isset($month)) count($buffer) < 4 - ? $buffer[] = ['callback_data' => 'month', 'text' => generateLabel('month')] - : $buffer2[] = ['callback_data' => 'month', 'text' => generateLabel('month')]; - if (isset($day)) count($buffer) < 4 - ? $buffer[] = ['callback_data' => 'day', 'text' => generateLabel('day')] - : $buffer2[] = ['callback_data' => 'day', 'text' => generateLabel('day')]; - if (isset($data)) count($buffer) < 4 - ? $buffer[] = ['callback_data' => 'data', 'text' => generateLabel('data')] - : $buffer2[] = ['callback_data' => 'data', 'text' => generateLabel('data')]; - if (isset($cover)) count($buffer) < 4 - ? $buffer[] = ['callback_data' => 'cover', 'text' => generateLabel('cover')] - : $buffer2[] = ['callback_data' => 'cover', 'text' => generateLabel('cover')]; - - return ['reply_markup' => ['inline_keyboard' => [$buffer, $buffer2], 'resize_keyboard' => false]]; -} - -function waitFor(Context $ctx, string $target): PromiseInterface -{ - return $ctx->getUserDataItem('process')->then(function ($process) use ($ctx, $target) { - if (isset($process)) - return $ctx->setUserDataItem("wait_for", $target)->then(function () use ($ctx, $target, $process) { - return $ctx->sendMessage('⚠️ ' . generateRequestLabel($target, $process['data'][$target]), ['reply_markup' => ['inline_keyboard' => [[['callback_data' => 'delete_field', 'text' => 'Удалить']]], 'resize_keyboard' => false]]); - }); - }); -} - -function updateEntry(int $id, string $name, string|int $value): void -{ - global $pdo; - - try { - $pdo->prepare("UPDATE `people` SET `$name` = :value WHERE `id` = :id")->execute([':value' => $value, ':id' => $id]); - } catch (Exception $e) { - } -} - -function checkEntry(int $id, string $name, string|int $value): bool -{ - global $pdo; - - $query = $pdo->prepare("SELECT `$name` FROM people WHERE `id` = :id"); - - $query->execute([':id' => $id]); - - return $query->fetch(PDO::FETCH_ASSOC)[$name] === $value; -} - -function startSearch(Context $ctx, string $order = 'updated', bool $desc = true, int $page = 1): PromiseInterface -{ - return $ctx->getUserDataItem('process')->then(function ($process) use ($ctx, $order, $desc, $page) { - if (empty($process)) return; - - return stopProcess($ctx)->then(function () use ($ctx, $process, $order, $desc, $page) { - return $ctx->sendMessage('⚙️ Запрос отправляется\.\.\.')->then(function () use ($ctx, $process, $order, $desc, $page) { - foreach ($process['search']($order, $desc, 3, --$page, ...$process['data']) as $entry) { - if (isset($entry['name'])) $entry['name'] = preg_replace('/([._\-()!])/', '\\\$1', $entry['name']); - if (isset($entry['surname'])) $entry['surname'] = preg_replace('/([._\-()!])/', '\\\$1', $entry['surname']); - if (isset($entry['patronymic'])) $entry['patronymic'] = preg_replace('/([._\-()!])/', '\\\$1', $entry['patronymic']); - if (isset($entry['phone'])) $entry['phone'] = preg_replace('/([._\-()!])/', '\\\$1', $entry['phone']); - if (isset($entry['address'])) $entry['address'] = preg_replace('/([._\-()!])/', '\\\$1', $entry['address']); - if (isset($entry['year'])) $entry['year'] = preg_replace('/([._\-()!])/', '\\\$1', $entry['year']); - if (isset($entry['month'])) $entry['month'] = preg_replace('/([._\-()!])/', '\\\$1', $entry['month']); - if (isset($entry['day'])) $entry['day'] = preg_replace('/([._\-()!])/', '\\\$1', $entry['day']); - if (isset($entry['data'])) $entry['data'] = preg_replace('/([._\-()!])/', '\\\$1', $entry['data']); - - $text = "*Имя:* {$entry['name']}\n*Фамилия:* {$entry['surname']}\n*Отчество:* {$entry['patronymic']}\n*Номер:* {$entry['phone']}\n*Адрес:* {$entry['address']}\n*Дата рождения:* {$entry['year']} {$entry['month']} {$entry['day']}\n*Дополнительно:* {$entry['data']}"; - - $file = parse_url($entry['cover'])['path']; - - if (file_exists($file)) $ctx->sendPhoto(new InputFile($file), ['caption' => $text, 'protect_content' => true]); - else $ctx->sendMessage($text, ['protect_content' => true]); - } - }); - }); - }); -} - -function searchSmartEntry( - string $order = 'updated', - bool $desc = true, - int $limit = 3, - int $page = 0, - ?string $name = null, - ?string $surname = null, - ?string $patronymic = null, - ?int $phone = null, - ?string $address = null, - ?int $year = null, - ?int $month = null, - ?int $day = null, - ?string $data = null -): array { - global $pdo; - - if ( - empty($name) - && empty($surname) - && empty($patronymic) - && empty($phone) - && empty($address) - && empty($year) - && empty($month) - && empty($day) - && empty($data) - ) return []; - - $query = 'SELECT * FROM `people` WHERE '; - $args = []; - $another = false; - - if (isset($name)) { - if ($another) $query .= ' && '; - else $another = true; - $query .= 'levenshtein(`name`, :name) < 3 && `name` != \'\''; - $args[':name'] = $name; - } - - if (isset($surname)) { - if ($another) $query .= ' && '; - else $another = true; - $query .= 'levenshtein(`surname`, :surname) < 3 && `surname` != \'\''; - $args[':surname'] = $surname; - } - - if (isset($patronymic)) { - if ($another) $query .= ' && '; - else $another = true; - $query .= 'levenshtein(`patronymic`, :patronymic) < 3 && `patronymic` != \'\''; - $args[':patronymic'] = $patronymic; - } - - if (isset($phone)) { - if ($another) $query .= ' && '; - else $another = true; - $query .= 'levenshtein(`phone`, :phone) < 2 && `phone` != \'\''; - $args[':phone'] = $phone; - } - - if (isset($address)) { - if ($another) $query .= ' && '; - else $another = true; - $query .= 'levenshtein(`address`, :address) < 4 && `address` != \'\''; - $args[':address'] = $address; - } - - if (isset($year)) { - if ($another) $query .= ' && '; - else $another = true; - $query .= '`year` == :year'; - $args[':year'] = $year; - } - - if (isset($month)) { - if ($another) $query .= ' && '; - else $another = true; - $query .= '`month` == :month'; - $args[':month'] = $month; - } - - if (isset($day)) { - if ($another) $query .= ' && '; - else $another = true; - $query .= '`day` == :day'; - $args[':day'] = $day; - } - - if (isset($data)) { - if ($another) $query .= ' && '; - else $another = true; - $query .= 'levenshtein(`data`, :data) < 6 && `data` != \'\''; - $args[':data'] = $data; - } - - $query .= " ORDER BY `$order` " . ($desc ? 'DESC' : 'ASC'); - - $offset = $page === 0 ? 0 : $limit * $page; - $query .= " LIMIT $limit OFFSET $offset"; - - try { - $instance = $pdo->prepare($query); - if ($instance->execute($args)) return $instance->fetchAll(PDO::FETCH_ASSOC); - else return []; - } catch (Exception $e) { - } - - return []; -} - -$stop = false; - -$bot->onUpdate(function (Context $ctx) use (&$stop): void { - if (!isActive($ctx->getMessage()?->getFrom()?->getId() ?? $ctx->getCallbackQuery()->getFrom()->getId())) $stop = true; -}); - -$bot->onCommand('start', function (Context $ctx) use ($stop): void { - if ($stop) return; - generateMenu($ctx); -}); - -$bot->onMessage(function (Context $ctx) use ($stop): void { - $text = $ctx->getMessage()->getText(); - - if (!empty($text) && $text[0] !== '/' || empty($text)) - $ctx->getUserDataItem('process')->then(function ($process) use ($ctx, $text) { - if (empty($process)) return; - - $ctx->getUserDataItem('wait_for')->then(function ($wait_for) use ($ctx, &$process, $text) { - $target = match ($wait_for) { - 'phone', 'day', 'month', 'year' => (function () use ($ctx, $text) { - preg_match_all('!\d+!', $text, $matches); - return (int) implode('', $matches[0]); - })(), - default => $text - }; - - if ($process['type'] === 'createEntry') { - // Создание записи в реестре - - if ($wait_for === 'cover') { - if (!file_exists($path = 'storage/' . $process['id'])) mkdir($path, '0755', true); - - $photos = $ctx->getMessage()->getPhoto(); - - $ctx->getFile(end($photos)->getFileId())->then(function ($file) use ($ctx, $wait_for, &$path, &$process, &$target) { - $url = pathinfo($file->getFilePath()); - - if (!file_exists($path .= '/' . $url['dirname'])) mkdir($path, '0755', true); - - file_put_contents($path .= '/' . $url['basename'], fopen('https://api.telegram.org/file/bot' . KEY . '/' . $file->getFilePath(), 'r')); - updateEntry($process['id'], $wait_for, $path); - - if (checkEntry($process['id'], $wait_for, $path)) { - $process['data'][$wait_for] = $path; - $ctx->setUserDataItem('process', $process)->then(function () use ($ctx, $path, $process) { - $ctx->sendMessage("✏️ *Записано в реестр*\n\n" . generateLabel('cover') . ': ' . ($link = preg_replace('/([._\-()!])/', '\\\$1', STORAGE . '/' . $path)) . "\n[]($link)")->then(function () use ($ctx, $process) { - // Запуск процесса создания - createEntry($ctx, ...$process['data']); - }); - }); - } else $ctx->sendMessage('🚫 Не удалось записать значение в реестр'); - }); - } else { - updateEntry($process['id'], $wait_for, $target); - - if (checkEntry($process['id'], $wait_for, $target)) { - $process['data'][$wait_for] = $target; - $ctx->setUserDataItem('process', $process)->then(function () use ($ctx, $target, $wait_for, $process) { - $ctx->sendMessage("✏️ *Записано в реестр*\n\n" . generateLabel($wait_for) . ': ' . preg_replace('/([._\-()!])/', '\\\$1', $target))->then(function () use ($ctx, $process) { - // Запуск процесса создания - createEntry($ctx, ...$process['data']); - }); - }); - } else $ctx->sendMessage('🚫 *Не удалось записать значение в реестр*'); - } - } else if ($process['type'] === 'readEntry') { - // Чтение записей в реестре - - $process['data'][$wait_for] = $target; - $ctx->setUserDataItem('process', $process)->then(function () use ($ctx, $process) { - generateQueryStatus($ctx, ...$process['data'])->then(function () use ($ctx, $process) { - readEntry($ctx, ...$process['data']); - }); - }); - } - }); - }); -}); - -function read(Context $ctx, bool $smart = false): void -{ - global $stop; - - if ($stop) return; - - // Инициализация процесса в кеше - $ctx->setUserDataItem('process', [ - 'type' => 'readEntry', - 'search' => 'searchSmartEntry', - 'data' => $data = [ - 'name' => null, - 'surname' => null, - 'patronymic' => null, - 'phone' => null, - 'address' => null, - 'year' => null, - 'month' => null, - 'day' => null, - 'data' => null - ] - ])->then(function () use ($ctx, $data) { - $ctx->sendMessage("⚡ *Запущен процесс поиска*")->then(function () use ($ctx, $data) { - generateQueryStatus($ctx, ...$data)->then(function () use ($ctx, $data) { - // Запуск процесса создания поиска - readEntry($ctx, ...$data); - }); - }); - }); -} - -function write(Context $ctx): void -{ - global $stop; - - if ($stop) return; - - if (isAdmin($ctx->getMessage()?->getFrom()?->getId() ?? $ctx->getCallbackQuery()->getFrom()->getId())) { - // Администратор - - if ($id = initEntry()) { - // Инициализирован человек в базе данных - - // Инициализация процесса в кеше - $ctx->setUserDataItem('process', [ - 'type' => 'createEntry', - 'id' => $id, - 'data' => $data = [ - 'name' => null, - 'surname' => null, - 'patronymic' => null, - 'phone' => null, - 'address' => null, - 'year' => null, - 'month' => null, - 'day' => null, - 'data' => null, - 'cover' => null - ] - ])->then(function () use ($ctx, $id, $data) { - $ctx->sendMessage("⚡ *Запущен процесс создания записи*")->then(function () use ($ctx, $data, $id) { - $ctx->sendMessage("📦 *Инициализирована запись в реестре:* $id")->then(function () use ($ctx, $data, $id) { - // Запуск процесса создания - createEntry($ctx, ...$data); - }); - }); - }); - } - } -} - -function stopProcess(Context $ctx): PromiseInterface -{ - return $ctx->deleteUserDataItem('process')->then(function () use ($ctx) { - return $ctx->deleteUserDataItem('wait_for')->then(function () use ($ctx) { - return $ctx->sendMessage('⛔ Процесс завершён'); - }); - }); -} - -function deleteField(Context $ctx): void -{ - $ctx->getUserDataItem('process')->then(function ($process) use ($ctx) { - $ctx->getUserDataItem('wait_for')->then(function ($wait_for) use ($ctx, $process) { - $process['data'][$wait_for] = null; - $ctx->setUserDataItem('process', $process)->then(function () use ($ctx, $process, $wait_for) { - $ctx->sendMessage('🗑️ *Удалено значение поля:* ' . mb_strtolower(generateLabel($wait_for)))->then(function () use ($ctx, $process) { - generateQueryStatus($ctx, ...$process['data'])->then(function () use ($ctx, $process) { - $process['type']($ctx, ...$process['data']); - }); - }); - }); - }); - }); -} - -$bot->onCommand('write', fn ($ctx) => write($ctx)); -$bot->onCommand('read', fn ($ctx) => read($ctx)); -$bot->onCommand('read_smart', fn ($ctx) => read($ctx, true)); - -$bot->onCbQueryData(['write'], fn ($ctx) => write($ctx)); -$bot->onCbQueryData(['read'], fn ($ctx) => read($ctx)); -$bot->onCbQueryData(['read_smart'], fn ($ctx) => read($ctx, true)); - -$bot->onCommand('name', fn ($ctx) => waitFor($ctx, 'name')); -$bot->onCommand('surname', fn ($ctx) => waitFor($ctx, 'surname')); -$bot->onCommand('patronymic', fn ($ctx) => waitFor($ctx, 'patronymic')); -$bot->onCommand('phone', fn ($ctx) => waitFor($ctx, 'phone')); -$bot->onCommand('address', fn ($ctx) => waitFor($ctx, 'address')); -$bot->onCommand('year', fn ($ctx) => waitFor($ctx, 'year')); -$bot->onCommand('month', fn ($ctx) => waitFor($ctx, 'month')); -$bot->onCommand('day', fn ($ctx) => waitFor($ctx, 'day')); -$bot->onCommand('data', fn ($ctx) => waitFor($ctx, 'data')); -$bot->onCommand('cover', fn ($ctx) => waitFor($ctx, 'cover')); - -$bot->onCbQueryData(['name'], fn ($ctx) => waitFor($ctx, 'name')); -$bot->onCbQueryData(['surname'], fn ($ctx) => waitFor($ctx, 'surname')); -$bot->onCbQueryData(['patronymic'], fn ($ctx) => waitFor($ctx, 'patronymic')); -$bot->onCbQueryData(['phone'], fn ($ctx) => waitFor($ctx, 'phone')); -$bot->onCbQueryData(['address'], fn ($ctx) => waitFor($ctx, 'address')); -$bot->onCbQueryData(['year'], fn ($ctx) => waitFor($ctx, 'year')); -$bot->onCbQueryData(['month'], fn ($ctx) => waitFor($ctx, 'month')); -$bot->onCbQueryData(['day'], fn ($ctx) => waitFor($ctx, 'day')); -$bot->onCbQueryData(['data'], fn ($ctx) => waitFor($ctx, 'data')); -$bot->onCbQueryData(['cover'], fn ($ctx) => waitFor($ctx, 'cover')); - -$bot->onCbQueryData(['delete_field'], fn ($ctx) => deleteField($ctx)); - -$bot->onCommand('stop', fn ($ctx) => stopProcess($ctx)); -$bot->onCbQueryData(['stop'], fn ($ctx) => stopProcess($ctx)); - -$bot->onCommand('complete', fn ($ctx) => startSearch($ctx)); -$bot->onCbQueryData(['complete'], fn ($ctx) => startSearch($ctx)); - -$bot->run(); diff --git a/mirzaev/telegram/registry/people/system/settings/key.php.sample b/mirzaev/telegram/registry/people/system/settings/key.php.sample deleted file mode 100644 index 106ab10..0000000 --- a/mirzaev/telegram/registry/people/system/settings/key.php.sample +++ /dev/null @@ -1,3 +0,0 @@ -