Обновление под новую систему модулей
This commit is contained in:
parent
e4319f8854
commit
4f2d16d7b1
|
@ -2,6 +2,15 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
// Файлы проекта
|
||||
use mirzaev\vk\robot\bobby\programs\roleplay_action,
|
||||
mirzaev\vk\robot\bobby\programs\character_escaping,
|
||||
mirzaev\vk\robot\bobby\programs\reply_to_group,
|
||||
mirzaev\vk\robot\bobby\programs\mentions_converter,
|
||||
mirzaev\vk\robot\bobby\programs\variables,
|
||||
mirzaev\vk\robot\bobby\programs\buttons_generator,
|
||||
mirzaev\vk\robot\bobby\programs\postprocessor;
|
||||
|
||||
// Фреймворк ВКонтакте
|
||||
use mirzaev\vk\core,
|
||||
mirzaev\vk\api\longpoll;
|
||||
|
@ -13,8 +22,7 @@ use mirzaev\arangodb\connection;
|
|||
use mirzaev\vk\arangodb\longpoll as database;
|
||||
|
||||
// Модуль чат-робота для фреймворка ВКонтакте
|
||||
use mirzaev\vk\chat\core as chat,
|
||||
mirzaev\vk\chat\command;
|
||||
use mirzaev\vk\chat\core as chat;
|
||||
|
||||
// Инициализация
|
||||
defined('SYSTEM_PATH_ROOT') or define('SYSTEM_PATH_ROOT', __DIR__ . '/../');
|
||||
|
@ -32,154 +40,45 @@ $robot = $core->group(217012993)->key('');
|
|||
// Инициализация обработчика LongPoll API
|
||||
$longpoll = new longpoll($robot);
|
||||
|
||||
// Инициализация базы данных
|
||||
$database = new database(new connection(require SYSTEM_PATH_ROOT . 'settings/arangodb.php'));
|
||||
// Инициализация базы данных ВКонтакте
|
||||
$vk = new database(new connection(require SYSTEM_PATH_ROOT . 'settings/vk.php'));
|
||||
|
||||
// Очистка базы данных (тестирование)
|
||||
$database->truncate();
|
||||
// Инициализация базы данных Бобби
|
||||
$bobby = new database(new connection(require SYSTEM_PATH_ROOT . 'settings/bobby.php'));
|
||||
|
||||
// Очистка базы данных ВКонтакте (тестирование)
|
||||
$vk->truncate();
|
||||
|
||||
// Очистка базы данных Бобби (тестирование)
|
||||
$bobby->truncate();
|
||||
|
||||
// Инициализация модуля "чат-робот"
|
||||
$chat = new chat;
|
||||
|
||||
// Инициализация команды "ролевое действие"
|
||||
$chat->pattern('/(*UTF8)^\*([^\*]*)\*$/', new command(function (array $update, string $text) use ($robot) {
|
||||
try {
|
||||
// Удаление сообщения
|
||||
$robot->message()->delete($update['object']['message']['conversation_message_id'], $update['object']['message']['peer_id']);
|
||||
} catch (Exception $e) {
|
||||
}
|
||||
// Инициализация программы "экранирование символов"
|
||||
$chat->command('/(*UTF8)\\\[^\\\]|[^\\\]+/', new character_escaping($robot));
|
||||
|
||||
// Обработка ссылок на аккаунты
|
||||
$text = preg_replace_callback('/(*UTF8)(?=[^\[]+)[^\[]+|\[(id\d+)\|([^\]]+)\]/', fn (array $matches) => isset($matches[2]) ? '@' . $matches[1] . ' (' . $matches[2] . ')' : $matches[0] ?? $text, $text, 500);
|
||||
// Инициализация программ: "ответ на сообщение группы", "конвертация упоминаний" и "переменные"
|
||||
$chat->command(
|
||||
'/(*UTF8)^.*$/',
|
||||
new reply_to_group($robot),
|
||||
new mentions_converter($robot)
|
||||
);
|
||||
|
||||
// Инициализация индикаторов наличия изменённого псевдонима у получателя и отпрвителя
|
||||
$sender_changed = $receiver_changed = false;
|
||||
// Инициализация программы "переменные"
|
||||
$chat->command('/(*UTF8)^\(.*\)$/', new variables($robot));
|
||||
|
||||
// Инициализация псевдонима получателя
|
||||
$receiver_alias = '';
|
||||
// Инициализация программы "ролевое действие"
|
||||
$chat->command('/(*UTF8)^\*([^\*]*)\*(?=\n|\r|$|\s*\[|\s*\()/', new roleplay_action($robot));
|
||||
|
||||
if (isset($update['object']['message']['reply_message'])) {
|
||||
// Найдено сообщение для ответа
|
||||
// Инициализация программы "генератор кнопок"
|
||||
$chat->command('/(*UTF8){.+\*[^}]+\*}/', new buttons_generator($robot));
|
||||
|
||||
if ($update['object']['message']['reply_message']['from_id'] > 0) {
|
||||
// Ответ на сообщение пользователя
|
||||
|
||||
// Инициализация данных аккаунта получателя
|
||||
$receiver = $robot->user()->get($update['object']['message']['reply_message']['from_id']);
|
||||
|
||||
if (isset($receiver)) {
|
||||
// Найден получатель
|
||||
|
||||
// Обработка падежа получателя
|
||||
$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 ($receiver->first_name" . (empty($alias) ? '' : $alias) . ')';
|
||||
|
||||
return $matches[1] ?? $matches[0] ?? $text;
|
||||
}, $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)\|[А-яё\w]+/', '', $text, 500);
|
||||
|
||||
if (empty($text = trim($text)) && !$sender_changed && !$receiver_changed) {
|
||||
// Пустой текст сообщения, а у получателя и отправителя не изменены псевдонимы
|
||||
|
||||
// Удаление пробела у отправителя
|
||||
$sender_alias = trim($sender_alias);
|
||||
|
||||
// Реинициализация текста сообщения
|
||||
$text = ', мне @club191417381 (Шамиля) позвать?';
|
||||
}
|
||||
|
||||
// Отправка сообщения с ролевым действием
|
||||
$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, $vk, $bobby, $chat) {
|
||||
// Обработка события
|
||||
|
||||
// var_dump($update);
|
||||
|
||||
// Сохранение события в базе данных
|
||||
// $database->save($update);
|
||||
// Сохранение в базе данных
|
||||
$vk->save($update);
|
||||
|
||||
// Обработка команды
|
||||
$chat->handle($update);
|
||||
|
|
Loading…
Reference in New Issue