vk/system/API/Methods/Message.php

80 lines
2.6 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
namespace VK\API\Methods;
use \Exception;
use \VK\Core,
\VK\Robots\RobotAbstract;
/**
* Сообщение
*
* Отправляет сообщение
*
* @method public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2) Отправить сообщение
*
* @see https://vk.com/dev/messages.send
* @see https://vk.com/dev/messages.getById
*
* @package VK\API\Methods\Message
* @author Арсен Мирзаев <red@hood.su>
*
* @todo Добавить обработку ошибок ($request['errors];)
*/
class Message
{
/**
* Отправить сообщение
*
* @param $from Экземпляр робота
* @param int $to Идентификатор получателя
* @param string $message Текст сообщения
* @param int $mode Режим доставки сообщения
*
* @return array Ответ сервера
*/
public static function put(RobotAbstract $from, int $to, string $message, int $mode = 2): array
{
$random_id = time();
$check = false;
// Режим доставки сообщений (усложнение по возрастанию)
if ($mode >= 1) {
// Дополнительное умножение
$random_id *= rand();
if ($mode >= 2) {
// Проверка отправки (по умолчанию)
$check = true;
}
}
// Запрос: отправить сообщение
$request = $from->browser()->api('messages.send', [
'access_token' => $from->token,
'v' => $from->version,
'peer_id' => $to,
'message' => $message,
'random_id' => $random_id
]);
if ($check) {
// Если активирована проверка отправленного сообщения
// Запрос: получить сообщение по ID
if ($from->browser()->api('messages.getById', [
'access_token' => $from->token,
'v' => $from->version,
'message_ids' => is_int($request["response"]) ? $request["response"] : $request["response"]['message_id']
])['response']['count'] === 0) {
// Если сообщения не существует, то повтор
self::put($from, $to, $message, $mode);
}
}
return $request;
}
}