92 lines
2.7 KiB
PHP
92 lines
2.7 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace mirzaev\vk\chat;
|
||
|
||
// Файлы проекта
|
||
use mirzaev\vk\chat\pattern,
|
||
mirzaev\vk\chat\command;
|
||
|
||
/**
|
||
* Ядро
|
||
*
|
||
* @package mirzaev\vk\chat
|
||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||
*/
|
||
class core
|
||
{
|
||
/**
|
||
* @var string|null $prefix Префикс
|
||
*/
|
||
protected ?string $prefix;
|
||
|
||
/**
|
||
* @var array $patterns Реестр шаблонов
|
||
*/
|
||
protected array $patterns = [];
|
||
|
||
/**
|
||
* Записать шаблон в реестр
|
||
*
|
||
* @param string|pattern $pattern Текст или инстанция шаблона
|
||
* @param command ...$commands Команды
|
||
*
|
||
* @return pattern Инстанция шаблона
|
||
*/
|
||
public function pattern(string|pattern $pattern, command ...$commands): pattern
|
||
{
|
||
// Инициализация шаблона
|
||
if (is_string($pattern)) $pattern = new pattern($pattern);
|
||
|
||
foreach ($commands as $command) {
|
||
// Перебор команд
|
||
|
||
// Подключение команд к шаблону
|
||
$pattern->command($command);
|
||
}
|
||
|
||
// Запись в реестр
|
||
$this->patterns .= [$pattern];
|
||
|
||
return $pattern;
|
||
}
|
||
|
||
/**
|
||
* Обработать сообщение
|
||
*
|
||
* Проверяет наличие совпадений с шаблонами, после чего проверяет
|
||
* все связанные с шаблоном команды и выполняет при совпадении
|
||
*
|
||
* @param array $update Событие
|
||
*
|
||
* @return bool Статус сохранения
|
||
*/
|
||
public function handle(array $update): bool
|
||
{
|
||
// Инициализация текста
|
||
$text = $update['object']['message']['text'];
|
||
|
||
// Проверка на наличие текста и на использование префикса
|
||
if (empty($text) or isset($this->prefix) && !str_starts_with($text, $this->prefix)) return false;
|
||
|
||
foreach ($this->patterns as $pattern) {
|
||
// Перебор шаблонов
|
||
|
||
// Инициализация буфера параметров
|
||
$parameters = [];
|
||
|
||
if($pattern->check($text, $parameters)) {
|
||
// Пройдена проверка на совпадение с шаблоном
|
||
|
||
// Выполнение команд связанных с шаблоном
|
||
$pattern->handle($update['object']['message']['from_id'], $parameters);
|
||
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
}
|