@@ -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 ?str ing $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/method /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/method /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 )
};
}