@ -65,9 +65,9 @@ final class messages extends method
protected random_id $generate_mode = random_id :: crypto ;
/**
* @ var int | string | array | null $ destination Получатель
* @ var int | string | array | null $ peer_id Получатель
*/
protected int | string | array | null $ destination = null ;
protected int | string | array | null $ peer_id = null ;
/**
* @ var string | null $text Текст
@ -120,10 +120,40 @@ final class messages extends method
protected ? string $intent = null ;
/**
* @ var ? string $subscribe_id Число , которое будет использоваться для работы с интентами
* @ var ? int $subscribe_id Число , которое будет использоваться для работы с интентами
*/
protected ? int $subscribe_id = null ;
/**
* @ var ? int $offset Смещение для выбора сообщений
*/
protected ? int $offset = null ;
/**
* @ var ? int $count Количество выбираемых сообщений
*/
protected ? int $count = null ;
/**
* @ var ? int $start_message_id Идентификатор сообщения от которого начнётся выборка
*/
protected ? int $start_message_id = null ;
/**
* @ var bool $rev Получить сообщения в хронологичном порядке ? ( иначе в обратном )
*/
protected bool $rev = false ;
/**
* @ var bool $extended Получить расширенную информацию о б авторах сообщений ?
*/
protected bool $extended = false ;
/**
* @ var ? array $fields Дополнительные запрашиваемые поля ( для $extended )
*/
protected ? array $fields = null ;
/**
* Конструктор
*
@ -168,14 +198,14 @@ final class messages extends method
/**
* Записать : получатель
*
* @ param int | string | array | null $ destination Получатель
* @ param int | string | array | null $ peer_id Получатель
*
* @ return static
*/
public function destination( int | string | array | null $destination ) : static
public function peer_id( int | string | array | null $peer_id ) : static
{
// Запись в свойство
$this -> __set ( ' destination', $destination );
$this -> __set ( ' peer_id', $peer_id );
return $this ;
}
@ -240,36 +270,6 @@ final class messages extends method
return $this ;
}
/**
* Записать : идентификатор сообщения , на которое требуется ответить
*
* @ param ? int $reply Идентификатор сообщения , на которое требуется ответить
*
* @ return static
*/
public function reply ( ? int $reply ) : static
{
// Запись в свойство
$this -> __set ( 'reply_to' , $reply );
return $this ;
}
/**
* Записать : идентификатор сообщения , на которое требуется ответить
*
* @ param ? int $to Идентификатор сообщения , на которое требуется ответить
*
* @ return static
*/
public function to ( ? int $to ) : static
{
// Запись в свойство
$this -> __set ( 'reply_to' , $to );
return $this ;
}
/**
* Записать : идентификаторы пересылаемых сообщений
*
@ -315,21 +315,6 @@ final class messages extends method
return $this ;
}
/**
* Записать : идентификатор стикера
*
* @ param ? string $sticker Идентификатор стикера
*
* @ return static
*/
public function sticker ( ? string $sticker ) : static
{
// Запись в свойство
$this -> __set ( 'sticker_id' , $sticker );
return $this ;
}
/**
* Записать : полезная нагрузка
*
@ -360,21 +345,6 @@ final class messages extends method
return $this ;
}
/**
* Записать : создавать представление ссылки в сообщении ?
*
* @ param bool $payload Cо зда ва ть представление ссылки в сообщении ?
*
* @ return static
*/
public function links ( bool $links ) : static
{
// Запись в свойство
$this -> __set ( 'dont_parse_links' , ! $links );
return $this ;
}
/**
* Записать : отключить уведомление о б упоминании в сообщении ?
*
@ -390,21 +360,6 @@ final class messages extends method
return $this ;
}
/**
* Записать : включить уведомление о б упоминании в сообщении ?
*
* @ param bool $mentions Включить уведомление о б упоминании в сообщении ?
*
* @ return static
*/
public function mentions ( bool $mentions ) : static
{
// Запись в свойство
$this -> __set ( 'disable_mentions' , ! $mentions );
return $this ;
}
/**
* Записать : интент
*
@ -436,26 +391,118 @@ final class messages extends method
}
/**
* Записать : число, которое будет использоваться для работы с интентами
* Записать : смещение для выбора сообщений
*
* @ param ? int $ subscribe Число , которое будет использоваться для работы с интентами
* @ param ? int $ offset Смещение для выбора сообщений
*
* @ return static
*/
public function subscribe( ? int $subscribe ) : static
public function offset( ? int $offset ) : static
{
// Запись в свойство
$this -> __set ( ' subscribe_id', $subscribe );
$this -> __set ( ' offset', $offset );
return $this ;
}
/**
* Записать : количество выбираемых сообщений
*
* @ param ? int $count Количество выбираемых сообщений
*
* @ return static
*/
public function count ( ? int $count ) : static
{
// Запись в свойство
$this -> __set ( 'count' , $count );
return $this ;
}
/**
* Записать : идентификатор сообщения от которого начнётся выборка
*
* @ param ? int $start_message_id Идентификатор сообщения от которого начнётся выборка
*
* @ return static
*/
public function start_message_id ( ? int $start_message_id ) : static
{
// Запись в свойство
$this -> __set ( 'start_message_id' , $start_message_id );
return $this ;
}
/**
* Записать : получить сообщения в хронологичном порядке ?
*
* @ param bool $rev Получить сообщения в хронологичном порядке ? ( иначе в обратном )
*
* @ return static
*/
public function rev ( bool $rev ) : static
{
// Запись в свойство
$this -> __set ( 'rev' , $rev );
return $this ;
}
/**
* Записать : получить расширенную информацию о б авторах сообщений ?
*
* @ param bool $extended Получить расширенную информацию о б авторах сообщений ?
*
* @ return static
*/
public function extended ( bool $extended ) : static
{
// Запись в свойство
$this -> __set ( 'extended' , $extended );
return $this ;
}
/**
* Записать : дополнительные запрашиваемые поля
*
* @ param ? array $fields Дополнительные запрашиваемые поля ( для static :: $extended )
*
* @ return static
*/
public function fields ( ? array $fields ) : static
{
// Запись в свойство
$this -> __set ( 'fields' , $fields );
return $this ;
}
/**
* Инициализировать получателя
*
* Записывает получателя в буфер API робота
*
* @ param int | string | array | null $peer_id Получатель ( группа , чат , пользователь и пользователи )
*
* @ return void
*/
public function receiver ( int | string | array | null $peer_id = null ) : void
{
if ( isset ( $peer_id )) $this -> peer_id = $peer_id ;
if ( is_int ( $this -> peer_id )) ( $id = $this -> peer_id - 2000000000 ) > 0 ? $this -> robot -> api [ 'peer_id' ] = $this -> peer_id : $this -> robot -> api [ 'chat_id' ] = $id ;
else if ( is_array ( $this -> peer_id )) $this -> robot -> api [ 'peer_ids' ] = implode ( ',' , $this -> peer_id );
else if ( is_string ( $this -> peer_id )) $this -> robot -> api [ 'domain' ] = $this -> peer_id ;
}
/**
* Отправить сообщение
*
* @ see https :// vk . com / dev / messages . send
* @ see https :// dev. vk. com / metho d/ messages . send
*
* @ param int | string | null $destination Получатель
* @ param int | string | null $ peer_id Получатель ( группа , чат , пользователь и пользователи )
* @ param ? string $message Сообщение
* @ param ? int $lat Географическая ширина
* @ param ? int $long Географическая долгота
@ -483,7 +530,7 @@ final class messages extends method
* 5. Добавить content_source
*/
public function send (
int | string | null $ destination = null ,
int | string | null $ peer_id = null ,
? string $message = null ,
? int $lat = null ,
? int $long = null ,
@ -505,10 +552,7 @@ final class messages extends method
$this -> robot -> api -> reinit ();
// Инициализация получателя
if ( isset ( $destination )) $this -> destination = $destination ;
if ( is_int ( $this -> destination )) ( $id = $this -> destination - 2000000000 ) > 0 ? $this -> robot -> api [ 'peer_id' ] = $this -> destination : $this -> robot -> api [ 'chat_id' ] = $id ;
else if ( is_array ( $this -> destination )) $this -> robot -> api [ 'peer_ids' ] = implode ( ',' , $this -> destination );
else if ( is_string ( $this -> destination )) $this -> robot -> api [ 'domain' ] = $this -> destination ;
$this -> receiver ( $peer_id );
// Инициализация идентификатора сессии доставки сообщения (защита от повторных отправок)
$this -> robot -> api [ 'random_id' ] = $random_id ? ? match ( $this -> generate_mode ) {
@ -519,55 +563,43 @@ final class messages extends method
};
// Инициализация текста в настройках API
if ( isset ( $message )) $this -> text = $message ;
if ( isset ( $this -> text )) $this -> robot -> api [ 'message' ] = $this -> text ;
if ( ! empty ( $message ? ? = $this -> text )) $this -> robot -> api [ 'message' ] = $message ;
// Инициализация широты
if ( isset ( $lat )) $this -> lat = $lat ;
if ( isset ( $this -> lat )) $this -> robot -> api [ 'lat' ] = $this -> lat ;
if ( ! empty ( $lat ? ? = $this -> lat )) $this -> robot -> api [ 'lat' ] = $lat ;
// Инициализация долготы
if ( isset ( $long )) $this -> long = $long ;
if ( isset ( $this -> long )) $this -> robot -> api [ 'long' ] = $this -> long ;
if ( ! empty ( $long ? ? = $this -> long )) $this -> robot -> api [ 'long' ] = $long ;
// Инициализация вложений
if ( isset ( $attachments )) $this -> robot -> api -> data = $attachments ;
if ( isset ( $this -> robot -> api -> data ) && $this -> robot -> api -> __get ( 'data' ) !== []) $this -> robot -> api [ 'attachment' ] = implode ( ',' , $this -> robot -> api -> __get ( 'data' ));
if ( ! empty ( $attachments ? ? = $this -> robot -> api -> data )) $this -> robot -> api [ 'attachment' ] = implode ( ',' , $attachments );
// Инициализация сообщения, на которое требуется ответить
if ( isset ( $reply_to )) $this -> reply = $reply_to ;
if ( isset ( $this -> reply )) $this -> robot -> api [ 'reply_to' ] = $this -> reply ;
if ( ! empty ( $reply_to ? ? = $this -> reply_to )) $this -> robot -> api [ 'reply_to' ] = $reply_to ;
// Инициализация пересылаемых сообщений
if ( isset ( $forward_messages )) $this -> forward_messages = $forward_messages ;
if ( isset ( $this -> forward_messages )) $this -> robot -> api [ 'forward_messages' ] = implode ( ',' , $this -> forward_messages );
if ( ! empty ( $forward_messages ? ? = $this -> forward_messages )) $this -> robot -> api [ 'forward_messages' ] = implode ( ',' , $forward_messages );
// Инициализация стикера
if ( isset ( $sticker_id )) $this -> robot -> api [ 'sticker_id' ] = $sticker_id ;
if ( isset ( $this -> sticker_id )) $this -> robot -> api [ 'sticker_id' ] = $this -> sticker_id ;
if ( ! empty ( $sticker_id ? ? = $this -> sticker_id )) $this -> robot -> api [ 'sticker_id' ] = $sticker_id ;
// Инициализация полезной нагрузки
if ( isset ( $payload )) $this -> payload = $payload ;
if ( isset ( $this -> payload )) $this -> robot -> api [ 'payload' ] = $this -> payload ;
if ( ! empty ( $payload ? ? = $this -> payload )) $this -> robot -> api [ 'payload' ] = $payload ;
// Инициализация пользовательского соглашения
// $this->robot->api['content_source'] = $this->robot->content_source;
// Инициализация "не создавать представление ссылки в сообщении?"
if ( isset ( $dont_parse_links )) $this -> dont_parse_links = $dont_parse_links ;
if ( $this -> dont_parse_links ) $this -> robot -> api [ 'dont_parse_links' ] = 1 ;
if ( $dont_parse_links || $this -> dont_parse_links ) $this -> robot -> api [ 'dont_parse_links' ] = 1 ;
// Инициализация "отключить уведомление о б упоминании в сообщении?"
if ( isset ( $disable_mentions )) $this -> disable_mentions = $disable_mentions ;
if ( $this -> disable_mentions ) $this -> robot -> api [ 'disable_mentions' ] = 1 ;
if ( $disable_mentions || $this -> disable_mentions ) $this -> robot -> api [ 'disable_mentions' ] = 1 ;
// Инициализация интентов
if ( isset ( $intent )) $this -> robot -> api [ 'intent' ] = $intent ;
if ( isset ( $this -> intent )) $this -> robot -> api [ 'intent' ] = $this -> intent ;
if ( ! empty ( $intent ? ? = $this -> intent )) $this -> robot -> api [ 'intent' ] = $intent ;
// Инициализация числа, которое будет использоваться для работы с интентами
if ( isset ( $subscribe_id )) $this -> subscribe_id = $subscribe_id ;
if ( isset ( $this -> subscribe_id )) $this -> robot -> api [ 'subscribe_id' ] = $this -> subscribe_id ;
if ( ! empty ( $subscribe_id ? ? = $this -> subscribe_id )) $this -> robot -> api [ 'subscribe_id' ] = $subscribe_id ;
// Проверка сформированного сообщения
if ( ! $this -> robot -> api -> offsetExists ( 'message' ) && ! $this -> robot -> api -> offsetExists ( 'attachment' )) throw new Exception ( 'Сообщение должно содержать текст, либо вложение' );
@ -575,10 +607,8 @@ final class messages extends method
// Запрос
$request = json_decode ( $this -> robot -> browser -> request ( 'POST' , 'messages.send' , [ 'form_params' => $this -> robot -> api -> settings ]) -> getBody () -> getContents ());
// Если в ответе ошибка
if ( isset ( $request -> error )) {
throw new Exception ( 'ВКонтакте: ' . $request -> error -> error_msg , $request -> error -> error_code );
}
// Проверка на наличие ошибок в ответе от ВКонтакте
if ( isset ( $request -> error )) throw new Exception ( 'ВКонтакте: ' . $request -> error -> error_msg , $request -> error -> error_code );
if ( $this -> send_mode === message_send :: check ) {
// Надёжная доставка сообщения
@ -599,7 +629,7 @@ final class messages extends method
//!!!!!!!!!!!!!!!!!!!!!!!!!
// Повторная отправка
$this -> send ( $destination );
$this -> send ( );
}
} else {
}
@ -611,7 +641,7 @@ final class messages extends method
/**
* Удалить сообщение
*
* @ see https :// vk. com / dev / messages . delete
* @ see https :// dev. vk. com / metho d/ messages . delete
*
* @ param int | string | array | null $messages Получатель ( message_ids + cmids )
* @ param int | string | null $peer_id Идентификатор беседы
@ -620,7 +650,9 @@ final class messages extends method
*
* @ return int | array Идентификатор успешно отправленного сообщения или ответ сервера ( подразумевается ошибка )
*
* @ todo Написать обработчик ошибок возвращаемых ВКонтакте
* @ todo
* 1. Переделать под новую версию
* 2. Написать обработчик ошибок возвращаемых ВКонтакте
*/
public function delete ( string | int | array | null $messages = null , int | string | null $peer_id = null , bool $spam = false , bool $delete_for_all = false ) : stdClass
{
@ -667,11 +699,10 @@ final class messages extends method
* @ param string $message_ids Идентификатор сообщения
*
* @ return object Информация о сообщении
*
* @ todo
* 1. Доделать , а лучше полностью переделать
*/
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// доделать
public function getById ( int $message_ids ) : object
{
// Реиницилазиция
@ -691,11 +722,82 @@ final class messages extends method
// Запрос
$request = json_decode (( $this -> robot -> browser -> request ( 'POST' , 'messages.getById' , [ 'form_params' => $this -> robot -> api -> settings ]) -> getBody () -> getContents ()));
// Если в ответе ошибка
if ( isset ( $request -> error )) {
throw new Exception ( 'Вконтакте: ' . $request -> error -> error_msg , $request -> error -> error_code );
// Проверка на наличие ошибок в ответе от ВКонтакте
if ( isset ( $request -> error )) throw new Exception ( 'ВКонтакте: ' . $request -> error -> error_msg , $request -> error -> error_code );
return $request -> response ;
}
/**
* Получить историю сообщений
*
* @ see https :// dev . vk . com / method / messages . getHistory
*
* @ param ? int $offset Смещение для выбора сообщений
* @ param ? int $count Количество выбираемых сообщений
* @ param int | string | null $peer_id Получатель ( группа , чат , пользователь и пользователи )
* @ param ? int $start_message_id Идентификатор сообщения от которого начнётся выборка
* @ param bool $rev Получить сообщения в хронологичном порядке ? ( иначе в обратном )
* @ param bool $extended Получить расширенную информацию о б авторах сообщений ?
* @ param ? array $fields Дополнительные запрашиваемые поля ( для $extended )
*
* @ return int | array Идентификатор успешно отправленного сообщения или ответ сервера ( подразумевается ошибка )
*
* @ todo Написать обработчик ошибок возвращаемых ВКонтакте
*/
public function getHistory (
? int $offset = null ,
? int $count = null ,
int | string | null $peer_id = null ,
? int $start_message_id = null ,
bool $rev = false ,
bool $extended = false ,
? array $fields = null
) : object {
// Реиницилазиция
$this -> robot -> api -> reinit ();
// Инициализация смещения для выбора сообщений
if ( ! empty ( $offset ? ? = $this -> offset )) $this -> robot -> api [ 'offset' ] = $offset ;
// Инициализация количества выбираемых сообщений
if ( ! empty ( $count ? ? = $this -> count )) $this -> robot -> api [ 'count' ] = $count ;
// Инициализация получателя
$this -> receiver ( $peer_id );
// Инициализация идентификатора сообщения от которого начнётся выборка
if ( ! empty ( $start_message_id ? ? = $this -> start_message_id )) $this -> robot -> api [ 'start_message_id' ] = $start_message_id ;
// Инициализация "получить сообщения в хронологичном порядке?"
if ( $rev || $this -> rev ) $this -> robot -> api [ 'rev' ] = 1 ;
// Инициализация "получить расширенную информацию о б авторах сообщений?"
if ( $extended || $this -> extended ) $this -> robot -> api [ 'extended' ] = 1 ;
if ( ! empty ( $fields ? ? = $this -> fields )) {
// Инициализация дополнительных запрашиваемых полей
// Инициализация значения в буфере запроса к API
$this -> robot -> api [ 'fields' ] = '' ;
foreach ( $fields as $key => $field ) {
// Перебор дополнительных запрашиваемых полей
// Запись в буфер запроса к API
$this -> robot -> api [ 'fields' ] .= $field ;
// Запись разделителя
if ( $key !== array_key_last ( $fields )) $this -> robot -> api [ 'fields' ] .= ', ' ;
}
}
// Запрос
$request = json_decode (( $this -> robot -> browser -> request ( 'POST' , 'messages.getHistory' , [ 'form_params' => $this -> robot -> api -> settings ]) -> getBody () -> getContents ()));
// Проверка на наличие ошибок в ответе от ВКонтакте
if ( isset ( $request -> error )) throw new Exception ( 'ВКонтакте: ' . $request -> error -> error_msg , $request -> error -> error_code );
return $request -> response ;
}
@ -712,7 +814,7 @@ final class messages extends method
match ( $name ) {
'send_mode' => $this -> send_mode = $value ,
'generate_mode' => $this -> generate_mode = $value ,
' destination' => $this -> destination = $value ,
' peer_id', ' destination' => $this -> peer_id = $value ,
'text' => $this -> text = $value ,
'lat' , 'latitude' => $this -> lat = $value ,
'long' , 'longitude' => $this -> long = $value ,
@ -726,6 +828,12 @@ final class messages extends method
'mentions' => $this -> disable_mentions = ! $value ,
'intent' => $this -> intent = $value ,
'subscribe_id' => $this -> subscribe_id = $value ,
'offset' => $this -> offset = $value ,
'count' , 'amount' => $this -> count = $value ,
'start_message_id' => $this -> start_message_id = $value ,
'rev' => $this -> rev = $value ,
'extended' => $this -> extended = $value ,
'fields' => $this -> fields = $value ,
default => throw new Exception ( " Свойство $name не найдено " , 404 )
};
}
@ -742,7 +850,7 @@ final class messages extends method
return match ( $name ) {
'send_mode' => $this -> send_mode ,
'generate_mode' => $this -> generate_mode ,
' destination' => $this -> destination ,
' peer_id', ' destination' => $this -> peer_id ,
'text' => $this -> text ,
'lat' , 'latitude' => $this -> lat ,
'long' , 'longitude' => $this -> long ,
@ -754,6 +862,12 @@ final class messages extends method
'disable_mentions' , 'mentions' => $this -> disable_mentions ,
'intent' => $this -> intent ,
'subscribe_id' => $this -> subscribe_id ,
'offset' => $this -> offset ,
'count' , 'amount' => $this -> count ,
'start_message_id' => $this -> start_message_id ,
'rev' => $this -> rev ,
'extended' => $this -> extended ,
'fields' => $this -> fields ,
default => throw new Exception ( " Свойство $name не найдено " , 404 )
};
}