Началр работы с переработкой

This commit is contained in:
RedHood
2020-07-10 01:17:26 +10:00
parent 64e03a380b
commit 8635fbb301
50 changed files with 7855 additions and 2594 deletions

94
sources/Robots/Group.php Normal file
View File

@@ -0,0 +1,94 @@
<?php
declare(strict_types=1);
namespace VK\Robots;
use VK\Browsers\BrowserAbstract;
use VK\Parsers\Curl;
use Exception;
use VK\API\LongPoll;
/**
* Робот: "Группа"
*
* Класс реализовывающий работу от лица группы ВКонтакте
*
* @package Robots
* @author Arsen Mirzaev
*/
class Group extends RobotAbstract
{
/**
* ВКонтакте: идентификатор
*
* @var string
*/
public int $id;
/**
* ВКонтакте: токен доступа
*
* @var string
*/
public string $token;
/**
* ВКонтакте: версия API
*
* @var float
*/
public float $version;
/**
* ВКонтакте: тип API
*
* @var string
*/
public string $api;
/**
* ВКонтакте: активатор мобильной версии
*
* @var bool
*/
//protected bool $mobile = false;
/**
* ВКонтакте: идентификатор капчи
*
* @var int
*/
//protected int $captcha;
public function __construct($name)
{
if (!isset($this->id)) $this->id = (int) $_ENV['DEFAULT_' . strtoupper($name) . '_ID'];
if (!isset($this->token)) $this->token = (string) $_ENV['DEFAULT_' . strtoupper($name) . '_TOKEN'];
if (!isset($this->version)) $this->version = (float) $_ENV['DEFAULT_API_VERSION'];
}
public function postMethod($method, $params = []): BrowserAbstract
{
$browser = __NAMESPACE__ . '\\Browsers\\' . ucfirst($_ENV['BROWSER_TYPE']);
return (new $browser)->post();
}
public function longpoll(...$params): LongPoll
{
return new LongPoll($this, $params);
}
public function callback()
{
}
protected function genToken(): string
{
return 'test';
}
protected function genTokenMobile(string $captcha_key, int $captcha_id): string
{
return 'test 2';
}
}

View File

@@ -0,0 +1,135 @@
<?php
declare(strict_types=1);
namespace VK\Robots;
use VK\Robots\RobotAbstract;
use VK\Browsers\BrowserAbstract;
use VK\Proxies\ProxyAbstract;
abstract class RobotAbstract
{
/**
* Идентификатор в регистре
*
* @var string
*/
private int $id_registry;
/**
* Используемый браузер
*
* @var BrowserAbstract
*/
protected BrowserAbstract $browser;
/**
* Прокси-сервер
*
* @var ProxyAbstract
*/
protected ProxyAbstract $proxy;
/**
* Обработчик капчи
*
* @var CaptchaAbstract
*/
protected CaptchaAbstract $captcha;
/**
* Установка идентификатора
*
* @return int
*/
public function setID(int $id): int
{
return $this->id_registry = $id;
}
/**
* Получение идентификатора
*
* @return int
*/
public function getID(): int
{
return $this->id;
}
/**
* Получение браузера
*
* @return int
*/
public function getBrowser(): BrowserAbstract
{
// return $this->browser;
return new \VK\Browsers\Curl;
}
/**
* Метод получения токена аккаунта
*
* @return string
*/
public function getToken($captcha_key = null, $captcha_id = null): string
{
if (!empty($_ENV['ACCOUNT_TOKEN'])) {
return $_ENV['ACCOUNT_TOKEN'];
} else if ($this->mobile) {
$this->token_access = $this->genTokenMobile($captcha_key, $this->captcha_id ?? $captcha_id);
} else {
$this->token_access = $this->genToken();
}
return $this->token_access;
}
abstract protected function genToken(): string;
abstract protected function genTokenMobile(string $captcha_key, int $captcha_id): string;
// /**
// * @param null $access_groups
// * @param bool $resend
// * @return mixed
// * @throws VkApiException
// */
// private function getTokenAccess($scope = null, $resend = false)
// {
// $get_url_token = Curl::getToken('https://oauth.vk.com/authorize?client_id=' . $_ENV['APP_ID'] .
// '&scope=' . $_ENV['ACCESS_GROUPS'] . ($resend ? '&revoke=1' : '') .
// '&response_type=token');
// echo 'https://oauth.vk.com/authorize?client_id=' . $_ENV['APP_ID'] .
// '&scope=' . $_ENV['ACCESS_GROUPS'] . ($resend ? '&revoke=1' : '') .
// '&response_type=token', PHP_EOL;
// if ($get_url_token['body'] !== false) {
// if (isset($get_url_token['header']['location'][0]))
// $url_token = $get_url_token['header']['location'][0];
// else {
// preg_match('!location.href = "(.*)"\+addr!s', $get_url_token['body'], $url_token);
// if (!isset($url_token[1])) {
// throw new VkApiException("Не получилось получить токен на этапе получения ссылки подтверждения");
// }
// $url_token = $url_token[1];
// }
// } else {
// echo 'жопа';
// die;
// }
// echo $url_token, PHP_EOL;
// die;
// $access_token_location = Curl::getToken($url_token)['header']['location'][0];
// if (preg_match("!access_token=(.*?)&!s", $access_token_location, $access_token) != 1)
// throw new Exception("Не удалось найти access_token в строке ридеректа, ошибка:" . Curl::getToken($access_token_location, null, false)['body']);
// echo $url_token, PHP_EOL;
// die;
// return $access_token[1];
// }
}

51
sources/Robots/User.php Normal file
View File

@@ -0,0 +1,51 @@
<?php
declare(strict_types=1);
namespace VK\Robots;
class User extends RobotAbstract
{
/**
* Токен авторизации
*/
public string $token;
/**
* Версия используемого API
*/
public float $version;
/**
* Конструктор робота категории: "Пользователь"
*
* Предназначен для работы от лица пользователя ВКонтакте
*
* @return void
*/
public function __construct() {
$this->auth();
}
/**
* Метод авторизации робота
*
* @return void
*/
public function auth(string $token, float $version)
{
if ($token instanceof auth) {
$this->auth = $token;
$this->version = $version;
$this->token = $this->auth->getAccessToken();
} else if (isset($also_version)) {
$this->auth = new Auth($token, $version);
$this->token = $this->auth->getAccessToken();
$this->version = $also_version;
} else {
$this->token = $token;
$this->version = $version;
}
$this->data = json_decode(file_get_contents('php://input'));
}
}