Какое-то старое говно не помню
This commit is contained in:
parent
64a88c9f4e
commit
07ace039c9
|
@ -14,11 +14,6 @@
|
|||
"email": "red@hood.su",
|
||||
"homepage": "https://hood.su/mirzaev",
|
||||
"role": "Programmer"
|
||||
},
|
||||
{
|
||||
"name": "Konstantin Tarashchansky Eleno-Borisovich",
|
||||
"homepage": "https://hood.su/flower_studios",
|
||||
"role": "Programmer"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||
namespace mirzaev\vk\api;
|
||||
|
||||
use Exception;
|
||||
|
||||
use mirzaev\vk\core,
|
||||
mirzaev\vk\robots\robot;
|
||||
|
||||
|
|
|
@ -45,13 +45,13 @@ final class messages extends method
|
|||
* Конструктор
|
||||
*
|
||||
* @param robot $robot Робот
|
||||
* @param int|string|array|null $destination Получатель
|
||||
* @param string|null $text Текст
|
||||
* @param int|string|array $destination = null
|
||||
*/
|
||||
public function __construct(
|
||||
protected robot $robot,
|
||||
protected string|null $text = null,
|
||||
int|string|array $destination = null
|
||||
int|string|array|null $destination = null,
|
||||
protected string|null $text = null
|
||||
) {
|
||||
if (isset($this->text, $destination)) {
|
||||
// Быстрая отправка
|
||||
|
@ -106,15 +106,15 @@ final class messages extends method
|
|||
/**
|
||||
* Отправить сообщение
|
||||
*
|
||||
* @param int|string|array $destination Получатель
|
||||
*
|
||||
* @see https://vk.com/dev/messages.send
|
||||
*
|
||||
* @return array Ответ сервера
|
||||
* @param int|string|array|null $destination Получатель
|
||||
*
|
||||
* @return int|array Идентификатор успешно отправленного сообщения или ответ сервера (подразумевается ошибка)
|
||||
*
|
||||
* @todo Написать обработчик ошибок возвращаемых ВКонтакте
|
||||
*/
|
||||
public function send(int|string|array $destination): array
|
||||
public function send(int|string|array|null $destination): int|array
|
||||
{
|
||||
// Идентификатор
|
||||
$random_id = time();
|
||||
|
@ -128,29 +128,32 @@ final class messages extends method
|
|||
$this->robot->api->reinit();
|
||||
|
||||
// Цель отправки
|
||||
$this->robot->api->chooseDestination($destination);
|
||||
$this->robot->api->destination($destination);
|
||||
|
||||
// Идентификатор сообщения
|
||||
// Инициализация идентификатора (защита от повторных отправок) в настройках API
|
||||
$this->robot->api['random_id'] = $random_id;
|
||||
|
||||
// Текст
|
||||
// Инициализация текста в настройках API
|
||||
$this->robot->api['message'] = $this->text;
|
||||
|
||||
// Пересылаемые сообщения
|
||||
if (!empty($this->forwardMessages)) {
|
||||
|
||||
// Инициализация пересылаемых сообщений в настройках API
|
||||
$this->robot->api['forward_messages'] = implode(',', $this->forwardMessages);
|
||||
}
|
||||
|
||||
// Ответные сообщения
|
||||
if (isset($this->ReplyMessage)) {
|
||||
|
||||
// Инициализация идентификатора сообщения на которое обрабатывается ответ в настройках API
|
||||
$this->robot->api['reply_to'] = $this->ReplyMessage;
|
||||
}
|
||||
|
||||
// Вложения
|
||||
if ( isset($this->data) && $this->__get('data') !== []) { // !empty($this->data->data) почемуто не работает
|
||||
if (isset($this->data) && $this->__get('data') !== []) { // !empty($this->data->data) почемуто не работает
|
||||
|
||||
// Инициализация вложений в настройках API
|
||||
$this->robot->api['attachment'] = implode(',', $this->__get('data'));
|
||||
}
|
||||
|
||||
|
|
|
@ -4,12 +4,12 @@ declare(strict_types=1);
|
|||
|
||||
namespace mirzaev\vk\api;
|
||||
|
||||
use mirzaev\vk\robots\robot;
|
||||
|
||||
use Throwable;
|
||||
use Exception;
|
||||
use ArrayAccess;
|
||||
|
||||
use mirzaev\vk\robots\robot;
|
||||
|
||||
/**
|
||||
* Настройки соединения с API
|
||||
*
|
||||
|
@ -79,19 +79,52 @@ class settings implements ArrayAccess
|
|||
/**
|
||||
* Реинициализация
|
||||
*
|
||||
* @var float $version Версия API (переопределять не рекомендуется)
|
||||
* @param bool $purge Полная очистка
|
||||
*/
|
||||
public function reinit(string $version = null): self
|
||||
public function reinit(bool $purge = false): self
|
||||
{
|
||||
// Буфер
|
||||
$version = $version ?? $this->settings['v'] ?? null;
|
||||
|
||||
// Деинициализация
|
||||
$this->settings = [];
|
||||
|
||||
// Инициализация
|
||||
// Реинициализация
|
||||
try {
|
||||
$this->_init($version);
|
||||
if ($purge) {
|
||||
// Полная очистка
|
||||
|
||||
// Очистка
|
||||
$this->settings = [];
|
||||
} else {
|
||||
// Инициализация буфера
|
||||
$buffer = [];
|
||||
|
||||
if (isset($this->settings['v'])) {
|
||||
// Найдена версия API (подразумевается использование робота-группы)
|
||||
|
||||
// Запись в буфер
|
||||
$buffer['v'] = $this->settings['v'];
|
||||
}
|
||||
|
||||
if (isset($this->settings['access_token'])) {
|
||||
// Найден ключ группы (подразумевается использование робота-группы)
|
||||
|
||||
// Запись в буфер
|
||||
$buffer['access_token'] = $this->settings['access_token'];
|
||||
}
|
||||
|
||||
if (isset($this->settings['group_id'])) {
|
||||
// Найден идентификатор группы (подразумевается использование робота-группы)
|
||||
|
||||
// Запись в буфер
|
||||
$buffer['group_id'] = $this->settings['group_id'];
|
||||
}
|
||||
|
||||
if (isset($this->settings['user_id'])) {
|
||||
// Найден идентификатор пользователя (подразумевается использование робота-пользователя)
|
||||
|
||||
// Запись в буфер
|
||||
$buffer['user_id'] = $this->settings['user_id'];
|
||||
}
|
||||
|
||||
// Перенос данных из буфера
|
||||
$this->settings = $buffer;
|
||||
}
|
||||
} catch (Throwable $t) {
|
||||
throw new Exception('Не удалось инициализировать API', 500, $t->getPrevious());
|
||||
}
|
||||
|
@ -106,9 +139,6 @@ class settings implements ArrayAccess
|
|||
*/
|
||||
protected function _init(string $version = self::VK_API_VERSION_DEFAULT): self
|
||||
{
|
||||
// Ключ
|
||||
$this->settings['access_token'] = $this->robot->key;
|
||||
|
||||
// Версия API
|
||||
$this->settings['v'] = $version;
|
||||
|
||||
|
@ -116,7 +146,7 @@ class settings implements ArrayAccess
|
|||
}
|
||||
|
||||
/**
|
||||
* Определить и записать получателя
|
||||
* Инициализация получателя
|
||||
*
|
||||
* @see mirzaev\vk\api\methods\messages Сообщения
|
||||
*/
|
||||
|
|
|
@ -8,7 +8,7 @@ use mirzaev\vk\robots\robot;
|
|||
use mirzaev\vk\traits\singleton;
|
||||
use mirzaev\vk\loggers\jasmo;
|
||||
|
||||
use Exception;
|
||||
use exception;
|
||||
|
||||
/**
|
||||
* Ядро
|
||||
|
@ -95,7 +95,7 @@ final class core
|
|||
// Инициализация уникального идентификатора сессии
|
||||
|
||||
$session = count($this->read($id));
|
||||
} catch (Exception $e) {
|
||||
} catch (exception $e) {
|
||||
if ($e->getCode() === 404) {
|
||||
// Робота или сессии не существует
|
||||
|
||||
|
@ -139,13 +139,13 @@ final class core
|
|||
return $this->registry[$id][$session];
|
||||
}
|
||||
|
||||
throw new Exception("Сессия $session робота с идентификатором $id не найдена", 404);
|
||||
throw new exception("Сессия $session робота с идентификатором $id не найдена", 404);
|
||||
}
|
||||
|
||||
return $this->registry[$id];
|
||||
} else {
|
||||
|
||||
throw new Exception("Робот с идентификатором $id не найден", 404);
|
||||
throw new exception("Робот с идентификатором $id не найден", 404);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -185,7 +185,7 @@ final class core
|
|||
return;
|
||||
}
|
||||
|
||||
throw new Exception("Сессия $session робота с идентификатором $id не найдена", 404);
|
||||
throw new exception("Сессия $session робота с идентификатором $id не найдена", 404);
|
||||
}
|
||||
|
||||
// Вычитание из счётчика количества сессий робота
|
||||
|
@ -197,7 +197,7 @@ final class core
|
|||
return;
|
||||
}
|
||||
|
||||
throw new Exception("Робот с идентификатором $id не найден", 404);
|
||||
throw new exception("Робот с идентификатором $id не найден", 404);
|
||||
}
|
||||
|
||||
// Полная очистка
|
||||
|
@ -207,31 +207,32 @@ final class core
|
|||
/**
|
||||
* Записать свойство
|
||||
*
|
||||
* @param mixed $name Название
|
||||
* @param string $name Название
|
||||
* @param mixed $value Значение
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __set(mixed $name, mixed $value): void
|
||||
public function __set(string $name, mixed $value): void
|
||||
{
|
||||
match ($name) {
|
||||
'timezone' => !isset($this->timezone) ? $this->timezone = $value : throw new Exception('Запрещено переопределять часовой пояс', 500),
|
||||
'path_root' => !isset($this->path_root) ? $this->path_root = $value : throw new Exception('Запрещено переопределять корневой каталог', 500),
|
||||
'path_logs' => !isset($this->path_logs) ? $this->path_logs = $value : throw new Exception('Запрещено переопределять каталог журналов', 500),
|
||||
'path_temp' => !isset($this->path_temp) ? $this->path_temp = $value : throw new Exception('Запрещено переопределять каталог временных файлов', 500)
|
||||
'timezone' => !isset($this->timezone) ? $this->timezone = $value : throw new exception('Запрещено переопределять часовой пояс', 500),
|
||||
'path_root' => !isset($this->path_root) ? $this->path_root = $value : throw new exception('Запрещено переопределять корневой каталог', 500),
|
||||
'path_logs' => !isset($this->path_logs) ? $this->path_logs = $value : throw new exception('Запрещено переопределять каталог журналов', 500),
|
||||
'path_temp' => !isset($this->path_temp) ? $this->path_temp = $value : throw new exception('Запрещено переопределять каталог временных файлов', 500),
|
||||
default => throw new exception("Свойство $name не обнаружено", 404)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Прочитать свойство
|
||||
*
|
||||
* Значение по умолчанию, есле не задано
|
||||
* Записывает значение по умолчанию, если свойство не инициализировано
|
||||
*
|
||||
* @param mixed $name Название
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get(mixed $name): mixed
|
||||
public function __get(string $name): mixed
|
||||
{
|
||||
return match ($name) {
|
||||
'robots' => $this->robots,
|
||||
|
@ -239,7 +240,7 @@ final class core
|
|||
'path_root' => $this->path_root ?? $this->path_root = dirname(__DIR__),
|
||||
'path_logs' => $this->path_logs ?? $this->path_logs = $this->__get('path_root') . '/logs',
|
||||
'path_temp' => $this->path_temp ?? $this->path_temp = $this->__get('path_root') . '/temp',
|
||||
default => null
|
||||
default => throw new exception("Свойство \"\$$name\" не обнаружено", 404)
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -260,7 +261,7 @@ final class core
|
|||
// Если найден класс реализующий запрошенного робота
|
||||
return new $robot(...$params);
|
||||
} else {
|
||||
throw new Exception("Робот $method не найден", 404);
|
||||
throw new exception("Робот $method не найден", 404);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,18 +4,19 @@ declare(strict_types=1);
|
|||
|
||||
namespace mirzaev\vk\robots;
|
||||
|
||||
use Throwable;
|
||||
use Exception;
|
||||
|
||||
use mirzaev\vk\robots\robot,
|
||||
mirzaev\vk\api\settings as api,
|
||||
mirzaev\vk\api\longpoll;
|
||||
|
||||
use Throwable;
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Робот-группа
|
||||
*
|
||||
* @property longpoll $longpoll LongPoll-сессия
|
||||
*
|
||||
* @method public function __construct(int|null $id, string|null $key) Конструктор
|
||||
* @method public function __set($name, $value) Запись свойства
|
||||
* @method public function __get($name) Чтение свойства
|
||||
* @method public function __isset($name) Проверка на инициализированность свойства
|
||||
|
@ -41,7 +42,11 @@ final class group extends robot
|
|||
protected string|null $key = null
|
||||
) {
|
||||
parent::__construct($id, $key);
|
||||
|
||||
// Инициализация данных API
|
||||
$this->api['group_id'] = $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Запись свойства
|
||||
*
|
||||
|
|
|
@ -25,8 +25,6 @@ use GuzzleHttp\Client as browser;
|
|||
* @var api $api API ВКонтакте
|
||||
* @var account $account Аккаунт
|
||||
* @var browser $browser Браузер
|
||||
* @var proxy $proxy Прокси
|
||||
* @var captcha $captcha Обработчик капчи
|
||||
*
|
||||
* @var int $messages_mode Режим отправки сообщений
|
||||
*
|
||||
|
@ -60,6 +58,11 @@ abstract class robot
|
|||
*/
|
||||
protected int $messages_mode = 1;
|
||||
|
||||
/**
|
||||
* @var api API ВКонтакте
|
||||
*/
|
||||
protected api $api;
|
||||
|
||||
/**
|
||||
* Конструктор
|
||||
*
|
||||
|
@ -81,37 +84,94 @@ abstract class robot
|
|||
|
||||
// Идентификация сессии робота
|
||||
$this->session = count($core->read($this->id));
|
||||
|
||||
// Инициализация настроек API
|
||||
$this->api();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Инициализация ключа
|
||||
*
|
||||
* @param string $key Ключ
|
||||
* @param string|null $key Ключ
|
||||
*
|
||||
* @return self
|
||||
* @return string|self Ключ при чтении или инстанцию робота при записи
|
||||
*/
|
||||
public function key(string $key): self
|
||||
public function key(string|null $key = null): string|self
|
||||
{
|
||||
$this->__set('key', $key);
|
||||
if (isset($key)) {
|
||||
// Ключ передан (подразумевается как запись)
|
||||
|
||||
if (isset($this->key)) {
|
||||
// Ключ уже инициализирован
|
||||
|
||||
throw new Exception('Запрещено перезаписывать ключ', 500);
|
||||
} else {
|
||||
// Ключ ещё не инициализирован
|
||||
|
||||
// Запись ключа
|
||||
$this->key = $key;
|
||||
|
||||
// Инициализация данных в настройках API
|
||||
$this->api()['access_token'] = $key;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
// Ключ не передан (подразумевается как чтение)
|
||||
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Инициализация аккаунта
|
||||
*
|
||||
* @param account $account Аккаунт
|
||||
*
|
||||
* @return self
|
||||
* @return account|self Аккаунт при чтении или инстанцию робота при записи
|
||||
*/
|
||||
public function account(account $account): self
|
||||
public function account(account|null $account = null): account|self
|
||||
{
|
||||
$this->__set('account', $account);
|
||||
if (isset($account)) {
|
||||
// Аккаунт передан (подразумевается как запись)
|
||||
|
||||
if (isset($this->account)) {
|
||||
// Аккаунт уже инициализирован
|
||||
|
||||
throw new Exception('Запрещено перезаписывать аккаунт', 500);
|
||||
} else {
|
||||
// Аккаунт ещё не инициализирован
|
||||
|
||||
// Запись аккаунта
|
||||
$this->account = $account;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
// Аккаунт не передан (подразумевается как чтение)
|
||||
|
||||
return $this->account;
|
||||
}
|
||||
|
||||
/**
|
||||
* Инициализация API
|
||||
*
|
||||
* @return api Инстанция настроек API
|
||||
*/
|
||||
public function api(): api
|
||||
{
|
||||
if (!isset($this->api)) {
|
||||
// Настройки API ещё не инициализированы
|
||||
|
||||
// Запись инстанции настроек API
|
||||
$this->api = new api($this);
|
||||
}
|
||||
|
||||
return $this->api;
|
||||
}
|
||||
|
||||
/**
|
||||
* Записать свойство
|
||||
*
|
||||
|
@ -125,9 +185,9 @@ abstract class robot
|
|||
match ($name) {
|
||||
'id' => isset($this->id) ? throw new Exception('Запрещено перезаписывать идентификатор', 500) : $this->id = (int) $value,
|
||||
'session' => isset($this->session) ? throw new Exception('Запрещено перезаписывать сессию', 500) : $this->session = (int) $value,
|
||||
'key' => isset($this->key) ? throw new Exception('Запрещено перезаписывать ключ', 500) : $this->key = (string) $value,
|
||||
'api' => isset($this->api) ? throw new Exception('Запрещено перезаписывать API', 500) : $this->api = $value,
|
||||
'account' => isset($this->account) ? throw new Exception('Запрещено перезаписывать аккаунт', 500) : $this->account = $value,
|
||||
'key' => $this->key((string) $value),
|
||||
'account' => $this->account($value),
|
||||
'api' => $this->api(),
|
||||
'browser' => isset($this->browser) ? throw new Exception('Запрещено перезаписывать браузер', 500) : $this->browser = $value,
|
||||
'messages_new' => $this->messages_new = (int) $value,
|
||||
default => throw new Exception("Свойство $name не найдено", 404)
|
||||
|
@ -146,9 +206,9 @@ abstract class robot
|
|||
return match ($name) {
|
||||
'id' => $this->id ?? throw new Exception('Идентификатор не инициализирован', 500),
|
||||
'session' => $this->session ?? throw new Exception('Сессия не инициализирована', 500),
|
||||
'key' => $this->key ?? throw new Exception('Ключ не инициализирован', 500),
|
||||
'api' => $this->api ?? $this->api = new api($this),
|
||||
'account' => $this->account ?? throw new Exception('Аккаунт не инициализирован', 500),
|
||||
'key' => $this->key(),
|
||||
'account' => $this->account(),
|
||||
'api' => $this->api(),
|
||||
'browser' => $this->browser ?? $this->browser = new browser([
|
||||
'base_uri' => 'https://api.vk.com/method/',
|
||||
'cookies' => true
|
||||
|
|
|
@ -16,19 +16,42 @@ use mirzaev\accounts\vk as account;
|
|||
*/
|
||||
final class user extends robot
|
||||
{
|
||||
/**
|
||||
* Конструктор
|
||||
*
|
||||
* @param int|null $id Идентификатор
|
||||
* @param string|null $key Ключ
|
||||
*/
|
||||
public function __construct(
|
||||
protected int|null $id = null,
|
||||
protected string|null $key = null
|
||||
) {
|
||||
parent::__construct($id, $key);
|
||||
|
||||
// Инициализация данных API
|
||||
$this->api['user_id'] = $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Инициализация аккаунта
|
||||
*
|
||||
* @param account $account Аккаунт
|
||||
*
|
||||
* @return self
|
||||
* @return account|self Аккаунт при чтении или инстанцию робота при записи
|
||||
*/
|
||||
public function account(account $account): self
|
||||
public function account(account|null $account = null): account|self
|
||||
{
|
||||
parent::account($account);
|
||||
if (isset($account)) {
|
||||
// Передан аккаунт
|
||||
|
||||
$this->key = $account->key;
|
||||
if (isset($account->key)) {
|
||||
// Ключ инициализирован
|
||||
|
||||
return $this;
|
||||
// Инициализация данных в настройках API
|
||||
$this->api()['access_token'] = $account->key;
|
||||
}
|
||||
}
|
||||
|
||||
return parent::account($account);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue