2020-07-09 22:17:26 +07:00
|
|
|
<?php
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
namespace VK\API\Methods;
|
|
|
|
|
2020-09-26 17:28:13 +07:00
|
|
|
use \Exception;
|
|
|
|
use \VK\Core,
|
|
|
|
\VK\Robots\RobotAbstract;
|
2020-07-09 22:17:26 +07:00
|
|
|
|
2020-09-26 17:28:13 +07:00
|
|
|
/**
|
|
|
|
* Сообщение
|
|
|
|
*
|
|
|
|
* Отправляет сообщение
|
|
|
|
*
|
|
|
|
* @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];)
|
|
|
|
*/
|
2020-07-09 22:17:26 +07:00
|
|
|
class Message
|
|
|
|
{
|
2020-09-26 17:28:13 +07:00
|
|
|
/**
|
|
|
|
* Отправить сообщение
|
|
|
|
*
|
|
|
|
* @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
|
2020-07-09 22:17:26 +07:00
|
|
|
{
|
2020-09-26 17:28:13 +07:00
|
|
|
$random_id = time();
|
|
|
|
$check = false;
|
|
|
|
|
|
|
|
// Режим доставки сообщений (усложнение по возрастанию)
|
|
|
|
if ($mode >= 1) {
|
|
|
|
// Дополнительное умножение
|
|
|
|
$random_id *= rand();
|
2020-07-09 22:17:26 +07:00
|
|
|
|
2020-09-26 17:28:13 +07:00
|
|
|
if ($mode >= 2) {
|
|
|
|
// Проверка отправки (по умолчанию)
|
|
|
|
$check = true;
|
|
|
|
}
|
2020-09-17 19:27:12 +07:00
|
|
|
}
|
|
|
|
|
2020-09-26 17:28:13 +07:00
|
|
|
// Запрос: отправить сообщение
|
|
|
|
$request = $from->browser()->api('messages.send', [
|
2020-07-09 22:17:26 +07:00
|
|
|
'access_token' => $from->token,
|
|
|
|
'v' => $from->version,
|
2020-09-26 17:28:13 +07:00
|
|
|
'peer_id' => $to,
|
|
|
|
'message' => $message,
|
|
|
|
'random_id' => $random_id
|
|
|
|
]);
|
2020-07-09 22:17:26 +07:00
|
|
|
|
2020-09-26 17:28:13 +07:00
|
|
|
if ($check) {
|
|
|
|
// Если активирована проверка отправленного сообщения
|
2020-07-09 22:17:26 +07:00
|
|
|
|
2020-09-26 17:28:13 +07:00
|
|
|
// Запрос: получить сообщение по 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);
|
|
|
|
}
|
|
|
|
}
|
2020-07-09 22:17:26 +07:00
|
|
|
|
2020-09-26 17:28:13 +07:00
|
|
|
return $request;
|
2020-07-09 22:17:26 +07:00
|
|
|
}
|
|
|
|
}
|