Исправления для сообщений и фото
This commit is contained in:
		| @@ -6,12 +6,11 @@ namespace hood\vk\api; | |||||||
|  |  | ||||||
| use Exception; | use Exception; | ||||||
| use hood\vk\robots\robot; | use hood\vk\robots\robot; | ||||||
| use ArrayAccess; |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Вложения |  * Вложения | ||||||
|  */ |  */ | ||||||
| class data implements ArrayAccess | class data | ||||||
| { | { | ||||||
|     /** |     /** | ||||||
|      * @var array $data Вложения |      * @var array $data Вложения | ||||||
| @@ -35,7 +34,7 @@ class data implements ArrayAccess | |||||||
|      *  |      *  | ||||||
|      * @return self |      * @return self | ||||||
|      */ |      */ | ||||||
|     public function addData(string ...$data): self |     public function addData(...$data): self | ||||||
|     { |     { | ||||||
|         // Если вложений больше 10 |         // Если вложений больше 10 | ||||||
|         if (count($this->data) + count($data) > 10) { |         if (count($this->data) + count($data) > 10) { | ||||||
| @@ -73,44 +72,4 @@ class data implements ArrayAccess | |||||||
|             default => throw new Exception('Свойство не найдено: ' . $name) |             default => throw new Exception('Свойство не найдено: ' . $name) | ||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Записать по смещению |  | ||||||
|      */ |  | ||||||
|     public function offsetSet(mixed $offset = null, ...$value): void |  | ||||||
|     { |  | ||||||
|         if ($offset == null) { |  | ||||||
|             $this->addData($value); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Прочитать по смещению |  | ||||||
|      */ |  | ||||||
|     public function offsetGet(mixed $offset = null): mixed |  | ||||||
|     { |  | ||||||
|         if ($offset == 0) { |  | ||||||
|             return $this; |  | ||||||
|         }     |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Проверка существования смещения |  | ||||||
|      */ |  | ||||||
|     public function offsetExists(mixed $offset): bool |  | ||||||
|     { |  | ||||||
|         if ($offset == 'data') { |  | ||||||
|             return empty($this->data); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Удалить по смещению |  | ||||||
|      */ |  | ||||||
|     public function offsetUnset(mixed $offset = null): void |  | ||||||
|     { |  | ||||||
|         if ($offset == null) { |  | ||||||
|             $this->settings = []; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ use Exception; | |||||||
| use hood\accounts\vk; | use hood\accounts\vk; | ||||||
| use hood\vk\robots\robot; | use hood\vk\robots\robot; | ||||||
| use hood\vk\api\data; | use hood\vk\api\data; | ||||||
|  | use hood\vk\robots\group; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Сообщение |  * Сообщение | ||||||
| @@ -39,6 +40,16 @@ final class messages extends method | |||||||
|      */ |      */ | ||||||
|     protected data $data; |     protected data $data; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @var array Пересылаемые сообщения | ||||||
|  |      */ | ||||||
|  |     protected array $forwardMessages = []; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @var int $ReplyMessage Ответное сообщение | ||||||
|  |      */ | ||||||
|  |     protected int $ReplyMessage; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Создать сообщение |      * Создать сообщение | ||||||
|      * |      * | ||||||
| @@ -69,6 +80,36 @@ final class messages extends method | |||||||
|         return $this; |         return $this; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Записать пересылаемые сообщения | ||||||
|  |      *  | ||||||
|  |      * @param $messageIds id пересылаемых сообщений | ||||||
|  |      *  | ||||||
|  |      * @return self | ||||||
|  |      */ | ||||||
|  |     public function forward(...$messageIds): self | ||||||
|  |     { | ||||||
|  |         // Запись пересылаемых сообщений | ||||||
|  |         $this->forwardMessages = array_merge($this->forwardMessages, $messageIds); | ||||||
|  |  | ||||||
|  |         return $this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Записать ответное сообщение | ||||||
|  |      *  | ||||||
|  |      * @param $messageId id ответного сообщения | ||||||
|  |      *  | ||||||
|  |      * @return self | ||||||
|  |      */ | ||||||
|  |     public function reply(int $messageId): self | ||||||
|  |     { | ||||||
|  |         // Запись ответного сообщения | ||||||
|  |         $this->ReplyMessage = $messageId; | ||||||
|  |  | ||||||
|  |         return $this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Записать фото |      * Записать фото | ||||||
|      * |      * | ||||||
| @@ -95,6 +136,8 @@ final class messages extends method | |||||||
|      * Записать вложение |      * Записать вложение | ||||||
|      * |      * | ||||||
|      * @param $attachments Вложения |      * @param $attachments Вложения | ||||||
|  |      *  | ||||||
|  |      * @return self | ||||||
|      */ |      */ | ||||||
|     public function attachments(string ...$attachments): self |     public function attachments(string ...$attachments): self | ||||||
|     { |     { | ||||||
| @@ -102,7 +145,9 @@ final class messages extends method | |||||||
|             // Если вложения инициализированны |             // Если вложения инициализированны | ||||||
|  |  | ||||||
|             // Записать вложение |             // Записать вложение | ||||||
|             $this->data->addData(...$attachments); |             foreach ($attachments as $attachment) { | ||||||
|  |                 $this->data->addData($attachment); | ||||||
|  |             } | ||||||
|         } else { |         } else { | ||||||
|             // Если вложения не инициализированны |             // Если вложения не инициализированны | ||||||
|  |  | ||||||
| @@ -110,7 +155,9 @@ final class messages extends method | |||||||
|             $this->data = new data($this->robot); |             $this->data = new data($this->robot); | ||||||
|  |  | ||||||
|             // Записать вложение |             // Записать вложение | ||||||
|             $this->data->addData(...$attachments); |             foreach ($attachments as $attachment) { | ||||||
|  |                 $this->data->addData($attachment); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return $this; |         return $this; | ||||||
| @@ -142,42 +189,36 @@ final class messages extends method | |||||||
|         $this->robot->api->chooseDestination($destination); |         $this->robot->api->chooseDestination($destination); | ||||||
|  |  | ||||||
|         // Идентификатор сообщения |         // Идентификатор сообщения | ||||||
|         $this->robot->api->random_id = $random_id; |         $this->robot->api['random_id'] = $random_id; | ||||||
|  |  | ||||||
|         // Текст |         // Текст | ||||||
|         $this->robot->api->message = $this->text; |         $this->robot->api['message'] = $this->text; | ||||||
|  |  | ||||||
|         // Фильтрация вложений, если они инициализированны |         // Пересылаемые сообщения | ||||||
|         if (isset($this->data)) { |         if (!empty($this->forwardMessages)) { | ||||||
|  |  | ||||||
|             /* $forward_messages = []; |             $this->robot->api['forward_messages'] = implode(',', $this->forwardMessages); | ||||||
|             $attachments = $this->attachment->attachments; //Indirect modification of overloaded property hood\vk\api\attachments::$attachments has no effect |         } | ||||||
|             foreach ($attachments as &$attachment) { |  | ||||||
|                 if (iconv_substr($attachment, 0,  7, "UTF-8") === 'message') { |  | ||||||
|  |  | ||||||
|                     // Если среди вложений найдено сообщение для пересылки |         // Ответные сообщения | ||||||
|                     $forward_messages[] = $attachment; |         if (isset($this->ReplyMessage)) { | ||||||
|                     unset($attachment); |  | ||||||
|                 } |  | ||||||
|             } */ |  | ||||||
|  |  | ||||||
|             if (!empty($forward_messages)) { |             $this->robot->api['reply_to'] = $this->ReplyMessage; | ||||||
|                 // Если есть пересылаемые сообщения |         } | ||||||
|                 $this->robot->api['forward_messages'] = implode(',', $forward_messages); |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             //if (!empty($this->attachment->attachments)) { |         // Вложения | ||||||
|                 // Если есть вложения |         if ( isset($this->data) && $this->__get('data') !== []) { // !empty($this->data->data) почемуто не работает | ||||||
|                 //throw new Exception('СУКАААА'); |  | ||||||
|                 $this->robot->api['attachment'] = implode(',', $this->data->data); |             $this->robot->api['attachment'] = implode(',', $this->__get('data')); | ||||||
|             //} |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Запрос |         // Запрос | ||||||
|         $request = $this->robot->browser->request('POST', 'messages.send', ['form_params' => $this->robot->api->settings]); |         $request = json_decode($this->robot->browser->request('POST', 'messages.send', ['form_params' => $this->robot->api->settings])->getBody()->getContents()); | ||||||
|  |  | ||||||
|         // Очистка |         // Если в ответе ошибка | ||||||
|         //unset($settings); |         if (isset($request->error)) { | ||||||
|  |             throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         if ($this->mode >= 2) { |         if ($this->mode >= 2) { | ||||||
|             // Если установлен режим 2 (усиленная проверка отправленного сообщения) |             // Если установлен режим 2 (усиленная проверка отправленного сообщения) | ||||||
| @@ -194,16 +235,22 @@ final class messages extends method | |||||||
|                 // Запрос |                 // Запрос | ||||||
|                 if ($this->robot->browser->request('POST', 'messages.getById', ['form_params' => $this->robot->api->settings])['response']['count'] === 0) { |                 if ($this->robot->browser->request('POST', 'messages.getById', ['form_params' => $this->robot->api->settings])['response']['count'] === 0) { | ||||||
|                     // Сообщения не существует |                     // Сообщения не существует | ||||||
|  |                     //!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||||||
|  |                     //!!!!!!!!!!!!!!!!!!!!!!!!!! | ||||||
|  |                     //!!!!!!!!!!!!!!!!!!!!!!!!! | ||||||
|  |  | ||||||
|                     // Повторная отправка |                     // Повторная отправка | ||||||
|                     $this->send($destination); |                     $this->send($destination); | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 // Что-то придумать :) |                 // Что-то придумать :) | ||||||
|  |                 // наверно throw new exception($request->error->error_msg) | ||||||
|  |                 // А стоп. Ничего не нужно, просто возвращаем объект с ошибкой, где всё будет написано | ||||||
|  |                 // Костя ты тупой? | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return $request->getBody(); |         return $request->response; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -217,7 +264,7 @@ final class messages extends method | |||||||
|     public function __set(string $name, mixed $value): void |     public function __set(string $name, mixed $value): void | ||||||
|     { |     { | ||||||
|         match ($name) { |         match ($name) { | ||||||
|             'data' => !isset($this->data) ? $this->data[0]->addData($value) : throw new Exception('Вложения не инициализированны'), |             'data' => !isset($this->data) ? $this->data->addData($value) : throw new Exception('Вложения не инициализированны'), | ||||||
|             default => throw new Exception('Свойство не найдено: ' . $name) |             default => throw new Exception('Свойство не найдено: ' . $name) | ||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
| @@ -233,52 +280,48 @@ final class messages extends method | |||||||
|     { |     { | ||||||
|         return match ($name) { |         return match ($name) { | ||||||
|             'text' => $this->text ?? throw new Exception('Текст не инициализирован'), |             'text' => $this->text ?? throw new Exception('Текст не инициализирован'), | ||||||
|             'data' => isset($this->data) ? $this->data[0]->data : throw new Exception('Вложения не инициализированны'), |             'data' => isset($this->data) ? $this->data->data : throw new Exception('Вложения не инициализированны'), | ||||||
|  |             'forwardMessages' => !empty($this->forwardMessages) ? $this->forwardMessages : throw new Exception('Пересылаемые сообщения не инициализированны'), | ||||||
|  |             'ReplyMessage' => isset($this->ReplyMessage) ? $this->ReplyMessage : throw new Exception('Ответное сообщение не инициализированно'), | ||||||
|             default => throw new Exception('Свойство не найдено: ' . $name) |             default => throw new Exception('Свойство не найдено: ' . $name) | ||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Получить информацию о сообщении |      * Получить информацию о сообщении по id | ||||||
|      *  |      *  | ||||||
|      * @return array Информация о сообщении |      * @param string $message_ids Идентификатор сообщения | ||||||
|  |      * | ||||||
|  |      * @return object Информация о сообщении | ||||||
|      */ |      */ | ||||||
|     public function info()/* : array */ |  | ||||||
|  |     //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||||||
|  |     // доделать | ||||||
|  |  | ||||||
|  |     public function getById(int $message_ids): object | ||||||
|     { |     { | ||||||
|         //Инициализация |         // Реиницилазиция | ||||||
|         //$settings = $this->init(); |         $this->robot->api->reinit(); | ||||||
|         $this->robot->api->init(); |  | ||||||
|  |  | ||||||
|         // Цель отправки |         // Идентификаторы сообщений. Максимум 100 идентификаторов | ||||||
|         $this->robot->api->chooseDestination($this->destination); |         $this->robot->api['message_ids'] = $message_ids; | ||||||
|  |  | ||||||
|         // Сообщение |  | ||||||
|         $this->robot->api['message'] = $this->message; |  | ||||||
|  |  | ||||||
|         // Режим отправки |         if ($this->robot instanceof group) { | ||||||
|         $this->robot->api['mode'] = $this->mode; |             // Если это группа | ||||||
|  |  | ||||||
|         // Фильтрация вложений |             // Идентификатор группы | ||||||
|         $forward_messages = []; |             isset($this->robot->id) ? $this->robot->api['group_id'] = $this->robot->id : throw new Exception('Необходимо указать идентификатор сообщества'); | ||||||
|         foreach ($this->attachments as &$attachment) { |  | ||||||
|             if (iconv_substr(str: $attachment, offset: 0, length: 7, charset: "UTF-8") === 'message') { |  | ||||||
|                 // Если среди вложений найдено сообщение для пересылки |  | ||||||
|  |  | ||||||
|                 $forward_messages[] = $attachment; |  | ||||||
|                 unset($attachment); |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (!empty($forward_messages)) { |         // Запрос | ||||||
|             // Если есть пересылаемые сообщения |         $request = json_decode(($this->robot->browser->request('POST', 'messages.getById', ['form_params' => $this->robot->api->settings])->getBody()->getContents())); | ||||||
|  |  | ||||||
|             $this->robot->api['forward_messages'] = implode(',', $forward_messages); |         // Если в ответе ошибка | ||||||
|  |         if (isset($request->error)) { | ||||||
|  |             throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (!empty($this->attachments)) { |         return $request->response; | ||||||
|             // Если есть вложения |  | ||||||
|  |  | ||||||
|             $this->robot->api['attachment'] = implode(',', $this->attachments); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -26,11 +26,6 @@ use Exception; | |||||||
|  */ |  */ | ||||||
| final class photos extends method | final class photos extends method | ||||||
| { | { | ||||||
|     /** |  | ||||||
|      * $url |  | ||||||
|      */ |  | ||||||
|     protected $url; |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Создать сообщение |      * Создать сообщение | ||||||
|      * |      * | ||||||
| @@ -109,27 +104,6 @@ final class photos extends method | |||||||
|         throw new Exception('Аккаунт не инициализирован'); |         throw new Exception('Аккаунт не инициализирован'); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Загрузить |  | ||||||
|      * |  | ||||||
|      * @param Type $var |  | ||||||
|      * @return void |  | ||||||
|      */ |  | ||||||
|     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); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Получить сервер для загрузки изображений |      * Получить сервер для загрузки изображений | ||||||
|      * |      * | ||||||
| @@ -219,14 +193,11 @@ final class photos extends method | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Загрузить фото и получить его id |      * Получить адрес сервера сообщений | ||||||
|      *  |      *  | ||||||
|      * $robot робот |      * @return object | ||||||
|      * |  | ||||||
|      * $pathPhoto Путь к фото |  | ||||||
|      */ |      */ | ||||||
|  |     public function getMessageServer(): object | ||||||
|     public function getPhoto(string $pathPhoto): string |  | ||||||
|     { |     { | ||||||
|         // Реиницилазиция |         // Реиницилазиция | ||||||
|         $this->robot->api->reinit(); |         $this->robot->api->reinit(); | ||||||
| @@ -237,25 +208,60 @@ final class photos extends method | |||||||
|         // Идентификатор назначения (0 Для ботов) |         // Идентификатор назначения (0 Для ботов) | ||||||
|         $this->robot->api['peer_id'] = 0; |         $this->robot->api['peer_id'] = 0; | ||||||
|  |  | ||||||
|         // Получить адрес сервера для загрузки фотографии в личное сообщение |         // Получить адрес сервера | ||||||
|         $url = json_decode($this->robot->browser->request('POST', 'photos.getMessagesUploadServer', [ |         $request = json_decode($this->robot->browser->request('POST', 'photos.getMessagesUploadServer', [ | ||||||
|             'form_params' => $this->robot->api['settings'] |             'form_params' => $this->robot->api['settings'] | ||||||
|         ])->getBody()->getContents())->response->upload_url; |         ])->getBody()->getContents()); | ||||||
|  |  | ||||||
|         // Открыть фото |         // Если в ответе ошибка | ||||||
|         $pathPhoto = fopen($pathPhoto, 'r'); |         if (isset($request->error)) { | ||||||
|  |             throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return $request->response; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Загрузить фото | ||||||
|  |      */ | ||||||
|  |     public function upload($photo, string $url): object | ||||||
|  |     { | ||||||
|         // Загрузить фото |         // Загрузить фото | ||||||
|         $response = json_decode($this->robot->browser->request('POST', $url, [ |         $request = json_decode($this->robot->browser->request('POST', $url, [ | ||||||
|             'multipart' => [ |             'multipart' => [ | ||||||
|                 [ |                 [ | ||||||
|                     'Content-type' => 'multipart/form-data', |                     'Content-type' => 'multipart/form-data', | ||||||
|                     'name' => 'photo', |                     'name' => 'photo', | ||||||
|                     'contents' => $pathPhoto |                     'contents' => $photo | ||||||
|                 ] |                 ] | ||||||
|             ] |             ] | ||||||
|         ])->getBody()->getContents()); |         ])->getBody()->getContents()); | ||||||
|  |  | ||||||
|  |         // Если в ответе ошибка | ||||||
|  |         if (isset($request->error)) { | ||||||
|  |             throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return $request; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /**  | ||||||
|  |      * Получить id фото для сообщения | ||||||
|  |      * | ||||||
|  |      * $robot робот | ||||||
|  |      * | ||||||
|  |      * $pathPhoto Путь к фото | ||||||
|  |      */ | ||||||
|  |     public function getPhoto(string $pathPhoto): string | ||||||
|  |     { | ||||||
|  |         // Получить адрес сервера сообщений | ||||||
|  |         $url = $this->getMessageServer()->upload_url; | ||||||
|  |  | ||||||
|  |         // Открыть фото | ||||||
|  |         $pathPhoto = fopen($pathPhoto, 'r'); | ||||||
|  |  | ||||||
|  |         //Загрузить фото | ||||||
|  |         $response = $this->upload($pathPhoto, $url); | ||||||
|  |  | ||||||
|         // Реинициализация |         // Реинициализация | ||||||
|         $this->robot->api->reinit(); |         $this->robot->api->reinit(); | ||||||
| @@ -274,15 +280,17 @@ final class photos extends method | |||||||
|         $this->robot->api['hash'] = $response->hash; |         $this->robot->api['hash'] = $response->hash; | ||||||
|  |  | ||||||
|         // Сохранить фото |         // Сохранить фото | ||||||
|         $response = json_decode($this->robot->browser->request('POST', 'photos.saveMessagesPhoto', [ |         $request = json_decode($this->robot->browser->request('POST', 'photos.saveMessagesPhoto', [ | ||||||
|             'form_params' => $this->robot->api['settings'] |             'form_params' => $this->robot->api['settings'] | ||||||
|         ])->getBody()->getContents()); |         ])->getBody()->getContents()); | ||||||
|  |  | ||||||
|         // Ссылка на фото |         // Если в ответе ошибка | ||||||
|         if (isset($response->response[0]->id)) { |         if (isset($request->error)) { | ||||||
|             return 'photo' . $response->response[0]->owner_id . '_' . $response->response[0]->id; |             throw new Exception('Вконтакте: ' . $request->error->error_msg, $request->error->error_code); | ||||||
|         } else { |  | ||||||
|             throw new Exception('Фото не загружено'); |  | ||||||
|         } |         } | ||||||
|  |         $request; | ||||||
|  |         // Ссылка на фото | ||||||
|  |         return 'photo' . $request->response[0]->owner_id . '_' . $request->response[0]->id; | ||||||
|  |          | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -117,10 +117,14 @@ final class apiTest extends TestCase | |||||||
|     /** |     /** | ||||||
|      * @testdox Инициализация (безопасная) |      * @testdox Инициализация (безопасная) | ||||||
|      */ |      */ | ||||||
|     public function testInit(): void |     public function testSafeInit(): void | ||||||
|     { |     { | ||||||
|         // Безопасная инициализация |         // Инициализация | ||||||
|         self::$robot->key(self::$group_key)->api->init(); |         $settings = self::$robot->key(self::$group_key)->api->init(); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         $this->assertNotNull($settings['access_token']); | ||||||
|  |         $this->assertNotNull($settings['v']); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -126,7 +126,10 @@ final class dataTest extends TestCase | |||||||
|      */ |      */ | ||||||
|     public function testDataInit(): void |     public function testDataInit(): void | ||||||
|     { |     { | ||||||
|  |          | ||||||
|         if (isset(self::$robot)) { |         if (isset(self::$robot)) { | ||||||
|  |              | ||||||
|  |             // Инициализация вложений | ||||||
|             self::$data = new data(self::$robot); |             self::$data = new data(self::$robot); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -152,18 +155,6 @@ final class dataTest extends TestCase | |||||||
|         $this->assertNotEmpty(self::$data->data); |         $this->assertNotEmpty(self::$data->data); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * @testdox Запись вложения методом |  | ||||||
|      */ |  | ||||||
|     public function testWriteAttachmentUsingMethod(): void |  | ||||||
|     { |  | ||||||
|         // Запись вложения |  | ||||||
|         self::$data->addData('Вложение'); |  | ||||||
|  |  | ||||||
|         // Проверка |  | ||||||
|         $this->assertNotEmpty(self::$data->data); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * @testdox Запись вложения (повторная) |      * @testdox Запись вложения (повторная) | ||||||
|      */ |      */ | ||||||
| @@ -188,7 +179,7 @@ final class dataTest extends TestCase | |||||||
|         $this->expectExceptionMessage('Превышен лимит вложений (10)'); |         $this->expectExceptionMessage('Превышен лимит вложений (10)'); | ||||||
|  |  | ||||||
|         //Запись вложений |         //Запись вложений | ||||||
|         self::$data->addData('Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение', 'Вложение'); |         self::$data->addData('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -196,9 +187,13 @@ final class dataTest extends TestCase | |||||||
|      */ |      */ | ||||||
|     public function testClearAttachments(): void |     public function testClearAttachments(): void | ||||||
|     { |     { | ||||||
|  |         //Запись вложения | ||||||
|  |         self::$data->addData('Вложение'); | ||||||
|  |  | ||||||
|         // Очистка вложений |         // Очистка вложений | ||||||
|         self::$data->clear(); |         self::$data->clear(); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|         $this->assertEmpty(self::$data->data); |         $this->assertEmpty(self::$data->data); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ use hood\vk\robots\robot; | |||||||
| use hood\vk\tests\settings; | use hood\vk\tests\settings; | ||||||
|  |  | ||||||
| use hood\accounts\vk as account; | use hood\accounts\vk as account; | ||||||
|  | use hood\accounts\vk; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * @testdox Сообщения |  * @testdox Сообщения | ||||||
| @@ -132,7 +133,10 @@ final class messagesTest extends TestCase | |||||||
|     public function testWriteText(): void |     public function testWriteText(): void | ||||||
|     { |     { | ||||||
|         // Запись текста |         // Запись текста | ||||||
|         self::$robot->message()->text('text'); |         $message = self::$robot->message()->text('text'); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         $this->assertNotNull($message->text); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -147,21 +151,37 @@ final class messagesTest extends TestCase | |||||||
|         $message->text('text'); |         $message->text('text'); | ||||||
|  |  | ||||||
|         // Проверка |         // Проверка | ||||||
|         $this->assertSame('texttext', $message->text); |         $this->assertEquals('texttext', $message->text); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * @testdox Запись фото |      * @testdox Отправка текста | ||||||
|      */ |      */ | ||||||
|     public function testWriteImage(): void |     public function testSendText(): void | ||||||
|     { |     { | ||||||
|         // Запись фото |         // Отправка сообщения | ||||||
|         $message = self::$robot->key(self::$group_key)->message()->image(self::$path_photo); |         $response = self::$robot->key(self::$group_key)->message('Тестовое сообщение')->send(self::$target_id); | ||||||
|  |  | ||||||
|         // Проверка |         // Проверка | ||||||
|         $this->assertNotEmpty($message->data); |         $this->assertIsInt($response, 'Сообщение не отправленно'); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @testdox Получение информации о сообщении | ||||||
|  |      */ | ||||||
|  |     public function testgetById(): void | ||||||
|  |     { | ||||||
|  |         // Отправка сообщения | ||||||
|  |         $id = self::$robot->key(self::$group_key)->message('Теста метода getByID')->send(self::$target_id); | ||||||
|  |  | ||||||
|  |         // Получение информации | ||||||
|  |         $response = self::$robot->message()->getById($id); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         $this->assertIsArray($response->items, 'Информация не получена'); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * @testdox Чтение Вложений |      * @testdox Чтение Вложений | ||||||
|      */ |      */ | ||||||
| @@ -175,37 +195,139 @@ final class messagesTest extends TestCase | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * @testdox Запись вложений методом |      * @testdox Запись вложений (методом) | ||||||
|      */ |      */ | ||||||
|     public function testWriteAttachments(): void |     public function testWriteAttachments(): void | ||||||
|     { |     { | ||||||
|         // Запись вложений |         // Запись вложений | ||||||
|         $message = self::$robot->message(); |         $message = self::$robot->message()->attachments('Вложение'); | ||||||
|  |  | ||||||
|         $message->attachments('Вложение'); |  | ||||||
|  |  | ||||||
|         // Проверка |         // Проверка | ||||||
|         $this->assertEquals(['Вложение'], $message->data); |         $this->assertEquals(['Вложение'], $message->data); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * @testdox Отправка текста |      * @testdox Запись фото | ||||||
|      */ |      */ | ||||||
|     public function testSend(): void |     public function testWriteImage(): void | ||||||
|     { |  | ||||||
|         // Отправка сообщения |  | ||||||
|         self::$robot->key(self::$group_key)->message('Тестовое сообщение')->send(self::$target_id); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * @testdox Отправка фотографии |  | ||||||
|      */ |  | ||||||
|     public function testSendPhoto(): void |  | ||||||
|     { |     { | ||||||
|         // Запись фото |         // Запись фото | ||||||
|         $message = self::$robot->key(self::$group_key)->message()->image(self::$path_photo); |         $message = self::$robot->key(self::$group_key)->message()->image(self::$path_photo); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         $this->assertNotEmpty($message->data); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @testdox Отправка фото | ||||||
|  |      */ | ||||||
|  |     public function testSendPhoto(): void | ||||||
|  |     { | ||||||
|  |         // Запись фото | ||||||
|  |         $message = self::$robot->key(self::$group_key)->message('Тест отправки фото')->image(self::$path_photo); | ||||||
|  |  | ||||||
|         // Отправка сообщения |         // Отправка сообщения | ||||||
|         $message->send(self::$target_id); |         $id = $message->send(self::$target_id); | ||||||
|  |  | ||||||
|  |         // Получене информации для проверки | ||||||
|  |         $message = $message->getById($id); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         $this->assertNotEmpty($message->items[0]->attachments, 'Фото не отправлено'); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @testdox Чтение пересылаемых сообщений | ||||||
|  |      */ | ||||||
|  |     public function testReadForward(): void | ||||||
|  |     { | ||||||
|  |         // Проверка выброса исключеия | ||||||
|  |         $this->expectExceptionMessage('Пересылаемые сообщения не инициализированны'); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         self::$robot->message()->forwardMessages; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @testdox Запись пересылаемых сообщений | ||||||
|  |      */ | ||||||
|  |     public function testWriteForward(): void | ||||||
|  |     { | ||||||
|  |         // Запись пересылаемых сообщений | ||||||
|  |         $message = self::$robot->message()->forward(123456); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         $this->assertNotEmpty($message->forwardMessages); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @testdox Пересылка сообщений | ||||||
|  |      */ | ||||||
|  |     public function testSendForward(): void | ||||||
|  |     { | ||||||
|  |         // Отправка пересылаемого сообщения | ||||||
|  |         $id = self::$robot->key(self::$group_key)->message('Это сообщение будет переслано')->send(self::$target_id); | ||||||
|  |  | ||||||
|  |         // Запись пересылаемых сообщений | ||||||
|  |         $message = self::$robot->message('Тест пересылки сообщений')->forward($id); | ||||||
|  |          | ||||||
|  |         // Отпрравка пересылки сообщения | ||||||
|  |         $id = $message->send(self::$target_id); | ||||||
|  |  | ||||||
|  |         // Получене информации для проверки | ||||||
|  |         $message = self::$robot->message()->getById($id); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         $this->assertNotEmpty($message->items[0]->fwd_messages, 'Сообщение не пересланно'); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @testdox Чтение ответного сообщения | ||||||
|  |      */ | ||||||
|  |     public function testReadReply(): void | ||||||
|  |     { | ||||||
|  |         // Проверка выброса исключеия | ||||||
|  |         $this->expectExceptionMessage('Ответное сообщение не инициализированно'); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         self::$robot->message()->ReplyMessage; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @testdox Запись ответного сообщения | ||||||
|  |      */ | ||||||
|  |     public function testWriteReply(): void | ||||||
|  |     { | ||||||
|  |         // Запись ответного сообщения | ||||||
|  |         $message = self::$robot->message()->Reply(123456); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         $this->assertNotNull($message->ReplyMessage); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @testdox Ответ на сообщение | ||||||
|  |      */ | ||||||
|  |     public function testSendReply(): void | ||||||
|  |     { | ||||||
|  |         // Отправка ответного сообщения | ||||||
|  |         $id = self::$robot->key(self::$group_key)->message('Будет ответ на это сообщение')->send(self::$target_id); | ||||||
|  |  | ||||||
|  |         // Запись ответного сообщения | ||||||
|  |         $message = self::$robot->message('Тест ответа на сообщение')->reply($id); | ||||||
|  |  | ||||||
|  |         // Отправка ответа на сообщение | ||||||
|  |         $id = $message->send(self::$target_id); | ||||||
|  |  | ||||||
|  |         // Получене информации для проверки | ||||||
|  |         $message = self::$robot->message()->getById($id); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         $this->assertNotEmpty($message->items[0]->reply_message, 'Сообщение не пересланно'); | ||||||
|  |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -115,14 +115,39 @@ final class photosTest extends TestCase | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * @testdox Загрузка фото и получение его id |      * @testdox Получение адреса сервера сообщений | ||||||
|  |      */ | ||||||
|  |     public function testGetMessageServer(): void | ||||||
|  |     { | ||||||
|  |         // Получение адреса сервера | ||||||
|  |         $response = self::$robot->key(self::$group_key)->photo()->getMessageServer(); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         $this->assertIsString($response->upload_url, 'Адрес сервера не получен'); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @testdox Загрузка фото | ||||||
|  |      */ | ||||||
|  |     public function testUpload(): void | ||||||
|  |     { | ||||||
|  |         // Получение адреса сервера | ||||||
|  |         $url = self::$robot->key(self::$group_key)->photo()->getMessageServer()->upload_url; | ||||||
|  |  | ||||||
|  |         // Загрузка фото | ||||||
|  |         $response = self::$robot->photo()->upload(fopen(self::$path_photo, 'r'), $url); | ||||||
|  |  | ||||||
|  |         // Проверка | ||||||
|  |         $this->assertIsString($response->hash, 'Фото не загружено'); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @testdox Получение id фото для сообщения | ||||||
|      */ |      */ | ||||||
|     public function testGetPhoto(): void |     public function testGetPhoto(): void | ||||||
|     { |     { | ||||||
|         // Ожидаемое исключение (это временно) |  | ||||||
|         //$this->expectExceptionMessage('Фото не загружено'); |  | ||||||
|  |  | ||||||
|         // Проверка |         // Проверка | ||||||
|         //self::$robot->key(self::$group_key)->photo()->getPhoto(self::$path_photo); |         self::$robot->key(self::$group_key)->photo()->getPhoto(self::$path_photo); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 tarashyanskiy
					tarashyanskiy