Compare commits
2 Commits
72d704cd0e
...
395c90f64c
Author | SHA1 | Date | |
---|---|---|---|
Arsen Mirzaev Tatyano-Muradovich | 395c90f64c | ||
Arsen Mirzaev Tatyano-Muradovich | aaef0ea95d |
|
@ -38,7 +38,7 @@
|
||||||
"triagens/arangodb": "~3.8",
|
"triagens/arangodb": "~3.8",
|
||||||
"guzzlehttp/guzzle": "^7.4",
|
"guzzlehttp/guzzle": "^7.4",
|
||||||
"mirzaev/arangodb": "^1.0",
|
"mirzaev/arangodb": "^1.0",
|
||||||
"mirzaev/vk": "^4.2",
|
"mirzaev/vk": "^4.4",
|
||||||
"mirzaev/vk-arangodb": "^1.0.1",
|
"mirzaev/vk-arangodb": "^1.0.1",
|
||||||
"mirzaev/vk-chat": "^1.0"
|
"mirzaev/vk-chat": "^1.0"
|
||||||
},
|
},
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "ab14cf737c9cf81d65b0e8bb20a7c4f8",
|
"content-hash": "6779413522c40533861a4ffbaf0c3eb2",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/guzzle",
|
"name": "guzzlehttp/guzzle",
|
||||||
|
@ -500,22 +500,25 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mirzaev/vk",
|
"name": "mirzaev/vk",
|
||||||
"version": "4.2.0",
|
"version": "4.4.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.mirzaev.sexy/mirzaev/vk",
|
"url": "https://git.mirzaev.sexy/mirzaev/vk",
|
||||||
"reference": "5bd94e5ca3ceeb73aeaa5d6db9fdef1586cfb155"
|
"reference": "e670be5816177260626f43d1795f6180320395b8"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"guzzlehttp/guzzle": "~7.5",
|
"guzzlehttp/guzzle": "^7.5",
|
||||||
"jasny/error-handler": "~0.2",
|
"jasny/error-handler": "^0.2",
|
||||||
"mirzaev/accounts": "~1.2.0",
|
"mirzaev/accounts": "^1.2.0",
|
||||||
"monolog/monolog": "~1.6",
|
"monolog/monolog": "^1.6",
|
||||||
"php": "~8.1",
|
"php": "^8.1",
|
||||||
"psr/log": "~1.0"
|
"psr/log": "^1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "~9.5"
|
"phpunit/phpunit": "^9.5"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-sodium": "Can be selected in some conditions to increase security"
|
||||||
},
|
},
|
||||||
"type": "framework",
|
"type": "framework",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -545,11 +548,11 @@
|
||||||
"docs": "https://git.mirzaev.sexy/mirzaev/vk/wiki",
|
"docs": "https://git.mirzaev.sexy/mirzaev/vk/wiki",
|
||||||
"issues": "https://git.mirzaev.sexy/mirzaev/vk/issues"
|
"issues": "https://git.mirzaev.sexy/mirzaev/vk/issues"
|
||||||
},
|
},
|
||||||
"time": "2022-11-07T16:06:13+00:00"
|
"time": "2022-11-08T15:12:50+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mirzaev/vk-arangodb",
|
"name": "mirzaev/vk-arangodb",
|
||||||
"version": "1.0.1",
|
"version": "1.0.x-dev",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.mirzaev.sexy/mirzaev/vk-arangodb",
|
"url": "https://git.mirzaev.sexy/mirzaev/vk-arangodb",
|
||||||
|
@ -603,11 +606,11 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mirzaev/vk-chat",
|
"name": "mirzaev/vk-chat",
|
||||||
"version": "1.0.x-dev",
|
"version": "1.1.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.mirzaev.sexy/mirzaev/vk-chat",
|
"url": "https://git.mirzaev.sexy/mirzaev/vk-chat",
|
||||||
"reference": "40ceb7a86c38a0b878adca44c5729407631e7e82"
|
"reference": "dae9b2b5b19796029e0e67f2194f74b21041741f"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.1"
|
"php": "^8.1"
|
||||||
|
@ -648,7 +651,7 @@
|
||||||
"type": "funding"
|
"type": "funding"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-11-07T13:01:09+00:00"
|
"time": "2022-11-08T15:10:17+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "monolog/monolog",
|
"name": "monolog/monolog",
|
||||||
|
|
|
@ -27,7 +27,7 @@ require SYSTEM_PATH_ROOT . '../../../../../vendor/autoload.php';
|
||||||
$core = core::init();
|
$core = core::init();
|
||||||
|
|
||||||
// Инициализция робота
|
// Инициализция робота
|
||||||
$robot = $core->group('group id here')->key('group key here');
|
$robot = $core->group(217012993)->key('');
|
||||||
|
|
||||||
// Инициализация обработчика LongPoll API
|
// Инициализация обработчика LongPoll API
|
||||||
$longpoll = new longpoll($robot);
|
$longpoll = new longpoll($robot);
|
||||||
|
@ -42,52 +42,141 @@ $database->truncate();
|
||||||
$chat = new chat;
|
$chat = new chat;
|
||||||
|
|
||||||
// Инициализация команды "ролевое действие"
|
// Инициализация команды "ролевое действие"
|
||||||
$chat->pattern('/(*UTF8)\*([A-я\w\s]+)\*/', new command(function (array $update, string $text) use ($robot) {
|
$chat->pattern('/(*UTF8)^\*([^\*]*)\*$/', new command(function (array $update, string $text) use ($robot) {
|
||||||
try {
|
try {
|
||||||
// Удаление сообщения
|
// Удаление сообщения
|
||||||
$robot->message()->delete($update['object']['message']['conversation_message_id'], $update['object']['message']['peer_id']);
|
$robot->message()->delete($update['object']['message']['conversation_message_id'], $update['object']['message']['peer_id']);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Конвертация кодировки текста сообщения
|
// Обработка ссылок на аккаунты
|
||||||
// $text = mb_convert_encoding($text, 'UTF-8');
|
$text = preg_replace_callback('/(*UTF8)(?=[^\[]+)[^\[]+|\[(id\d+)\|([^\]]+)\]/', fn (array $matches) => isset($matches[2]) ? '@' . $matches[1] . ' (' . $matches[2] . ')' : $matches[0] ?? $text, $text, 500);
|
||||||
|
|
||||||
// Инициализация данных аккаунта отправителя
|
// Инициализация индикаторов наличия изменённого псевдонима у получателя и отпрвителя
|
||||||
$sender = $robot->user()->get($update['object']['message']['from_id']);
|
$sender_changed = $receiver_changed = false;
|
||||||
|
|
||||||
|
// Инициализация псевдонима получателя
|
||||||
|
$receiver_alias = '';
|
||||||
|
|
||||||
if (isset($update['object']['message']['reply_message'])) {
|
if (isset($update['object']['message']['reply_message'])) {
|
||||||
// Найдено сообщение для ответа
|
// Найдено сообщение для ответа
|
||||||
|
|
||||||
// Инициализация данных аккаунта отправившего сообщение для ответа (получателя)
|
if ($update['object']['message']['reply_message']['from_id'] > 0) {
|
||||||
$receiver = $robot->user()->get($update['object']['message']['reply_message']['from_id']);
|
// Ответ на сообщение пользователя
|
||||||
|
|
||||||
// Поиск падежей для получателя
|
// Инициализация данных аккаунта получателя
|
||||||
preg_match_all('/(*UTF8)\s\|([А-я\w]+)$/', $text, $matches);
|
$receiver = $robot->user()->get($update['object']['message']['reply_message']['from_id']);
|
||||||
|
|
||||||
// Инициализация падежа получателя
|
if (isset($receiver)) {
|
||||||
$receiver_case = $matches[1][0];
|
// Найден получатель
|
||||||
|
|
||||||
// Инициализация цели для ролевого действия
|
// Обработка падежа получателя
|
||||||
$target = " @id$receiver->id ($receiver->first_name$receiver_case)";
|
$text = preg_replace_callback('/(*UTF8)^(.*)\|([^$]+)$/', function (array $matches) use ($text, &$receiver_alias, $receiver): string {
|
||||||
} else $target = '';
|
// Инициализация псевдонима отправителя
|
||||||
|
$alias = preg_replace('/\)/', ')', $matches[2], 300);
|
||||||
|
|
||||||
// Поиск падежей для отправителя
|
// Инициализация псевдонима получателя
|
||||||
preg_match_all('/(*UTF8)^\|([А-я\w]+)\s/', $text, $matches);
|
$receiver_alias = " @id$receiver->id ($receiver->first_name" . (empty($alias) ? '' : $alias) . ')';
|
||||||
|
|
||||||
// Инициализация падежа отправителя
|
return $matches[1] ?? $matches[0] ?? $text;
|
||||||
$sender_case = $matches[1][0];
|
}, $text, 1);
|
||||||
|
|
||||||
|
if (empty($receiver_alias)) {
|
||||||
|
// Не найден псевдоним получателя
|
||||||
|
|
||||||
|
// Обработка псевдонима получателя
|
||||||
|
$text = preg_replace_callback('/(*UTF8)^(.*)\(([^\)]*)\)$/', function (array $matches) use ($text, &$receiver_alias, $receiver): string {
|
||||||
|
// Инициализация псевдонима отправителя
|
||||||
|
$alias = preg_replace('/\)/', ')', $matches[2], 300);
|
||||||
|
|
||||||
|
// Инициализация псевдонима получателя
|
||||||
|
$receiver_alias = " @id$receiver->id (" . (empty($alias) ? $receiver->first_name : $alias) . ')';
|
||||||
|
|
||||||
|
return $matches[1] ?? $matches[0] ?? $text;
|
||||||
|
}, $text, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверка на пустого получателя
|
||||||
|
if (empty(trim($receiver_alias))) {
|
||||||
|
// Пустой текст получателя
|
||||||
|
|
||||||
|
// Реинициализация текста получателя
|
||||||
|
$receiver_alias = " @id$receiver->id ($receiver->first_name)";
|
||||||
|
} else $receiver_changed = true;
|
||||||
|
} else {
|
||||||
|
// Ответ на сообщение группы (подразумевается $update['object']['message']['reply_message']['from_id'] < 0)
|
||||||
|
|
||||||
|
// Инициализация данных аккаунта отправителя
|
||||||
|
$sender = $robot->user()->get($update['object']['message']['from_id'], name_case: 'gen');
|
||||||
|
|
||||||
|
// Отправка сообщения с ролевым действием
|
||||||
|
$robot->message()->send($update['object']['message']['peer_id'], "@club217012993 (Бобби) избил @id$sender->id ($sender->first_name) до полусмерти", disable_mentions: true);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Инициализация псевдонима отправителя
|
||||||
|
$sender_alias = '';
|
||||||
|
|
||||||
|
// Инициализация данных аккаунта отправителя
|
||||||
|
$sender = $robot->user()->get($update['object']['message']['from_id']);
|
||||||
|
|
||||||
|
// Обработка падежа отправителя
|
||||||
|
$text = preg_replace_callback('/(*UTF8)^\|([^\s]+)(.*)$/', function (array $matches) use ($text, $sender, &$sender_alias): string {
|
||||||
|
// Инициализация псевдонима отправителя
|
||||||
|
$alias = preg_replace('/\)/', ')', $matches[1], 300);
|
||||||
|
|
||||||
|
// Инициализация ссылки на отправителя
|
||||||
|
$sender_alias = "@id$sender->id ($sender->first_name" . (empty($alias) ? '' : $alias) . ') ';
|
||||||
|
|
||||||
|
return $matches[2] ?? $matches[0] ?? $text;
|
||||||
|
}, $text, 1);
|
||||||
|
|
||||||
|
if (empty($sender_alias)) {
|
||||||
|
// Не найден псевдоним отправителя
|
||||||
|
|
||||||
|
// Обработка псевдонима отправителя
|
||||||
|
$text = preg_replace_callback('/(*UTF8)^\(([^\)]*)\)(.*)$/', function (array $matches) use ($text, $sender, &$sender_alias): string {
|
||||||
|
// Инициализация псевдонима отправителя
|
||||||
|
$alias = preg_replace('/\)/', ')', $matches[1], 300);
|
||||||
|
|
||||||
|
// Инициализация ссылки на отправителя
|
||||||
|
$sender_alias = "@id$sender->id (" . (empty($alias) ? $sender->first_name : $alias) . ') ';
|
||||||
|
|
||||||
|
return $matches[2] ?? $matches[0] ?? $text;
|
||||||
|
}, $text, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty(trim($sender_alias))) {
|
||||||
|
// Пустой текст отправителя
|
||||||
|
|
||||||
|
// Реинициализация текста отправителя
|
||||||
|
$sender_alias = "@id$sender->id ($sender->first_name) ";
|
||||||
|
} else $sender_changed = true;
|
||||||
|
|
||||||
// Удаление команд падежей из строки
|
// Удаление команд падежей из строки
|
||||||
$text = preg_replace('/(*UTF8)\s?\|[А-я\w]+\s?/', '', $text, 500);
|
$text = preg_replace('/(*UTF8)\|[А-яё\w]+/', '', $text, 500);
|
||||||
|
|
||||||
|
if (empty($text = trim($text)) && !$sender_changed && !$receiver_changed) {
|
||||||
|
// Пустой текст сообщения, а у получателя и отправителя не изменены псевдонимы
|
||||||
|
|
||||||
|
// Удаление пробела у отправителя
|
||||||
|
$sender_alias = trim($sender_alias);
|
||||||
|
|
||||||
|
// Реинициализация текста сообщения
|
||||||
|
$text = ', мне @club191417381 (Шамиля) позвать?';
|
||||||
|
}
|
||||||
|
|
||||||
// Отправка сообщения с ролевым действием
|
// Отправка сообщения с ролевым действием
|
||||||
$robot->message($update['object']['message']['peer_id'], "@id$sender->id ($sender->first_name$sender_case) $text$target");
|
$robot->message()->send($update['object']['message']['peer_id'], "$sender_alias$text$receiver_alias", disable_mentions: true);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
$longpoll->handle(function (array $update) use ($robot, $database, $chat) {
|
$longpoll->handle(function (array $update) use ($robot, $database, $chat) {
|
||||||
// Обработка события
|
// Обработка события
|
||||||
|
|
||||||
var_dump($update);
|
// var_dump($update);
|
||||||
|
|
||||||
// Сохранение события в базе данных
|
// Сохранение события в базе данных
|
||||||
// $database->save($update);
|
// $database->save($update);
|
||||||
|
|
Loading…
Reference in New Issue