Перенос на php 8, Фото сообщение beta, Исправления

This commit is contained in:
Kostya Kalimagin 2021-01-20 23:00:12 +08:00
parent 615518a7b2
commit 5e718b6c41
8 changed files with 225 additions and 303 deletions

View File

@ -11,13 +11,13 @@ use hood\vk\core,
/**
* LongPoll
*
* @property string $key Ключ к серверу
* @property string $server Сервер
* @property string $ts Идентификатор последнего события
* $key Ключ к серверу
* $server Сервер
* $ts Идентификатор последнего события
*
* @method public function __construct(object $robot) Инициализация
* @method public function get(int $wait = 25) Получить события
* @method public function handle(callable $function, int $wait = 25) Обработать события
* public function __construct(object $robot) Инициализация
* public function get(int $wait = 25) Получить события
* public function handle(callable $function, int $wait = 25) Обработать события
*
* @see https://vk.com/dev/bots_longpoll
* @see https://vk.com/dev/groups.getLongPollServer
@ -34,8 +34,6 @@ final class longpoll
* Ключ к серверу
*
* @see $this->get()
*
* @var string
*/
private string $key;
@ -43,8 +41,6 @@ final class longpoll
* Сервер (URL)
*
* @see $this->get()
*
* @var string
*/
private string $server;
@ -54,27 +50,23 @@ final class longpoll
* От него отсчитываются новые, необработанные события
*
* @see $this->get()
*
* @var string
*/
private string $ts;
/**
* Инициализация
*
* @param robot $robot Робот
* $robot Робот
*/
public function __construct(private robot $robot)
{
// Инициализация робота
if (!isset($robot->id)) {
throw new Exception('Необходимо указать идентификатор ВКонтакте');
} else if (!isset($robot->key)) {
throw new Exception('Необходимо указать ключ для доступа к LongPoll');
} else if (!isset($robot->version)) {
throw new Exception('Необходимо указать версию используемого API ВКонтакте');
}
match (true) {
!isset($robot->id) => throw new Exception('Необходимо указать идентификатор ВКонтакте'),
!isset($robot->key) => throw new Exception('Необходимо указать ключ для доступа к LongPoll'),
!isset($robot->version) => throw new Exception('Необходимо указать версию используемого API ВКонтакте'),
default => null
};
// Остановка процессов-дубликатов
if (!file_exists(core::init()->path_temp)) {
@ -92,10 +84,8 @@ final class longpoll
*
* Полная настройка и активация LongPoll
*
* @param bool $status = true Активация или деактивация
* @param string ...$params Изменяемые параметры
*
* @return array
* $status = true Активация или деактивация
* ...$params Изменяемые параметры
*/
public function post(bool $status = true, string ...$params): array
{
@ -184,9 +174,7 @@ final class longpoll
/**
* Получить события
*
* @param int $wait Время ожидания новых событий (в секундах)
*
* @return array
* $wait Время ожидания новых событий (в секундах)
*/
public function get(int $wait = 25): array
{
@ -222,10 +210,8 @@ final class longpoll
*
* Получает и обрабатывает события
*
* @param callable $function Обработка
* @param int $wait Время ожидания новых событий (в секундах)
*
* @return array
* $function Обработка
* $wait Время ожидания новых событий (в секундах)
*/
public function handle(callable $function, int $wait = 25): array
{
@ -269,7 +255,7 @@ final class longpoll
public function __destruct()
{
if (file_exists($lock = core::init()->path['temp'] . '/' . $this->robot->id . '_' . (int) $this->robot->session . '.longpoll')) {
if (file_exists($lock = core::init()->path_temp . '/' . $this->robot->id . '_' . (int) $this->robot->session . '.longpoll')) {
// Если существует файл-блокировщик, то удалить его
unlink($lock);
}

View File

@ -11,7 +11,7 @@ use hood\vk\robots\robot,
/**
* Сообщение
*
* @method public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение
* public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение
*
* @see https://vk.com/dev/messages.send
* @see https://vk.com/dev/messages.getById
@ -24,7 +24,7 @@ use hood\vk\robots\robot,
final class messages extends method
{
/**
* @param int $mode Режим отправки
* $mode Режим отправки
*/
protected int $mode = 1;
@ -33,10 +33,10 @@ final class messages extends method
*
* Если переданы все параметры, то сразу отправляет
*
* @param robot $robot Робот
* @param string $message Текст
* @param int|string|array|null $destination Получатель
* @param array $attachments Вложения
* $robot Робот
* $message Текст
* $destination Получатель
* $attachments Вложения
*
* @return self
*/
@ -53,11 +53,11 @@ final class messages extends method
/**
* Отправить сообщение
*
* @param int|string|array $destination Получатель
* $destination Получатель
*
* @see https://vk.com/dev/messages.send
*
* @return array Ответ сервера
* Ответ сервера
*/
public function send(int|string|array $destination): array
{
@ -99,7 +99,8 @@ final class messages extends method
// Фильтрация вложений
$forward_messages = [];
foreach ($this->attachments as &$attachment) {
if (iconv_substr(str: $attachment, offset: 0, length: 7, charset: "UTF-8") === 'message') {
//var_dump($attachment);
if (iconv_substr($attachment, 0, 7, "UTF-8") === 'message') {
// Если среди вложений найдено сообщение для пересылки
$forward_messages[] = $attachment;
unset($attachment);
@ -108,12 +109,15 @@ final class messages extends method
if (!empty($forward_messages)) {
// Если есть пересылаемые сообщения
$settings['forward_messages'] = implode(glue: ',', pieces: $forward_messages);
$settings['forward_messages'] = implode(',', $forward_messages);
}
if (!empty($attachments)) {
//var_dump($attachments);
if (!empty($this->attachments)) {
// Если есть вложения
$settings['attachment'] = implode(glue: ',', pieces: $attachments);
//echo 'lol';
$settings['attachment'] = implode(',', $this->attachments);
//var_dump($settings['attachment']);
}
// Запрос
@ -158,7 +162,7 @@ final class messages extends method
/**
* Получить информацию о сообщении
*
* @return array Информация о сообщении
* Информация о сообщении
*/
public function info(): array
{
@ -167,7 +171,7 @@ final class messages extends method
// Робот-группа
$this->robot instanceof group => $settings['access_token'] = $this->robot->key,
// Робот-пользователь
$this->robot instanceof User => $settings['access_token'] = $this->robot->key
$this->robot instanceof User => $settings['access_token'] = $this->robot->key,
};
// Цель отправки

View File

@ -9,10 +9,10 @@ use hood\vk\robots\robot;
/**
* Абстракция метода API
*
* @method protected static put(string $url, ...$params) Создать
* @method protected static post(string $url, ...$params) Изменить
* @method protected static get(string $url, ...$params) Получить
* @method protected static delete(string $url, ...$params) Удалить
* protected static put(string $url, ...$params) Создать
* protected static post(string $url, ...$params) Изменить
* protected static get(string $url, ...$params) Получить
* protected static delete(string $url, ...$params) Удалить
*
* @package hood\vk\api\methods
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
@ -22,7 +22,7 @@ abstract class method
/**
* Создать
*
* @return array Ответ сервера
* Ответ сервера
*/
public static function put(): array
{
@ -32,7 +32,7 @@ abstract class method
/**
* Изменить
*
* @return array Ответ сервера
* Ответ сервера
*/
public static function post(): array
{
@ -42,7 +42,7 @@ abstract class method
/**
* Получить
*
* @return array Ответ сервера
* Ответ сервера
*/
public static function get(): array
{
@ -52,7 +52,7 @@ abstract class method
/**
* Удалить
*
* @return array Ответ сервера
* Ответ сервера
*/
public static function delete(): array
{

View File

@ -14,7 +14,7 @@ use Exception;
/**
* Фотографии (изображения)
*
* @method public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение
* public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение
*
* @see https://vk.com/dev/photos.getUploadServer
* @see https://vk.com/dev/messages.getById
@ -24,23 +24,28 @@ use Exception;
*
* @todo Добавить обработку ошибок ($request['errors];)
*/
final class photos
final class photos extends method
{
/**
* $url
*/
protected $url;
/**
* Сохранить
*
* @param robot $robot Робот
* @param int $album_id Альбом
* @param int|null $group_id Группа
* @param string|null $caption Описание
* @param float|null $latitude Географическая широта (-90, 90)
* @param float|null $longitude Географическая долгота (-180, 180)
* $robot Робот
* $album_id Альбом
* $group_id Группа
* $caption Описание
* $latitude Географическая широта (-90, 90)
* $longitude Географическая долгота (-180, 180)
*
* @see https://vk.com/dev/photos.save
*
* @return array|null Ответ сервера
*/
public static function save(robot $robot, int $album_id, array $images,string $upload_url = null, string|null $caption = null, int|null $group_id = null, float|null $latitude = null, float|null $longitude = null): ?array
public static function save(robot $robot, int $album_id, array $images, string $upload_url = null, string|null $caption = null, int|null $group_id = null, float|null $latitude = null, float|null $longitude = null): ?array
{
if (isset($robot->account)) {
// Если инициализирован аккаунт
@ -98,40 +103,28 @@ final class photos
* Загрузить
*
* @param Type $var
* @return void
*/
public static function upload(string ...$images)
public static function upload(string ...$images): void
{
if (count($images) > 5) {
throw new Exception('Запрещено отправлять более 5 фотографий');
}
}
/**
* загрузить фото сообщение
* загрузить
*/
public static function uploadMessage(robot $robot, string $upload_url, string ...$images)
{
return $robot->browser->api($upload_url, ...$images);
}
/**
* Отправить фото сообщение
*/
public function sendPhoto(robot $robot, string $message = '', $destination, $photo)
{
$robot->message(robot: $robot,message: $message, destination: $destination,attachments: $photo);
}
/**
* Получить сервер для загрузки изображений
*
* @param robot $robot Робот
* @param int|null $album_id Альбом
* @param int|group|null $group_id Группа
* $robot Робот
* $album_id Альбом
* $group_id Группа
*
* @see https://vk.com/dev/photos.getUploadServer
*
@ -171,17 +164,17 @@ final class photos
/**
* Получить альбомы
*
* @param robot $robot Робот
* @param array $album_ids = null Идентификаторы альбомов
* @param int $offset = null Смещение для выборки подмножества
* @param int $count = null Количество для возврата
* @param bool $need_system = null Активация возврата системных альбомов
* @param bool $need_covers = null Активация возврата поля с обложкой альбома
* @param bool $photo_sizes = null Активация специального формата размеров фотографий
* $robot Робот
* $album_ids = null Идентификаторы альбомов
* $offset = null Смещение для выборки подмножества
* $count = null Количество для возврата
* $need_system = null Активация возврата системных альбомов
* $need_covers = null Активация возврата поля с обложкой альбома
* $photo_sizes = null Активация специального формата размеров фотографий
*
* @see https://vk.com/dev/photos.getUploadServer
*
* @return array Ответ сервера
* Ответ сервера
*/
public static function getAlbums(robot $robot, array $album_ids = null, int $offset = null, int $count = null, bool $need_system = null, bool $need_covers = null, bool $photo_sizes = null): array
{
@ -209,8 +202,57 @@ final class photos
}
// Запрос
$request = $robot->browser()->api('photos.getUploadServer', $settings);
$request = $robot->browser->request('POST', 'photos.getUploadServer', $settings)->getBody()->getContents();
return (array) $request;
}
/**
* загрузить фото и получить его id
*
* $robot робот
*
* $img фото
*/
public function sex(robot $robot, $img)
{
if (!isset($this->url)) {
// Получить адрес сервера для загрузки фотографии в личное сообщение
$this->url = json_decode($robot->browser->request('POST', 'photos.getMessagesUploadServer', [
'form_params' => [
'group_id' => $robot->id,
'v' => $robot->version,
'access_token' => $robot->key,
'peer_id' => 0
]
])->getBody()->getContents())->response->upload_url;
}
//загрузить
$response = json_decode($robot->browser->request('POST', $this->url, [
'multipart' => [
[
'Content-type' => 'multipart/form-data',
'name' => 'photo',
'contents' => $img
]
]
])->getBody()->getContents());
//сохранить
$response = json_decode($robot->browser->request('POST', 'photos.saveMessagesPhoto', [
'form_params' => [
'group_id' => $robot->id,
'v' => $robot->version,
'access_token' => $robot->key,
'server' => $response->server,
'photo' => $response->photo,
'hash' => $response->hash
]
])->getBody()->getContents());
return 'photo' . $response->response[0]->owner_id . '_' . $response->response[0]->id;
}
}

View File

@ -12,15 +12,15 @@ use hood\vk\loggers\jasmo,
/**
* Ядро
*
* @property-read int $robots Количество роботов
* @property string $timezone Временная зона (журналирование)
* @property array $path Пути (архитектура проекта)
* $robots Количество роботов
* $timezone Временная зона (журналирование)
* $path Пути (архитектура проекта)
*
* @method protected static function __construct() Инициализация
* @method public static function init() Запуск инициализации или получение инстанции
* @method public public function build() Сборщик
* @method public function set($id, $value) Запись в реестр
* @method public function get($id = null) Чтение из реестра
* protected static function __construct() Инициализация
* public static function init() Запуск инициализации или получение инстанции
* public public function build() Сборщик
* public function set($id, $value) Запись в реестр
* public function get($id = null) Чтение из реестра
*
* @package VK
* @author Арсен Мирзаев <red@hood.su>
@ -31,15 +31,11 @@ final class core
/**
* Счётчик роботов
*
* @var int
*/
private int $robots = 0;
/**
* Реестр роботов
*
* @var array
*/
private array $registry = [];
@ -47,38 +43,28 @@ final class core
* Временная зона
*
* Используется в логировании
*
* @var string
*/
private string $timezone;
/**
* Путь до корня проекта
*
* @var string
*/
private string $path_root;
/**
* Путь до папки журналов
*
* @var string
*/
private string $path_logs;
/**
* Путь до временной папки
*
* @var string
*/
private string $path_temp;
/**
* Журналист
*
* @param string $file Файл для журналирования
*
* @return self
* $file Файл для журналирования
*
* @todo Добавить установку иного журналиста по спецификации PSR-3
* @todo Более гибкое журналирование
@ -94,12 +80,10 @@ final class core
/**
* Записать в реестр
*
* @param int $id
* @param robot $robot
* $id Идентификатор
* $robot робот
*
* @see hood\vk\traits\registry Модификация метода
*
* @return void
*/
public function set(int $id, robot $robot): void
{
@ -117,14 +101,12 @@ final class core
*
* Если не передать идентификатор, то вернёт все значения
*
* @param int|null $id Идентификатор
* @param int|null $session Сессия
* $id Идентификатор
* $session Сессия
*
* @see hood\vk\traits\registry Модификация метода
*
* @return mixed
*/
public function get(int|null $id = null, int|null $session = null)
public function get(int|null $id = null, int|null $session = null): mixed
{
if (isset($id) && array_key_exists($id, $this->registry)) {
// Робот передан и найден
@ -140,12 +122,10 @@ final class core
/**
* Удалить из реестра
*
* @param int|null $id Идентификатор
* @param int|null $session Сессия
* $id Идентификатор
* $session Сессия
*
* @see hood\vk\traits\registry Модификация метода
*
* @return void
*/
public function delete(int|null $id = null, int|null $session = null): void
{
@ -188,64 +168,35 @@ final class core
/**
* Записать свойство
*
* @param mixed $name Название
* @param mixed $value Значение
*
* @return void
* $name Название
* $value Значение
*/
public function __set($name, $value): void
public function __set(mixed $name, mixed $value): void
{
match ($name) {
'timezone' => match (true) {
!isset($this->timezone) => $this->timezone = $value,
default => throw new Exception('Запрещено переопределять часовой пояс')
},
'path_root' => match (true) {
!isset($this->path_root) => $this->path_root = $value,
default => throw new Exception('Запрещено переопределять корневой каталог')
},
'path_logs' => match (true) {
!isset($this->path_logs) => $this->path_logs = $value,
default => throw new Exception('Запрещено переопределять каталог журналов')
},
'path_temp' => match (true) {
!isset($this->path_temp) => $this->path_temp = $value,
default => throw new Exception('Запрещено переопределять каталог временных файлов')
},
'timezone' => !isset($this->timezone) ? $this->timezone = $value : throw new Exception('Запрещено переопределять часовой пояс'),
'path_root' => !isset($this->path_root) ? $this->path_root = $value : throw new Exception('Запрещено переопределять корневой каталог'),
'path_logs' => !isset($this->path_logs) ? $this->path_logs = $value : throw new Exception('Запрещено переопределять каталог журналов'),
'path_temp' => !isset($this->path_temp) ? $this->path_temp = $value : throw new Exception('Запрещено переопределять каталог временных файлов')
};
}
/**
* Прочитать свойство
*
* @param mixed $name Название
* Значение по умолчанию, есле не задано
*
* @return mixed
* $name Название
*/
public function __get($name)
public function __get(mixed $name): mixed
{
return match ($name) {
'robots' => $this->robots,
'timezone' => match (true) {
// Значение по умолчанию
!isset($this->timezone) => $this->timezone = 'Europe/Moscow',
default => $this->timezone
},
'path_root' => match (true) {
// Значение по умолчанию
!isset($this->path_root) => $this->path_root = dirname(__DIR__),
default => $this->path_root
},
'path_logs' => match (true) {
// Значение по умолчанию
!isset($this->path_logs) => $this->path_logs = $this->path_root . '/logs',
default => $this->path_logs
},
'path_temp' => match (true) {
// Значение по умолчанию
!isset($this->path_temp) => $this->path_temp = $this->path_root . '/temp',
default => $this->path_temp
}
'robots' => $this->robots,
'timezone' => !isset($this->timezone) ? $this->timezone = 'Europe/Moscow' : $this->timezone,
'path_root' => !isset($this->path_root) ? $this->path_root = dirname(__DIR__) : $this->path_root,
'path_logs' => !isset($this->path_logs) ? $this->path_logs = $this->path_root . '/logs' : $this->path_logs,
'path_temp' => !isset($this->path_temp) ? $this->path_root . '/temp' : $this->path_temp,
default => null
};
}
@ -255,10 +206,8 @@ final class core
* Ищет класс описывающий робота,
* создаёт и возвращает его объект
*
* @param string $method Метод
* @param array $params Параметры
*
* @return robot
* $method Метод
* $params Параметры
*/
public function __call(string $method, array $params): robot
{

View File

@ -13,33 +13,31 @@ use Throwable,
/**
* Робот-группа
*
* @property longpoll $longpoll LongPoll-сессия
* $longpoll LongPoll-сессия
*
* @method public function __set($name, $value) Запись свойства
* @method public function __get($name) Чтение свойства
* @method public function __isset($name) Проверка на инициализированность свойства
* public function __set($name, $value) Запись свойства
* public function __get($name) Чтение свойства
* public function __isset($name) Проверка на инициализированность свойства
*
* @package hood\vk\robots
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
* hood\vk\robots
* Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
*/
final class group extends robot
{
/**
* @var longpoll $longpoll LongPoll-сессия
* $longpoll LongPoll-сессия
*/
protected longpoll $longpoll;
/**
* Запись свойства
*
* @param string $name Название
* @param mixed $value Значение
* $name Название
* $value Значение
*
* @see hood\vk\robots\robot Наследуемый метод
*
* @return void
*/
public function __set(string $name, $value): void
public function __set(string $name, mixed $value): void
{
try {
parent::__set($name, $value);
@ -47,26 +45,20 @@ final class group extends robot
// Если свойство не найдено в родительском методе
match ($name) {
'longpoll' => match (true) {
$value instanceof LongPoll => $this->longpoll = $value,
default => $this->longpoll = new LongPoll($this)
}
'longpoll' => $value instanceof LongPoll ? $this->longpoll = $value : $this->longpoll = new LongPoll($this),
default => throw new Exception($e->getMessage(), $e->getCode(), $e->getPrevious())
};
throw new Exception($e->getMessage(), $e->getCode(), $e->getPrevious());
}
}
/**
* Чтение свойства
*
* @param string $name Название
* $name Название
*
* @see hood\vk\robots\robot Наследуемый метод
*
* @return mixed
*/
public function __get(string $name)
public function __get(string $name): mixed
{
try {
return parent::__get($name);
@ -87,7 +79,7 @@ final class group extends robot
/**
* Проверка на инициализированность свойства
*
* @param string $name Название
* $name Название
*
* @return mixed
*/

View File

@ -18,26 +18,26 @@ use hood\accounts\vk as account;
/**
* Робот
*
* @property-read int $id Идентификатор
* @property-read int $session Сессия
* @property string $key Ключ
* @property float $version Версия API
* @property account $account Аккаунт
* @property browser $browser Браузер
* @property proxy $proxy Прокси
* @property captcha $captcha Обработчик капчи
* $id Идентификатор
* $session Сессия
* $key Ключ
* $version Версия API
* $account Аккаунт
* $browser Браузер
* $proxy Прокси
* $captcha Обработчик капчи
*
* @property int $messages_mode Режим отправки сообщений
* $messages_mode Режим отправки сообщений
*
* @method public function __construct(int $id = null, float $version = null) Конструктор
* @method public function key(string $key) Инициализация ключа
* @method public function account(account $account) Инициализация аккаунта
* @method public function __set($name, $value) Запись свойства
* @method public function __get($name) Чтение свойства
* @method public function __isset($name) Проверка на инициализированность свойства
* @method public function __call(string $method, array $params) Вызов метода
* @method public static function __callStatic(string $method, array $params) Вызов статического метода
* @method public function __toString() Конвертация в строку
* public function __construct(int $id = null, float $version = null) Конструктор
* public function key(string $key) Инициализация ключа
* public function account(account $account) Инициализация аккаунта
* public function __set($name, $value) Запись свойства
* public function __get($name) Чтение свойства
* public function __isset($name) Проверка на инициализированность свойства
* public function __call(string $method, array $params) Вызов метода
* public static function __callStatic(string $method, array $params) Вызов статического метода
* public function __toString() Конвертация в строку
*
* @package hood\vk\robots
* @author Arsen Mirzaev Tatyano-Muradovich <red@hood.su>
@ -45,42 +45,42 @@ use hood\accounts\vk as account;
abstract class robot
{
/**
* @var int Идентификатор
* Идентификатор
*/
protected int $id;
/**
* @var int Сессия
* Сессия
*/
protected int $session;
/**
* @var string Ключ
* Ключ
*/
protected string $key;
/**
* @var float Версия API
* Версия API
*/
protected float $version = 5.124;
/**
* @var string Аккаунт
* Аккаунт
*/
private account $account;
/**
* @var proxy Прокси
* Прокси
*/
protected proxy $proxy;
/**
* @var captcha Обработчик капчи
* Обработчик капчи
*/
protected captcha $captcha;
/**
* @var int $messages_mode Режим отправки сообщений
* $messages_mode Режим отправки сообщений
*/
protected int $messages_mode = 1;
@ -88,8 +88,8 @@ abstract class robot
/**
* Конструктор
*
* @param int|null $id Идентификатор
* @param float|null $version Версия API
* $id Идентификатор
* $version Версия API
*/
public function __construct(int|null $id = null, float|null $version = null)
{
@ -114,9 +114,7 @@ abstract class robot
/**
* Инициализация ключа
*
* @param string $key Ключ
*
* @return self
* $key Ключ
*/
public function key(string $key): self
{
@ -132,9 +130,7 @@ abstract class robot
/**
* Инициализация аккаунта
*
* @param account $account Аккаунт
*
* @return self
* $account Аккаунт
*/
public function account(account $account): self
{
@ -150,9 +146,7 @@ abstract class robot
/**
* Инициализация прокси
*
* @param proxy $proxy Прокси
*
* @return self
* $proxy Прокси
*/
public function proxy(proxy $proxy): self
{
@ -164,9 +158,7 @@ abstract class robot
/**
* Инициализация обработчика капчи
*
* @param captcha $captcha Обработчик капчи
*
* @return self
* $captcha Обработчик капчи
*/
public function captcha(captcha $captcha): self
{
@ -178,38 +170,18 @@ abstract class robot
/**
* Записать свойство
*
* @param string $name Название
* @param mixed $value Значение
*
* @return void
* $name Название
* $value Значение
*/
public function __set(string $name, $value): void
public function __set(string $name, mixed $value): void
{
match ($name) {
'id' => match (true) {
!isset($this->id) => $this->id = (int) $value,
default => throw new Exception('Запрещено перезаписывать идентификатор')
},
'session' => match (true) {
!isset($this->session) => $this->session = (int) $value,
default => throw new Exception('Запрещено перезаписывать сессию')
},
'key' => match (true) {
!isset($this->key) => $this->key = (string) $value,
default => throw new Exception('Запрещено перезаписывать ключ')
},
'version' => match (true) {
!isset($this->version) => $this->version = (float) $value,
default => throw new Exception('Запрещено перезаписывать версию API')
},
'account' => match (true) {
!isset($this->account) && $value instanceof account => $this->account = $value,
default => throw new Exception('Запрещено перезаписывать аккаунт')
},
'browser' => match (true) {
!isset($this->browser) && $value instanceof browser => $this->browser = $value,
default => throw new Exception('Запрещено перезаписывать браузер')
},
'id' => !isset($this->id) ? $this->id = (int) $value : throw new Exception('Запрещено перезаписывать идентификатор'),
'session' => !isset($this->session) ? $this->session = (int) $value : throw new Exception('Запрещено перезаписывать сессию'),
'key' => !isset($this->key) ? $this->key = (string) $value : throw new Exception('Запрещено перезаписывать ключ'),
'version' => !isset($this->version) ? $this->version = (float) $value : throw new Exception('Запрещено перезаписывать версию API'),
'account' => !isset($this->account) && $value instanceof account ? $this->account = $value : throw new Exception('Запрещено перезаписывать аккаунт'),
'browser' => !isset($this->browser) && $value instanceof browser ? $this->browser = $value : throw new Exception('Запрещено перезаписывать браузер'),
'proxy' => $this->proxy = $value,
'captcha' => $this->captcha = $value,
'messages_new' => $this->messages_new = (int) $value,
@ -221,33 +193,18 @@ abstract class robot
/**
* Прочитать свойство
*
* @param string $name Название
* $name Название
*
* @return mixed
*/
public function __get(string $name)
{
return match ($name) {
'id' => match (true) {
isset($this->id) => $this->id,
default => throw new Exception('Идентификатор не инициализирован')
},
'session' => match (true) {
isset($this->session) => $this->session,
default => throw new Exception('Сессия не инициализирована')
},
'key' => match (true) {
isset($this->key) => $this->key,
default => throw new Exception('ключ не инициализирован')
},
'version' => match (true) {
isset($this->version) => $this->version,
default => throw new Exception('Версия не инициализирована')
},
'account' => match (true) {
isset($this->account) => $this->account,
default => throw new Exception('Аккаунт не инициализирован')
},
'id' => isset($this->id) ? $this->id : throw new Exception('Идентификатор не инициализирован'),
'session' => isset($this->session) ? $this->session : throw new Exception('Сессия не инициализирована'),
'key' => isset($this->key) ? $this->key : throw new Exception('Ключ не инициализирован'),
'version' => isset($this->version) ? $this->version : throw new Exception('Версия не инициализирована'),
'account' => isset($this->account) ? $this->account : throw new Exception('Аккаунт не инициализирован'),
'browser' => $this->browser ?? $this->browser = new browser([
'base_uri' => 'https://api.vk.com/method/',
'cookies' => true
@ -263,7 +220,7 @@ abstract class robot
/**
* Проверить свойство на инициализированность
*
* @param string $name Название
* $name Название
*
* @return mixed
*/
@ -289,10 +246,8 @@ abstract class robot
* Ищет класс описывающий метод API ВКонтакте,
* создаёт и возвращает его объект
*
* @param string $method Метод
* @param array $params Параметры
*
* @return method
* $method Метод
* $params Параметры
*/
public function __call(string $method, array $params): method
{
@ -310,10 +265,8 @@ abstract class robot
* Ищет класс описывающий метод API ВКонтакте,
* создаёт и возвращает его объект
*
* @param string $method Метод
* @param array $params Параметры
*
* @return method
* $method Метод
* $params Параметры
*/
public static function __callStatic(string $method, array $params): method
{
@ -326,8 +279,6 @@ abstract class robot
/**
* Конвертировать в строку
*
* @return string
*/
public function __toString(): string
{

View File

@ -27,8 +27,6 @@ trait singleton
/**
* Инициализация
*
* @return self
*/
public static function init(): self
{