Смена пространства имён
This commit is contained in:
parent
7bf8ca6108
commit
5cfdeb03fd
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "hood/vk",
|
"name": "mirzaev/vk",
|
||||||
"type": "framework",
|
"type": "framework",
|
||||||
"description": "Фреймворк VK API",
|
"description": "Фреймворк VK API",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
@ -7,8 +7,8 @@
|
||||||
"api",
|
"api",
|
||||||
"hood"
|
"hood"
|
||||||
],
|
],
|
||||||
"homepage": "https://git.hood.su/vk",
|
"homepage": "https://git.hood.su/mirzaev/vk",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "free for you",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Arsen Mirzaev Tatyano-Muradovich",
|
"name": "Arsen Mirzaev Tatyano-Muradovich",
|
||||||
|
@ -23,8 +23,8 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"docs": "https://git.hood.su/hood/vk/manual",
|
"docs": "https://git.hood.su/mirzaev/vk/manual",
|
||||||
"issues": "https://git.hood.su/hood/vk/issues"
|
"issues": "https://git.hood.su/mirzaev/vk/issues"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "~8.0",
|
"php": "~8.0",
|
||||||
|
@ -39,12 +39,12 @@
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"hood\\vk\\": "hood/vk/system"
|
"mirzaev\\vk\\": "mirzaev/vk/system"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload-dev": {
|
"autoload-dev": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"hood\\vk\\tests\\": "hood/vk/tests"
|
"mirzaev\\vk\\tests\\": "mirzaev/vk/tests"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,16 +166,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/psr7",
|
"name": "guzzlehttp/psr7",
|
||||||
"version": "1.8.1",
|
"version": "1.8.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/guzzle/psr7.git",
|
"url": "https://github.com/guzzle/psr7.git",
|
||||||
"reference": "35ea11d335fd638b5882ff1725228b3d35496ab1"
|
"reference": "dc960a912984efb74d0a90222870c72c87f10c91"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/35ea11d335fd638b5882ff1725228b3d35496ab1",
|
"url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91",
|
||||||
"reference": "35ea11d335fd638b5882ff1725228b3d35496ab1",
|
"reference": "dc960a912984efb74d0a90222870c72c87f10c91",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -235,9 +235,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/guzzle/psr7/issues",
|
"issues": "https://github.com/guzzle/psr7/issues",
|
||||||
"source": "https://github.com/guzzle/psr7/tree/1.8.1"
|
"source": "https://github.com/guzzle/psr7/tree/1.8.2"
|
||||||
},
|
},
|
||||||
"time": "2021-03-21T16:25:00+00:00"
|
"time": "2021-04-26T09:17:50+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hood/accounts",
|
"name": "hood/accounts",
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Hood\VK\API;
|
|
||||||
|
|
||||||
class CallBack extends CallBackAbstract
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Адрес для создания колбек-сервера
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $url;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Пользовательский ключ колбек-сессии
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $secret_key;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ключ подтверждения колбек сессии
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $confirmation_token;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var int
|
|
||||||
*/
|
|
||||||
private $group_id;
|
|
||||||
|
|
||||||
public function __construct(object $group, array $params = []){
|
|
||||||
$this->secret_key = $_ENV['CALLBACK_SECRET_KEY'];
|
|
||||||
$this->url = $_ENV['SERVER_DOMAIN'];
|
|
||||||
$this->group_id = $group->id;
|
|
||||||
$this->group_id->request('groups.addCallbackServer', [
|
|
||||||
'group_id' => $this->group_id,
|
|
||||||
'url' => $this->url,
|
|
||||||
'title' => $this->group_id . 'CallBackServer',
|
|
||||||
'secret_key' => $this->secret_key
|
|
||||||
]);
|
|
||||||
// $this->confirmation_token = request('groups.getCallbackConfirmationCode', [$this->group_id]);
|
|
||||||
echo $this->confirmation_token;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function sendOk(){
|
|
||||||
echo 'ok';
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,222 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
|
|
||||||
use hood\vk\core;
|
|
||||||
use hood\vk\robots\robot;
|
|
||||||
use hood\vk\tests\settings;
|
|
||||||
|
|
||||||
use hood\accounts\vk as account;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox API
|
|
||||||
*/
|
|
||||||
final class apiTest extends TestCase
|
|
||||||
{
|
|
||||||
use settings;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var core $core Ядро фреймворка
|
|
||||||
*/
|
|
||||||
private static core $core;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var account $account Аккаунт
|
|
||||||
*/
|
|
||||||
protected static account $account;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var robot $robot Робот
|
|
||||||
*/
|
|
||||||
private static robot $robot;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Инициализация аккаунта
|
|
||||||
* @beforeClass
|
|
||||||
*/
|
|
||||||
public function testAccountInit(): void
|
|
||||||
{
|
|
||||||
// Проверка входных данных
|
|
||||||
if (empty(self::$project_id)) {
|
|
||||||
self::markTestSkipped('Не инициализирован идентификатор проекта');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Инициализация аккаунта
|
|
||||||
self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts);
|
|
||||||
|
|
||||||
// Запись режима SSL-протокола
|
|
||||||
self::$account->ssl = self::$ssl ?? true;
|
|
||||||
|
|
||||||
if (empty(self::$key)) {
|
|
||||||
// Если не указан ключ
|
|
||||||
|
|
||||||
// Проверка входных данных
|
|
||||||
if (empty(self::$login)) {
|
|
||||||
self::markTestSkipped('Не инициализирован входной аккаунта');
|
|
||||||
} else if (empty(self::$password)) {
|
|
||||||
self::markTestSkipped('Не инициализирован пароль аккаунта');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Деаутентификация (на всякий случай)
|
|
||||||
self::$account->deauth();
|
|
||||||
|
|
||||||
// Аутентификация и генерация ключа
|
|
||||||
self::$key = self::$account->auth(self::$login, self::$password)->key(self::$project_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->assertNotNull(self::$key, 'Ошибка при инициализации ключа аккаунта');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Деинициализация аккаунта
|
|
||||||
* @afterClass
|
|
||||||
*/
|
|
||||||
public static function testAccountDeinit(): void
|
|
||||||
{
|
|
||||||
// Инициализация аккаунта
|
|
||||||
self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts);
|
|
||||||
|
|
||||||
// Деаутентификация
|
|
||||||
self::$account->deauth();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Инициализация робота
|
|
||||||
* @before
|
|
||||||
*/
|
|
||||||
public function testRobotGroupInit(): void
|
|
||||||
{
|
|
||||||
// Инициализация ядра
|
|
||||||
self::$core = core::init();
|
|
||||||
|
|
||||||
// Сохранение количества роботов
|
|
||||||
$count = self::$core->robots;
|
|
||||||
|
|
||||||
// Инициализация робота
|
|
||||||
self::$robot = self::$core->group(empty(self::$group_id) ? rand(0, 10) : self::$group_id);
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertEquals(self::$core->robots, $count + 1, 'Ошибка при инициализации робота');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Деинициализация робота
|
|
||||||
* @after
|
|
||||||
*/
|
|
||||||
public function testRobotGroupDeinit(): void
|
|
||||||
{
|
|
||||||
// Очистка реестра
|
|
||||||
self::$core->delete();
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Инициализация (безопасная)
|
|
||||||
*/
|
|
||||||
public function testSafeInit(): void
|
|
||||||
{
|
|
||||||
// Инициализация
|
|
||||||
$settings = self::$robot->key(self::$group_key)->api->init();
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertNotNull($settings['access_token']);
|
|
||||||
$this->assertNotNull($settings['v']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Реинициализация
|
|
||||||
*/
|
|
||||||
public function testReinit(): void
|
|
||||||
{
|
|
||||||
// Реинициализация
|
|
||||||
self::$robot->key(self::$group_key)->api->reinit();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Чтение робота
|
|
||||||
*/
|
|
||||||
public function testReadRobot(): void
|
|
||||||
{
|
|
||||||
// Чтение робота
|
|
||||||
$this->assertNotNull(self::$robot->key(self::$group_key)->api->robot);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Запись настроек
|
|
||||||
*/
|
|
||||||
public function testWriteSettings(): void
|
|
||||||
{
|
|
||||||
// Проверка выброса исключения
|
|
||||||
$this->expectExceptionMessage('Запрещено перезаписывать настройки');
|
|
||||||
|
|
||||||
// Запись настроек
|
|
||||||
self::$robot->key(self::$group_key)->api['settings'] = ['settings'];
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertTrue(!empty(self::$robot->api(['settings'])));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Чтение элемента настроек
|
|
||||||
*/
|
|
||||||
public function testReadSettingsElement(): void
|
|
||||||
{
|
|
||||||
// Проверка выброса исключения
|
|
||||||
$this->expectExceptionMessage('Не найдено: settings[\'element\']');
|
|
||||||
|
|
||||||
// Чтение элемента настроек
|
|
||||||
self::$robot->key(self::$group_key)->api['element'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Запись элемента настроек
|
|
||||||
*/
|
|
||||||
public function testWriteSettingsElement(): void
|
|
||||||
{
|
|
||||||
// Запись элемента настроек
|
|
||||||
self::$robot->key(self::$group_key)->api['element'] = 'element';
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertNotNull(self::$robot->api['element']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Выбор получателя по идентификатору
|
|
||||||
*/
|
|
||||||
public function testchooseDestinationById(): void
|
|
||||||
{
|
|
||||||
// Выбор получателя по идентификатору
|
|
||||||
self::$robot->key(self::$group_key)->api->chooseDestination(12345);
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertNotNull(self::$robot->api['peer_id']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Выбор получателей по идентификаторам
|
|
||||||
*/
|
|
||||||
public function testchooseDestinationByIds(): void
|
|
||||||
{
|
|
||||||
// Выбор получателей по идентификаторам
|
|
||||||
self::$robot->key(self::$group_key)->api->chooseDestination([12345, 12345]);
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertNotNull(self::$robot->api['user_ids']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Выбор получателя по домену
|
|
||||||
*/
|
|
||||||
public function testchooseDestinationByDomain(): void
|
|
||||||
{
|
|
||||||
// Выбор получателя по домену
|
|
||||||
self::$robot->key(self::$group_key)->api->chooseDestination('domain');
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertNotNull(self::$robot->api['domain']);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,199 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
|
|
||||||
use hood\vk\core;
|
|
||||||
use hood\vk\robots\robot;
|
|
||||||
use hood\vk\tests\settings;
|
|
||||||
use hood\vk\api\data;
|
|
||||||
|
|
||||||
use hood\accounts\vk as account;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Вложения
|
|
||||||
*/
|
|
||||||
final class dataTest extends TestCase
|
|
||||||
{
|
|
||||||
use settings;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var core $core Ядро фреймворка
|
|
||||||
*/
|
|
||||||
private static core $core;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var account $account Аккаунт
|
|
||||||
*/
|
|
||||||
protected static account $account;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var robot $robot Робот
|
|
||||||
*/
|
|
||||||
private static robot $robot;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var data $data Вложения
|
|
||||||
*/
|
|
||||||
private static data $data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Инициализация аккаунта
|
|
||||||
* @beforeClass
|
|
||||||
*/
|
|
||||||
public function testAccountInit(): void
|
|
||||||
{
|
|
||||||
// Проверка входных данных
|
|
||||||
if (empty(self::$project_id)) {
|
|
||||||
self::markTestSkipped('Не инициализирован идентификатор проекта');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Инициализация аккаунта
|
|
||||||
self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts);
|
|
||||||
|
|
||||||
// Запись режима SSL-протокола
|
|
||||||
self::$account->ssl = self::$ssl ?? true;
|
|
||||||
|
|
||||||
if (empty(self::$key)) {
|
|
||||||
// Если не указан ключ
|
|
||||||
|
|
||||||
// Проверка входных данных
|
|
||||||
if (empty(self::$login)) {
|
|
||||||
self::markTestSkipped('Не инициализирован входной аккаунта');
|
|
||||||
} else if (empty(self::$password)) {
|
|
||||||
self::markTestSkipped('Не инициализирован пароль аккаунта');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Деаутентификация (на всякий случай)
|
|
||||||
self::$account->deauth();
|
|
||||||
|
|
||||||
// Аутентификация и генерация ключа
|
|
||||||
self::$key = self::$account->auth(self::$login, self::$password)->key(self::$project_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->assertNotNull(self::$key, 'Ошибка при инициализации ключа аккаунта');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Деинициализация аккаунта
|
|
||||||
* @afterClass
|
|
||||||
*/
|
|
||||||
public static function testAccountDeinit(): void
|
|
||||||
{
|
|
||||||
// Инициализация аккаунта
|
|
||||||
self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts);
|
|
||||||
|
|
||||||
// Деаутентификация
|
|
||||||
self::$account->deauth();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Инициализация робота
|
|
||||||
* @before
|
|
||||||
*/
|
|
||||||
public function testRobotGroupInit(): void
|
|
||||||
{
|
|
||||||
// Инициализация ядра
|
|
||||||
self::$core = core::init();
|
|
||||||
|
|
||||||
// Сохранение количества роботов
|
|
||||||
$count = self::$core->robots;
|
|
||||||
|
|
||||||
// Инициализация робота
|
|
||||||
self::$robot = self::$core->group(empty(self::$group_id) ? rand(0, 10) : self::$group_id);
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertEquals(self::$core->robots, $count + 1, 'Ошибка при инициализации робота');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Деинициализация робота
|
|
||||||
* @after
|
|
||||||
*/
|
|
||||||
public function testRobotGroupDeinit(): void
|
|
||||||
{
|
|
||||||
// Очистка реестра
|
|
||||||
self::$core->delete();
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Инициализация вложений
|
|
||||||
* @before
|
|
||||||
*/
|
|
||||||
public function testDataInit(): void
|
|
||||||
{
|
|
||||||
|
|
||||||
if (isset(self::$robot)) {
|
|
||||||
|
|
||||||
// Инициализация вложений
|
|
||||||
self::$data = new data(self::$robot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Чтение вложений
|
|
||||||
*/
|
|
||||||
public function testReadAttachments(): void
|
|
||||||
{
|
|
||||||
// Проверка
|
|
||||||
$this->assertIsArray(self::$data->data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Запись вложения
|
|
||||||
*/
|
|
||||||
public function testWriteAttachment(): void
|
|
||||||
{
|
|
||||||
// Запись вложения
|
|
||||||
self::$data->addData('Вложение');
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertNotEmpty(self::$data->data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Запись вложения (повторная)
|
|
||||||
*/
|
|
||||||
public function testWriteAttachmentWhenItIsAlreadyWrited(): void
|
|
||||||
{
|
|
||||||
//Запись вложения
|
|
||||||
self::$data->addData('Вложение');
|
|
||||||
|
|
||||||
// Повторная запись вложения
|
|
||||||
self::$data->addData('Вложение');
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertSame(['Вложение', 'Вложение'], self::$data->data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Запись более 10 вложений
|
|
||||||
*/
|
|
||||||
public function testWriteAttachmentWhenLimitIsExceed()
|
|
||||||
{
|
|
||||||
// Проверка выброса исключения
|
|
||||||
$this->expectExceptionMessage('Превышен лимит вложений (10)');
|
|
||||||
|
|
||||||
//Запись вложений
|
|
||||||
self::$data->addData('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @testdox Очистка вложений
|
|
||||||
*/
|
|
||||||
public function testClearAttachments(): void
|
|
||||||
{
|
|
||||||
//Запись вложения
|
|
||||||
self::$data->addData('Вложение');
|
|
||||||
|
|
||||||
// Очистка вложений
|
|
||||||
self::$data->clear();
|
|
||||||
|
|
||||||
// Проверка
|
|
||||||
$this->assertEmpty(self::$data->data);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace hood\vk\tests;
|
|
||||||
|
|
||||||
trait settings
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var string $path_account папка для куки
|
|
||||||
*/
|
|
||||||
protected static string $path_accounts = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var int $id Идентификатор аккаунта
|
|
||||||
*/
|
|
||||||
protected static int $id = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var int $id Идентификатор вспомогательного аккаунта
|
|
||||||
*/
|
|
||||||
protected static int $target_id = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $password Входной аккаунта (если не указан ключ)
|
|
||||||
*/
|
|
||||||
protected static string $login = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $password Пароль аккаунта (если не указан ключ)
|
|
||||||
*/
|
|
||||||
protected static string $password = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $key Ключ аккаунта
|
|
||||||
*/
|
|
||||||
protected static string $key = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var int $group_id Идентификатор группы
|
|
||||||
*/
|
|
||||||
protected static int $group_id = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $key Ключ группы
|
|
||||||
*/
|
|
||||||
protected static string $group_key = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var float $version Версия API
|
|
||||||
*/
|
|
||||||
protected static float $version = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var int $project_id Идентификатор проекта
|
|
||||||
*/
|
|
||||||
protected static int $project_id = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $project_key Ключ проекта
|
|
||||||
*/
|
|
||||||
protected static string $project_key = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $project_service_key Сервисный ключ проекта
|
|
||||||
*/
|
|
||||||
protected static string $project_service_key = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var bool $ssl SSL-протокол
|
|
||||||
*/
|
|
||||||
protected static bool $ssl = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $path_photo Путь к Фото
|
|
||||||
*/
|
|
||||||
protected static string $path_photo = null;
|
|
||||||
}
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// declare(strict_types=1);
|
||||||
|
|
||||||
|
// namespace Hood\VK\API;
|
||||||
|
|
||||||
|
// class CallBack extends CallBackAbstract
|
||||||
|
// {
|
||||||
|
// /**
|
||||||
|
// * Адрес для создания колбек-сервера
|
||||||
|
// *
|
||||||
|
// * @var string
|
||||||
|
// */
|
||||||
|
// private $url;
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * Пользовательский ключ колбек-сессии
|
||||||
|
// *
|
||||||
|
// * @var string
|
||||||
|
// */
|
||||||
|
// private $secret_key;
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * Ключ подтверждения колбек сессии
|
||||||
|
// *
|
||||||
|
// * @var string
|
||||||
|
// */
|
||||||
|
// private $confirmation_token;
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * @var int
|
||||||
|
// */
|
||||||
|
// private $group_id;
|
||||||
|
|
||||||
|
// public function __construct(object $group, array $params = []){
|
||||||
|
// $this->secret_key = $_ENV['CALLBACK_SECRET_KEY'];
|
||||||
|
// $this->url = $_ENV['SERVER_DOMAIN'];
|
||||||
|
// $this->group_id = $group->id;
|
||||||
|
// $this->group_id->request('groups.addCallbackServer', [
|
||||||
|
// 'group_id' => $this->group_id,
|
||||||
|
// 'url' => $this->url,
|
||||||
|
// 'title' => $this->group_id . 'CallBackServer',
|
||||||
|
// 'secret_key' => $this->secret_key
|
||||||
|
// ]);
|
||||||
|
// // $this->confirmation_token = request('groups.getCallbackConfirmationCode', [$this->group_id]);
|
||||||
|
// echo $this->confirmation_token;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// public function sendOk(){
|
||||||
|
// echo 'ok';
|
||||||
|
// }
|
||||||
|
// }
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\api;
|
namespace mirzaev\vk\api;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use hood\vk\core,
|
use mirzaev\vk\core,
|
||||||
hood\vk\robots\robot;
|
mirzaev\vk\robots\robot;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LongPoll
|
* LongPoll
|
||||||
|
@ -23,7 +23,7 @@ use hood\vk\core,
|
||||||
* @see https://vk.com/dev/groups.getLongPollServer
|
* @see https://vk.com/dev/groups.getLongPollServer
|
||||||
* @see https://vk.com/dev/groups.setLongPollSettings
|
* @see https://vk.com/dev/groups.setLongPollSettings
|
||||||
*
|
*
|
||||||
* @package hood\vk\api
|
* @package mirzaev\vk\api
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*
|
*
|
||||||
* @todo Добавить обработку ошибок ($request['errors];)
|
* @todo Добавить обработку ошибок ($request['errors];)
|
||||||
|
@ -66,13 +66,10 @@ final class longpoll
|
||||||
*/
|
*/
|
||||||
public function __construct(private robot $robot)
|
public function __construct(private robot $robot)
|
||||||
{
|
{
|
||||||
// Инициализация робота
|
// Инициализация
|
||||||
match (true) {
|
if (empty($robot->id)) throw new Exception('Необходимо указать идентификатор ВКонтакте');
|
||||||
!isset($robot->id) => throw new Exception('Необходимо указать идентификатор ВКонтакте'),
|
if (empty($robot->key)) throw new Exception('Необходимо указать ключ для доступа к LongPoll');
|
||||||
!isset($robot->key) => throw new Exception('Необходимо указать ключ для доступа к LongPoll'),
|
if (empty($robot->api['v'])) throw new Exception('Необходимо указать версию используемого API ВКонтакте');
|
||||||
!isset($robot->version) => throw new Exception('Необходимо указать версию используемого API ВКонтакте'),
|
|
||||||
default => null
|
|
||||||
};
|
|
||||||
|
|
||||||
// Остановка процессов-дубликатов
|
// Остановка процессов-дубликатов
|
||||||
if (!file_exists(core::init()->path_temp)) {
|
if (!file_exists(core::init()->path_temp)) {
|
||||||
|
@ -185,6 +182,8 @@ final class longpoll
|
||||||
*
|
*
|
||||||
* @param int $wait Время ожидания новых событий (в секундах)
|
* @param int $wait Время ожидания новых событий (в секундах)
|
||||||
*
|
*
|
||||||
|
* @todo Проверка на ошибки запроса, включая на наличие доступа к лонгполл у ключа
|
||||||
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function get(int $wait = 25): array
|
public function get(int $wait = 25): array
|
||||||
|
@ -201,16 +200,25 @@ final class longpoll
|
||||||
// Запрос на получение доступа и данных LongPoll-сервера
|
// Запрос на получение доступа и данных LongPoll-сервера
|
||||||
$response = json_decode($this->robot->browser->request(method: 'POST', uri: 'groups.getLongPollServer', options: [
|
$response = json_decode($this->robot->browser->request(method: 'POST', uri: 'groups.getLongPollServer', options: [
|
||||||
'form_params' => $this->robot->api['settings']
|
'form_params' => $this->robot->api['settings']
|
||||||
])->getBody()->getContents())->response;
|
])->getBody()->getContents());
|
||||||
|
|
||||||
|
if (isset($response->error)) {
|
||||||
|
// Что-то сделать
|
||||||
|
|
||||||
|
var_export($response->error); die;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Инициализация
|
||||||
|
$response = $response->response;
|
||||||
|
|
||||||
// Ключ доступа
|
// Ключ доступа
|
||||||
$this->key = $response->key;
|
$this->key = $response->key;
|
||||||
|
|
||||||
// Сервер хранящий события
|
// Сервер хранящий события
|
||||||
$this->server = $response->server;
|
$this->server = $response->server;
|
||||||
|
|
||||||
// Идентификатор последнего события
|
// Идентификатор последнего события
|
||||||
$this->ts = $response->ts;
|
$this->ts = $response->ts;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Запрос на получение событий
|
// Запрос на получение событий
|
|
@ -2,14 +2,14 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\api\methods;
|
namespace mirzaev\vk\api\methods;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
use hood\accounts\vk;
|
use mirzaev\accounts\vk;
|
||||||
use hood\vk\robots\robot;
|
use mirzaev\vk\robots\robot;
|
||||||
use hood\vk\api\data;
|
use mirzaev\vk\api\data;
|
||||||
use hood\vk\robots\group;
|
use mirzaev\vk\robots\group;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Сообщение
|
* Сообщение
|
||||||
|
@ -19,7 +19,7 @@ use hood\vk\robots\group;
|
||||||
* @see https://vk.com/dev/messages.send
|
* @see https://vk.com/dev/messages.send
|
||||||
* @see https://vk.com/dev/messages.getById
|
* @see https://vk.com/dev/messages.getById
|
||||||
*
|
*
|
||||||
* @package hood\vk\api
|
* @package mirzaev\vk\api
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*
|
*
|
||||||
* @todo Доработать строгий режим отправки: проверку сообщения в беседе (не имеет ID сообщений)
|
* @todo Доработать строгий режим отправки: проверку сообщения в беседе (не имеет ID сообщений)
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\api\methods;
|
namespace mirzaev\vk\api\methods;
|
||||||
|
|
||||||
use hood\vk\robots\robot;
|
use mirzaev\vk\robots\robot;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Абстракция метода API
|
* Абстракция метода API
|
||||||
|
@ -14,7 +14,7 @@ use hood\vk\robots\robot;
|
||||||
* @method protected static get(string $url, ...$params) Получить
|
* @method protected static get(string $url, ...$params) Получить
|
||||||
* @method protected static delete(string $url, ...$params) Удалить
|
* @method protected static delete(string $url, ...$params) Удалить
|
||||||
*
|
*
|
||||||
* @package hood\vk\api\methods
|
* @package mirzaev\vk\api\methods
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*/
|
*/
|
||||||
abstract class method
|
abstract class method
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\api\methods;
|
namespace mirzaev\vk\api\methods;
|
||||||
|
|
||||||
use hood\vk\robots\robot,
|
use mirzaev\vk\robots\robot,
|
||||||
hood\vk\robots\group;
|
mirzaev\vk\robots\group;
|
||||||
|
|
||||||
use hood\accounts\vk as account;
|
use mirzaev\accounts\vk as account;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ use Exception;
|
||||||
* @see https://vk.com/dev/photos.getUploadServer
|
* @see https://vk.com/dev/photos.getUploadServer
|
||||||
* @see https://vk.com/dev/messages.getById
|
* @see https://vk.com/dev/messages.getById
|
||||||
*
|
*
|
||||||
* @package hood\vk\api\methods
|
* @package mirzaev\vk\api\methods
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*
|
*
|
||||||
* @todo Добавить обработку ошибок ($request['errors];)
|
* @todo Добавить обработку ошибок ($request['errors];)
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\api;
|
namespace mirzaev\vk\api;
|
||||||
|
|
||||||
use hood\vk\robots\robot;
|
use mirzaev\vk\robots\robot;
|
||||||
|
|
||||||
use Throwable;
|
use Throwable;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
@ -20,11 +20,18 @@ use ArrayAccess;
|
||||||
* @todo
|
* @todo
|
||||||
* 1. Создать __isset(), __unset()
|
* 1. Создать __isset(), __unset()
|
||||||
*
|
*
|
||||||
* @package hood\vk\api
|
* @package mirzaev\vk\api
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*/
|
*/
|
||||||
class settings implements ArrayAccess
|
class settings implements ArrayAccess
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Версия API ВКонтакте по умолчанию
|
||||||
|
*
|
||||||
|
* Должна иметь тип string потому, что PHP при стандартных настройках удаляет нули у float
|
||||||
|
*/
|
||||||
|
protected const VK_API_VERSION_DEFAULT = '5.130';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Конструктор
|
* Конструктор
|
||||||
*/
|
*/
|
||||||
|
@ -43,18 +50,21 @@ class settings implements ArrayAccess
|
||||||
/**
|
/**
|
||||||
* Инициализация (безопасная)
|
* Инициализация (безопасная)
|
||||||
*
|
*
|
||||||
* @var float|null $version Версия API
|
* @var float $version Версия API (переопределять не рекомендуется)
|
||||||
*/
|
*/
|
||||||
public function init(float|null $version = null): self
|
public function init(string $version = self::VK_API_VERSION_DEFAULT): self
|
||||||
{
|
{
|
||||||
if (isset($blocked)) {
|
// Инициализация
|
||||||
|
static $blocked = false;
|
||||||
|
|
||||||
|
if ($blocked) {
|
||||||
// Блокировка найдена
|
// Блокировка найдена
|
||||||
|
|
||||||
throw new Exception('Повторная инициализация запрещена', 500);
|
throw new Exception('Повторная инициализация запрещена', 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Блокировка
|
// Блокировка
|
||||||
static $blocked = true;
|
$blocked = true;
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
try {
|
try {
|
||||||
|
@ -69,9 +79,9 @@ class settings implements ArrayAccess
|
||||||
/**
|
/**
|
||||||
* Реинициализация
|
* Реинициализация
|
||||||
*
|
*
|
||||||
* @var float|null $version Версия API
|
* @var float $version Версия API (переопределять не рекомендуется)
|
||||||
*/
|
*/
|
||||||
public function reinit(float|null $version = null): self
|
public function reinit(string $version = null): self
|
||||||
{
|
{
|
||||||
// Буфер
|
// Буфер
|
||||||
$version = $version ?? $this->settings['v'] ?? null;
|
$version = $version ?? $this->settings['v'] ?? null;
|
||||||
|
@ -92,9 +102,9 @@ class settings implements ArrayAccess
|
||||||
/**
|
/**
|
||||||
* Инициализация
|
* Инициализация
|
||||||
*
|
*
|
||||||
* @var float $version Версия API
|
* @var float $version Версия API (переопределять не рекомендуется)
|
||||||
*/
|
*/
|
||||||
protected function _init(float $version = 5.124): self
|
protected function _init(string $version = self::VK_API_VERSION_DEFAULT): self
|
||||||
{
|
{
|
||||||
// Ключ
|
// Ключ
|
||||||
$this->settings['access_token'] = $this->robot->key;
|
$this->settings['access_token'] = $this->robot->key;
|
||||||
|
@ -106,26 +116,30 @@ class settings implements ArrayAccess
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Записать получателя
|
* Определить и записать получателя
|
||||||
*
|
*
|
||||||
* Определяет получателей по входным параметрам
|
* @see mirzaev\vk\api\methods\messages Сообщения
|
||||||
*
|
|
||||||
* @see hood\vk\api\methods\messages Сообщения
|
|
||||||
*/
|
*/
|
||||||
public function writeDestination(string|array|int $destination): void
|
public function destination(string|array|int $target): self
|
||||||
{
|
{
|
||||||
if (is_int($destination)) {
|
if (is_int($target)) {
|
||||||
// Идентификатор
|
// Идентификатор
|
||||||
|
|
||||||
$this->settings['peer_id'] = $destination;
|
$this->settings['peer_id'] = $target;
|
||||||
} else if (is_array($destination)) {
|
|
||||||
|
return $this;
|
||||||
|
} else if (is_array($target)) {
|
||||||
// Идентификаторы
|
// Идентификаторы
|
||||||
|
|
||||||
$this->settings['user_ids'] = $destination;
|
$this->settings['user_ids'] = $target;
|
||||||
} else if (is_string($destination)) {
|
|
||||||
|
return $this;
|
||||||
|
} else if (is_string($target)) {
|
||||||
// Домен
|
// Домен
|
||||||
|
|
||||||
$this->settings['domain'] = $destination;
|
$this->settings['domain'] = $target;
|
||||||
|
|
||||||
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new Exception('Не удалось определить получателя', 500);
|
throw new Exception('Не удалось определить получателя', 500);
|
||||||
|
@ -142,8 +156,7 @@ class settings implements ArrayAccess
|
||||||
match ($name) {
|
match ($name) {
|
||||||
'settings' => isset($this->settings) ? throw new Exception('Запрещено перезаписывать настройки', 500) : $this->settings = $value,
|
'settings' => isset($this->settings) ? throw new Exception('Запрещено перезаписывать настройки', 500) : $this->settings = $value,
|
||||||
'robot' => isset($this->robot) ? throw new Exception('Запрещено перезаписывать Робота', 500) : $this->robot = $value,
|
'robot' => isset($this->robot) ? throw new Exception('Запрещено перезаписывать Робота', 500) : $this->robot = $value,
|
||||||
'data' => $this->offsetSet('data', $value),
|
'data', 'attachments' => $this->offsetSet('attachments', $value),
|
||||||
'attachments' => $this->offsetSet('attachments', $value),
|
|
||||||
default => $this->offsetSet($name, $value)
|
default => $this->offsetSet($name, $value)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -158,12 +171,21 @@ class settings implements ArrayAccess
|
||||||
return match ($name) {
|
return match ($name) {
|
||||||
'settings' => $this->settings ?? throw new Exception('Настройки не инициализированы', 500),
|
'settings' => $this->settings ?? throw new Exception('Настройки не инициализированы', 500),
|
||||||
'robot' => $this->robot ?? throw new Exception('Робот не инициализирован', 500),
|
'robot' => $this->robot ?? throw new Exception('Робот не инициализирован', 500),
|
||||||
'data' => $this->offsetGet('data'),
|
'data', 'attachments' => $this->offsetGet('attachments'),
|
||||||
'attachments' => $this->offsetGet('attachments'),
|
|
||||||
default => $this->offsetGet($name)
|
default => $this->offsetGet($name)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// public function __unset(string $name): void
|
||||||
|
// {
|
||||||
|
// match ($name) {
|
||||||
|
// 'settings' => throw new Exception('Запрещено удалять настройки', 500),
|
||||||
|
// 'robot' => throw new Exception('Запрещено удалять робота', 500),
|
||||||
|
// 'data', 'attachments' => $this->offsetUnset('attachments'),
|
||||||
|
// default => $this->offsetUnset($name)
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Записать по смещению
|
* Записать по смещению
|
||||||
*/
|
*/
|
||||||
|
@ -187,8 +209,14 @@ class settings implements ArrayAccess
|
||||||
return $this->settings['attachments'] = $value;
|
return $this->settings['attachments'] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Конкатенация
|
if (empty($this->settings['attachments']) || count($this->settings['attachments']) < 10) {
|
||||||
return $this->settings['attachments'][] = $value;
|
// Записано менее чем 10 вложений (от 0 до 9)
|
||||||
|
|
||||||
|
// Запись (конкатенация)
|
||||||
|
return $this->settings['attachments'][] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Exception('Превышено ограничение на 10 вложений', 500);
|
||||||
} else {
|
} else {
|
||||||
// Запись по ключу или смещению
|
// Запись по ключу или смещению
|
||||||
|
|
||||||
|
@ -219,7 +247,7 @@ class settings implements ArrayAccess
|
||||||
return $this->settings[$offset];
|
return $this->settings[$offset];
|
||||||
}
|
}
|
||||||
|
|
||||||
is_int($offset) ? throw new Exception("Смещение $offset не найдено", 404) : throw new Exception("Ключ $offset не найден", 404);
|
throw new Exception(is_int($offset) ? "Смещение $offset не найдено" : "Ключ $offset не найден", 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new Exception('Настройки не инициализированы', 500);
|
throw new Exception('Настройки не инициализированы', 500);
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk;
|
namespace mirzaev\vk;
|
||||||
|
|
||||||
use hood\vk\robots\robot;
|
use mirzaev\vk\robots\robot;
|
||||||
use hood\vk\traits\singleton;
|
use mirzaev\vk\traits\singleton;
|
||||||
use hood\vk\loggers\jasmo;
|
use mirzaev\vk\loggers\jasmo;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ use Exception;
|
||||||
* @method public function set($id, $value) Запись в реестр
|
* @method public function set($id, $value) Запись в реестр
|
||||||
* @method public function get($id = null) Чтение из реестра
|
* @method public function get($id = null) Чтение из реестра
|
||||||
*
|
*
|
||||||
* @package hood\vk
|
* @package mirzaev\vk
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*/
|
*/
|
||||||
final class core
|
final class core
|
||||||
|
@ -75,16 +75,14 @@ final class core
|
||||||
private string $path_temp;
|
private string $path_temp;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Журналист
|
* Запись в журнал
|
||||||
*
|
*
|
||||||
* @param string $file Файл для журналирования
|
* @param string $file Файл для журналирования
|
||||||
*
|
*
|
||||||
* @return self
|
|
||||||
*
|
|
||||||
* @todo Добавить установку иного журналиста по спецификации PSR-3
|
* @todo Добавить установку иного журналиста по спецификации PSR-3
|
||||||
* @todo Более гибкое журналирование
|
* @todo Более гибкое журналирование
|
||||||
*/
|
*/
|
||||||
public function log(string $file = null): self
|
public function journal(string $file = null): self
|
||||||
{
|
{
|
||||||
// Инициализация журналиста (требует переработки)
|
// Инициализация журналиста (требует переработки)
|
||||||
jasmo::init()::post($file)::postErrorHandler()::postShutdownHandler();
|
jasmo::init()::post($file)::postErrorHandler()::postShutdownHandler();
|
||||||
|
@ -98,9 +96,7 @@ final class core
|
||||||
* @param int $id
|
* @param int $id
|
||||||
* @param robot $robot
|
* @param robot $robot
|
||||||
*
|
*
|
||||||
* @see hood\vk\traits\registry Модификация метода
|
* @see mirzaev\vk\traits\registry Модификация метода
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function write(int $id, robot $robot): void
|
public function write(int $id, robot $robot): void
|
||||||
{
|
{
|
||||||
|
@ -131,7 +127,7 @@ final class core
|
||||||
* @param int|null $id Идентификатор
|
* @param int|null $id Идентификатор
|
||||||
* @param int|null $session Сессия
|
* @param int|null $session Сессия
|
||||||
*
|
*
|
||||||
* @see hood\vk\traits\registry Модификация метода
|
* @see mirzaev\vk\traits\registry Модификация метода
|
||||||
*
|
*
|
||||||
* @return mixed Весь реестр, робота или сессию робота
|
* @return mixed Весь реестр, робота или сессию робота
|
||||||
*/
|
*/
|
||||||
|
@ -171,9 +167,7 @@ final class core
|
||||||
* @param int|null $id Идентификатор
|
* @param int|null $id Идентификатор
|
||||||
* @param int|null $session Сессия
|
* @param int|null $session Сессия
|
||||||
*
|
*
|
||||||
* @see hood\vk\traits\registry Модификация метода
|
* @see mirzaev\vk\traits\registry Модификация метода
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function delete(int|null $id = null, int|null $session = null): void
|
public function delete(int|null $id = null, int|null $session = null): void
|
||||||
{
|
{
|
||||||
|
@ -222,8 +216,6 @@ final class core
|
||||||
*
|
*
|
||||||
* @param mixed $name Название
|
* @param mixed $name Название
|
||||||
* @param mixed $value Значение
|
* @param mixed $value Значение
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function __set(mixed $name, mixed $value): void
|
public function __set(mixed $name, mixed $value): void
|
||||||
{
|
{
|
||||||
|
@ -239,17 +231,15 @@ final class core
|
||||||
* Прочитать свойство
|
* Прочитать свойство
|
||||||
*
|
*
|
||||||
* @param mixed $name Название
|
* @param mixed $name Название
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
*/
|
||||||
public function __get(mixed $name): mixed
|
public function __get(mixed $name): mixed
|
||||||
{
|
{
|
||||||
return match ($name) {
|
return match ($name) {
|
||||||
'robots' => $this->robots,
|
'robots' => $this->robots,
|
||||||
'timezone' => !isset($this->timezone) ? $this->timezone = 'Europe/Moscow' : $this->timezone,
|
'timezone' => $this->timezone ?? $this->timezone = 'Europe/Moscow',
|
||||||
'path_root' => !isset($this->path_root) ? $this->path_root = dirname(__DIR__) : $this->path_root,
|
'path_root' => $this->path_root ?? $this->path_root = dirname(__DIR__),
|
||||||
'path_logs' => !isset($this->path_logs) ? $this->path_logs = $this->path_root . '/logs' : $this->path_logs,
|
'path_logs' => $this->path_logs ?? $this->path_logs = $this->__get('path_root') . '/logs',
|
||||||
'path_temp' => !isset($this->path_temp) ? $this->path_root . '/temp' : $this->path_temp,
|
'path_temp' => $this->path_temp ?? $this->path_temp = $this->__get('path_root') . '/temp',
|
||||||
default => null
|
default => null
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -262,12 +252,10 @@ final class core
|
||||||
*
|
*
|
||||||
* @param string $method Метод
|
* @param string $method Метод
|
||||||
* @param array $params Параметры
|
* @param array $params Параметры
|
||||||
*
|
|
||||||
* @return robot
|
|
||||||
*/
|
*/
|
||||||
public function __call(string $method, array $params): robot
|
public function __call(string $method, array $params): robot
|
||||||
{
|
{
|
||||||
if (class_exists($robot = '\\hood\\vk\\robots\\' . $method)) {
|
if (class_exists($robot = '\\mirzaev\\vk\\robots\\' . $method)) {
|
||||||
// Если найден класс реализующий запрошенного робота
|
// Если найден класс реализующий запрошенного робота
|
||||||
return new $robot(...$params);
|
return new $robot(...$params);
|
||||||
} else {
|
} else {
|
|
@ -2,14 +2,14 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\loggers;
|
namespace mirzaev\vk\loggers;
|
||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use Monolog\logger;
|
use Monolog\logger;
|
||||||
use Monolog\Handler\StreamHandler;
|
use Monolog\Handler\StreamHandler;
|
||||||
use Jasny\ErrorHandler;
|
use Jasny\ErrorHandler;
|
||||||
use hood\vk\core,
|
use mirzaev\vk\core,
|
||||||
hood\vk\traits\singleton;
|
mirzaev\vk\traits\singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Журналист Jasmo
|
* Журналист Jasmo
|
||||||
|
@ -20,7 +20,7 @@ use hood\vk\core,
|
||||||
* @see Monolog\logger
|
* @see Monolog\logger
|
||||||
* @see Jasny\ErrorHandler
|
* @see Jasny\ErrorHandler
|
||||||
*
|
*
|
||||||
* @package hood\vk\loggers
|
* @package mirzaev\vk\loggers
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*/
|
*/
|
||||||
final class jasmo extends logger
|
final class jasmo extends logger
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\loggers;
|
namespace mirzaev\vk\loggers;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Абстрактный класс журналиста
|
* Абстрактный класс журналиста
|
||||||
*
|
*
|
||||||
* @package hood\vk\loggers
|
* @package mirzaev\vk\loggers
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*/
|
*/
|
||||||
abstract class logger
|
abstract class logger
|
|
@ -2,10 +2,10 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\robots;
|
namespace mirzaev\vk\robots;
|
||||||
|
|
||||||
use hood\vk\robots\robot;
|
use mirzaev\vk\robots\robot;
|
||||||
use hood\vk\api\longpoll;
|
use mirzaev\vk\api\longpoll;
|
||||||
|
|
||||||
use Throwable;
|
use Throwable;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
@ -19,7 +19,7 @@ use Exception;
|
||||||
* @method public function __get($name) Чтение свойства
|
* @method public function __get($name) Чтение свойства
|
||||||
* @method public function __isset($name) Проверка на инициализированность свойства
|
* @method public function __isset($name) Проверка на инициализированность свойства
|
||||||
*
|
*
|
||||||
* @package hood\vk\robots
|
* @package mirzaev\vk\robots
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*/
|
*/
|
||||||
final class group extends robot
|
final class group extends robot
|
||||||
|
@ -35,7 +35,7 @@ final class group extends robot
|
||||||
* @param string $name Название
|
* @param string $name Название
|
||||||
* @param mixed $value Значение
|
* @param mixed $value Значение
|
||||||
*
|
*
|
||||||
* @see hood\vk\robots\robot Наследуемый метод
|
* @see mirzaev\vk\robots\robot Наследуемый метод
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
@ -58,7 +58,7 @@ final class group extends robot
|
||||||
*
|
*
|
||||||
* @param string $name Название
|
* @param string $name Название
|
||||||
*
|
*
|
||||||
* @see hood\vk\robots\robot Наследуемый метод
|
* @see mirzaev\vk\robots\robot Наследуемый метод
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
|
@ -2,19 +2,19 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\robots;
|
namespace mirzaev\vk\robots;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
use GuzzleHttp\Client as browser;
|
use GuzzleHttp\Client as browser;
|
||||||
|
|
||||||
use hood\vk\core;
|
use mirzaev\vk\core;
|
||||||
use hood\vk\proxies\proxy;
|
use mirzaev\vk\proxies\proxy;
|
||||||
use hood\vk\captcha\captcha;
|
use mirzaev\vk\captcha\captcha;
|
||||||
use hood\vk\api\settings as api;
|
use mirzaev\vk\api\settings as api;
|
||||||
use hood\vk\api\methods\method;
|
use mirzaev\vk\api\methods\method;
|
||||||
|
|
||||||
use hood\accounts\vk as account;
|
use mirzaev\accounts\vk as account;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -41,7 +41,7 @@ use hood\accounts\vk as account;
|
||||||
* @method public static function __callStatic(string $method, array $params) Вызов статического метода
|
* @method public static function __callStatic(string $method, array $params) Вызов статического метода
|
||||||
* @method public function __toString() Конвертация в строку
|
* @method public function __toString() Конвертация в строку
|
||||||
*
|
*
|
||||||
* @package hood\vk\robots
|
* @package mirzaev\vk\robots
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*/
|
*/
|
||||||
abstract class robot
|
abstract class robot
|
||||||
|
@ -241,7 +241,7 @@ abstract class robot
|
||||||
*/
|
*/
|
||||||
public function __call(string $method, array $params): method
|
public function __call(string $method, array $params): method
|
||||||
{
|
{
|
||||||
if (class_exists($class = '\\hood\\vk\\api\\methods\\' . $method . 's')) {
|
if (class_exists($class = '\\mirzaev\\vk\\api\\methods\\' . $method . 's')) {
|
||||||
// Если найден класс реализующий запрошенный метод
|
// Если найден класс реализующий запрошенный метод
|
||||||
return new $class($this, ...$params);
|
return new $class($this, ...$params);
|
||||||
}
|
}
|
||||||
|
@ -262,7 +262,7 @@ abstract class robot
|
||||||
*/
|
*/
|
||||||
public static function __callStatic(string $method, array $params): method
|
public static function __callStatic(string $method, array $params): method
|
||||||
{
|
{
|
||||||
if (class_exists($class = '\\hood\\vk\\api\\methods\\' . $method . 's')) {
|
if (class_exists($class = '\\mirzaev\\vk\\api\\methods\\' . $method . 's')) {
|
||||||
return $class(self, ...$params);
|
return $class(self, ...$params);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,16 +2,16 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\robots;
|
namespace mirzaev\vk\robots;
|
||||||
|
|
||||||
use hood\vk\robots\robot;
|
use mirzaev\vk\robots\robot;
|
||||||
|
|
||||||
use hood\accounts\vk as account;
|
use mirzaev\accounts\vk as account;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Робот-пользователь
|
* Робот-пользователь
|
||||||
*
|
*
|
||||||
* @package hood\vk\robots
|
* @package mirzaev\vk\robots
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
|
||||||
*/
|
*/
|
||||||
final class user extends robot
|
final class user extends robot
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\traits;
|
namespace mirzaev\vk\traits;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Паттерн registry
|
* Паттерн registry
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\traits;
|
namespace mirzaev\vk\traits;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
9104
|
|
@ -0,0 +1,273 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
use mirzaev\vk\core;
|
||||||
|
use mirzaev\vk\robots\robot;
|
||||||
|
use mirzaev\vk\tests\settings;
|
||||||
|
|
||||||
|
use mirzaev\accounts\vk as account;
|
||||||
|
|
||||||
|
use Exception as RealException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox API ВКонтакте
|
||||||
|
*/
|
||||||
|
final class apiTest extends TestCase
|
||||||
|
{
|
||||||
|
use settings;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var core $core Ядро фреймворка
|
||||||
|
*/
|
||||||
|
private static core $core;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var account $account Аккаунт
|
||||||
|
*/
|
||||||
|
protected static account $account;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var robot $robot Робот
|
||||||
|
*/
|
||||||
|
private static robot $robot;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Инициализация аккаунта
|
||||||
|
* @beforeClass
|
||||||
|
*/
|
||||||
|
public function testAccountInit(): void
|
||||||
|
{
|
||||||
|
// Проверка входных данных
|
||||||
|
if (empty(self::$project_id)) {
|
||||||
|
self::markTestSkipped('Не инициализирован идентификатор проекта');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Инициализация аккаунта
|
||||||
|
self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, self::$path_accounts);
|
||||||
|
|
||||||
|
// Запись режима SSL-протокола
|
||||||
|
self::$account->ssl = self::$ssl ?? true;
|
||||||
|
|
||||||
|
if (empty(self::$key)) {
|
||||||
|
// Если не указан ключ
|
||||||
|
|
||||||
|
// Проверка входных данных
|
||||||
|
if (empty(self::$login)) {
|
||||||
|
self::markTestSkipped('Не инициализирован входной аккаунта');
|
||||||
|
} else if (empty(self::$password)) {
|
||||||
|
self::markTestSkipped('Не инициализирован пароль аккаунта');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Деаутентификация (на всякий случай)
|
||||||
|
self::$account->deauth();
|
||||||
|
|
||||||
|
// Аутентификация и генерация ключа
|
||||||
|
self::$key = self::$account->auth(self::$login, self::$password)->key(self::$project_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertNotNull(self::$key, 'Ошибка при инициализации ключа аккаунта');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Деинициализация аккаунта
|
||||||
|
* @afterClass
|
||||||
|
*/
|
||||||
|
public static function testAccountDeinit(): void
|
||||||
|
{
|
||||||
|
// Инициализация аккаунта
|
||||||
|
self::$account = new account(self::$id ?? rand(0, 10), self::$path_accounts);
|
||||||
|
|
||||||
|
// Деаутентификация
|
||||||
|
self::$account->deauth();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Инициализация робота-группы
|
||||||
|
* @before
|
||||||
|
*/
|
||||||
|
public function testRobotGroupInit(): void
|
||||||
|
{
|
||||||
|
// Инициализация ядра
|
||||||
|
self::$core = core::init();
|
||||||
|
|
||||||
|
// Сохранение количества роботов
|
||||||
|
$count = self::$core->robots;
|
||||||
|
|
||||||
|
// Инициализация робота
|
||||||
|
self::$robot = self::$core->group(self::$group_id ?? rand(0, 10));
|
||||||
|
|
||||||
|
// Проверка
|
||||||
|
$this->assertSame(self::$core->robots, $count + 1, 'Ошибка при инициализации робота-группы');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Деинициализация робота-группы
|
||||||
|
* @after
|
||||||
|
*/
|
||||||
|
public function testRobotGroupDeinit(): void
|
||||||
|
{
|
||||||
|
// Очистка реестра
|
||||||
|
self::$core->delete();
|
||||||
|
|
||||||
|
// Проверка выброса исключения (НЕ РАБОТАЕТ, ВЕРОЯТНО БАГ)
|
||||||
|
// $this->expectExceptionMessage('Робот с идентификатором ' . self::$robot->id . ' не найден');
|
||||||
|
// $this->expectExceptionCode(404);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Чтение
|
||||||
|
self::$core->read(self::$robot->id);
|
||||||
|
} catch (RealException $e) {
|
||||||
|
// Проверка
|
||||||
|
$this->assertSame('Робот с идентификатором ' . self::$robot->id . ' не найден', $e->getMessage(), 'Не удалось удалить робота');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Инициализация
|
||||||
|
*/
|
||||||
|
public function testInit(): void
|
||||||
|
{
|
||||||
|
// Инициализация
|
||||||
|
$settings = self::$robot->key(self::$group_key)->api->init(self::$version);
|
||||||
|
|
||||||
|
// Проверка
|
||||||
|
$this->assertNotNull($settings['access_token']);
|
||||||
|
$this->assertNotNull($settings['v']);
|
||||||
|
$this->assertSame($settings['v'], self::$version);
|
||||||
|
|
||||||
|
// Проверка
|
||||||
|
$this->expectExceptionMessage('Повторная инициализация запрещена');
|
||||||
|
|
||||||
|
// Инициализация (повторная)
|
||||||
|
$settings = self::$robot->api->init(self::$version);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Реинициализация
|
||||||
|
*/
|
||||||
|
public function testReinit(): void
|
||||||
|
{
|
||||||
|
// Реинициализация
|
||||||
|
self::$robot->key(self::$group_key)->api->reinit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Запись и чтение параметра
|
||||||
|
*/
|
||||||
|
public function testWriteAndReadParameter(): void
|
||||||
|
{
|
||||||
|
// Запись
|
||||||
|
self::$robot->key(self::$group_key)->api['key'] = 'value';
|
||||||
|
|
||||||
|
// Проверка
|
||||||
|
$this->assertSame('value', self::$robot->api['key'], 'Не удалось записать или прочитать параметр');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Чтение неинициализированного параметра
|
||||||
|
*/
|
||||||
|
public function testReadUndefinedParameter(): void
|
||||||
|
{
|
||||||
|
// Проверка выброса исключения
|
||||||
|
$this->expectExceptionMessage('Ключ key не найден');
|
||||||
|
|
||||||
|
// Чтение
|
||||||
|
self::$robot->key(self::$group_key)->api['key'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Выбор получателя по идентификатору
|
||||||
|
*/
|
||||||
|
public function testChooseDestinationById(): void
|
||||||
|
{
|
||||||
|
// Выбор получателя
|
||||||
|
self::$robot->key(self::$group_key)->api->destination(self::$target_id);
|
||||||
|
|
||||||
|
// Проверка
|
||||||
|
$this->assertSame(self::$target_id, self::$robot->api['peer_id'], 'Не удалось выбрать получателя по идентификатору');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Выбор получателей по идентификаторам
|
||||||
|
*/
|
||||||
|
public function testChooseDestinationsByIds(): void
|
||||||
|
{
|
||||||
|
// Выбор получателей
|
||||||
|
self::$robot->key(self::$group_key)->api->destination([self::$target_id, self::$target_id]);
|
||||||
|
|
||||||
|
// Проверка
|
||||||
|
$this->assertSame([self::$target_id, self::$target_id], self::$robot->api['user_ids'], 'Не удалось выбрать получателей по идентификаторам');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Выбор получателя по домену
|
||||||
|
*/
|
||||||
|
public function testChooseDestinationByDomain(): void
|
||||||
|
{
|
||||||
|
// Выбор получателя
|
||||||
|
self::$robot->key(self::$group_key)->api->destination(self::$target_domain);
|
||||||
|
|
||||||
|
// Проверка
|
||||||
|
$this->assertSame(self::$target_domain, self::$robot->api['domain'], 'Не удалось выбрать получателя по домену');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Запись, чтение и удаление вложений
|
||||||
|
*/
|
||||||
|
public function testWriteAndReadAttachments(): void
|
||||||
|
{
|
||||||
|
// Инициализация
|
||||||
|
self::$robot->key(self::$group_key);
|
||||||
|
|
||||||
|
// Запись
|
||||||
|
self::$robot->api['attachments'] = 'photo0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'video0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'audio0000_0000';
|
||||||
|
|
||||||
|
// Проверка
|
||||||
|
$this->assertSame(['photo0000_0000', 'video0000_0000', 'audio0000_0000'], self::$robot->api['attachments'], 'Не удалось записать или прочитать вложения');
|
||||||
|
|
||||||
|
// Удаление одного вложения
|
||||||
|
unset(self::$robot->api['attachments'][0]);
|
||||||
|
|
||||||
|
// Реинициализация смещений (для точной проверки)
|
||||||
|
self::$robot->api['attachments'] = array_values(self::$robot->api['attachments']);
|
||||||
|
|
||||||
|
// Проверка
|
||||||
|
$this->assertSame(['video0000_0000', 'audio0000_0000'], self::$robot->api['attachments'], 'Не удалось удалить или прочитать вложения');
|
||||||
|
|
||||||
|
// Удаление всех вложений
|
||||||
|
unset(self::$robot->api['attachments']);
|
||||||
|
|
||||||
|
// Проверка
|
||||||
|
$this->assertNull(self::$robot->api['attachments'], 'Не удалось удалить вложения');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Запись вложений с превышением ограничения
|
||||||
|
*/
|
||||||
|
public function testWriteWithOverflowAttachments()
|
||||||
|
{
|
||||||
|
// Проверка выброса исключения
|
||||||
|
$this->expectExceptionMessage('Превышено ограничение на 10 вложений');
|
||||||
|
|
||||||
|
// Инициализация
|
||||||
|
self::$robot->key(self::$group_key);
|
||||||
|
|
||||||
|
// Запись (11 вложений)
|
||||||
|
self::$robot->api['attachments'] = 'photo0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'video0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'audio0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'photo0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'video0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'audio0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'photo0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'video0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'audio0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'photo0000_0000';
|
||||||
|
self::$robot->api['attachments'] = 'video0000_0000';
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,15 +4,15 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
use hood\vk\core;
|
use mirzaev\vk\core;
|
||||||
use hood\vk\robots\robot;
|
use mirzaev\vk\robots\robot;
|
||||||
use hood\vk\tests\settings;
|
use mirzaev\vk\tests\settings;
|
||||||
|
|
||||||
use hood\accounts\vk as account;
|
use mirzaev\accounts\vk as account;
|
||||||
use hood\accounts\vk;
|
use mirzaev\accounts\vk;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Сообщения
|
* @testdox [МЕТОД] Сообщения
|
||||||
*/
|
*/
|
||||||
final class messagesTest extends TestCase
|
final class messagesTest extends TestCase
|
||||||
{
|
{
|
||||||
|
@ -99,7 +99,7 @@ final class messagesTest extends TestCase
|
||||||
self::$robot = self::$core->group(empty(self::$group_id) ? rand(0, 10) : self::$group_id);
|
self::$robot = self::$core->group(empty(self::$group_id) ? rand(0, 10) : self::$group_id);
|
||||||
|
|
||||||
// Проверка
|
// Проверка
|
||||||
$this->assertEquals(self::$core->robots, $count + 1, 'Ошибка при инициализации робота');
|
$this->assertSame(self::$core->robots, $count + 1, 'Ошибка при инициализации робота');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -112,7 +112,7 @@ final class messagesTest extends TestCase
|
||||||
self::$core->delete();
|
self::$core->delete();
|
||||||
|
|
||||||
// Проверка
|
// Проверка
|
||||||
$this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота');
|
$this->assertEmpty(self::$core->read(self::$robot->id), 'Ошибка при деинициализации робота');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -145,13 +145,13 @@ final class messagesTest extends TestCase
|
||||||
public function testWriteTextWhenHeIsAlreadyWrited(): void
|
public function testWriteTextWhenHeIsAlreadyWrited(): void
|
||||||
{
|
{
|
||||||
// Запись текста
|
// Запись текста
|
||||||
$message = self::$robot->message()->text('text');
|
$message = self::$robot->message()->text('hello');
|
||||||
|
|
||||||
// Повторная запись текста
|
// Повторная запись текста
|
||||||
$message->text('text');
|
$message->text(' world');
|
||||||
|
|
||||||
// Проверка
|
// Проверка
|
||||||
$this->assertEquals('texttext', $message->text);
|
$this->assertSame('hello world', $message->text, );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -169,7 +169,7 @@ final class messagesTest extends TestCase
|
||||||
/**
|
/**
|
||||||
* @testdox Получение информации о сообщении
|
* @testdox Получение информации о сообщении
|
||||||
*/
|
*/
|
||||||
public function testgetById(): void
|
public function testGetById(): void
|
||||||
{
|
{
|
||||||
// Отправка сообщения
|
// Отправка сообщения
|
||||||
$id = self::$robot->key(self::$group_key)->message('Теста метода getByID')->send(self::$target_id);
|
$id = self::$robot->key(self::$group_key)->message('Теста метода getByID')->send(self::$target_id);
|
||||||
|
@ -203,7 +203,7 @@ final class messagesTest extends TestCase
|
||||||
$message = self::$robot->message()->attachments('Вложение');
|
$message = self::$robot->message()->attachments('Вложение');
|
||||||
|
|
||||||
// Проверка
|
// Проверка
|
||||||
$this->assertEquals(['Вложение'], $message->data);
|
$this->assertSame(['Вложение'], $message->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -4,11 +4,11 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
use hood\vk\core;
|
use mirzaev\vk\core;
|
||||||
use hood\vk\robots\robot;
|
use mirzaev\vk\robots\robot;
|
||||||
use hood\vk\tests\settings;
|
use mirzaev\vk\tests\settings;
|
||||||
|
|
||||||
use hood\accounts\vk as account;
|
use mirzaev\accounts\vk as account;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Фото
|
* @testdox Фото
|
|
@ -4,11 +4,11 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
use hood\vk\core;
|
use mirzaev\vk\core;
|
||||||
use hood\vk\robots\robot;
|
use mirzaev\vk\robots\robot;
|
||||||
use hood\vk\tests\settings;
|
use mirzaev\vk\tests\settings;
|
||||||
|
|
||||||
use hood\accounts\vk as account;
|
use mirzaev\accounts\vk as account;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Робот-группа
|
* @testdox Робот-группа
|
|
@ -4,11 +4,11 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
use hood\vk\core;
|
use mirzaev\vk\core;
|
||||||
use hood\vk\robots\robot;
|
use mirzaev\vk\robots\robot;
|
||||||
use hood\vk\tests\settings;
|
use mirzaev\vk\tests\settings;
|
||||||
|
|
||||||
use hood\accounts\vk as account;
|
use mirzaev\accounts\vk as account;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Робот-пользователь
|
* @testdox Робот-пользователь
|
|
@ -0,0 +1,88 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace mirzaev\vk\tests;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Настройки окружения для тестирования
|
||||||
|
*
|
||||||
|
* @todo Разгруппировать свойства и привести в понимаемый для тех кто только начал знакомиться с проектом вид
|
||||||
|
*/
|
||||||
|
trait settings
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string $path_account Путь до директории с данными аккаунтов
|
||||||
|
*/
|
||||||
|
protected static string $path_accounts = __DIR__ . '/accounts';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string $path_images Путь до директории с изображениями
|
||||||
|
*/
|
||||||
|
protected static string $path_images = __DIR__ . '/storage/images';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Идентификатор аккаунта
|
||||||
|
*/
|
||||||
|
protected static int $id = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Идентификатор вспомогательного аккаунта
|
||||||
|
*/
|
||||||
|
protected static int $target_id = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Домен вспомогательного аккаунта
|
||||||
|
*/
|
||||||
|
protected static string $target_domain = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Входной аккаунта (если не указан ключ)
|
||||||
|
*/
|
||||||
|
protected static string $login = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Пароль аккаунта (если не указан ключ)
|
||||||
|
*/
|
||||||
|
protected static string $password = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ключ аккаунта
|
||||||
|
*/
|
||||||
|
protected static string $key = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Идентификатор группы
|
||||||
|
*/
|
||||||
|
protected static int $group_id = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ключ группы
|
||||||
|
*/
|
||||||
|
protected static string $group_key = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Версия API
|
||||||
|
*/
|
||||||
|
protected static float $version = 5.124;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Идентификатор проекта
|
||||||
|
*/
|
||||||
|
protected static int $project_id = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ключ проекта
|
||||||
|
*/
|
||||||
|
protected static string $project_key = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Сервисный ключ проекта
|
||||||
|
*/
|
||||||
|
protected static string $project_service_key = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SSL-протокол
|
||||||
|
*/
|
||||||
|
protected static bool $ssl = false;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use hood\vk\core;
|
||||||
|
use hood\vk\api\settings;
|
||||||
|
|
||||||
|
require './vendor/autoload.php';
|
||||||
|
|
||||||
|
$core = core::init();
|
||||||
|
|
||||||
|
$robot = $core->group(12312)->key(1);
|
||||||
|
$robot = $core->group(12312)->key(1);
|
||||||
|
$robot = $core->group()->key(1);
|
||||||
|
$robot = $core->group()->key(1);
|
||||||
|
|
||||||
|
$settings = new settings($robot);
|
||||||
|
|
||||||
|
$settings['data']['test']['a'] = 2;
|
||||||
|
$settings['data'] = 2;
|
||||||
|
|
||||||
|
var_export($core->read());
|
Loading…
Reference in New Issue