This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich 2024-04-17 22:59:59 +07:00
parent b1f3be28e0
commit 69c34bb9f9

View File

@ -25,63 +25,86 @@ use Google\Client,
require __DIR__ . '/../../../../../../../vendor/autoload.php'; require __DIR__ . '/../../../../../../../vendor/autoload.php';
/* ini_set('error_reporting', E_ALL); ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1); ini_set('display_errors', 1);
ini_set('display_startup_errors', 1); */ ini_set('display_startup_errors', 1);
$config = new Config(); $config = new Config();
$config->setParseMode(Config::PARSE_MODE_MARKDOWN); $config->setParseMode(Config::PARSE_MODE_MARKDOWN);
$bot = new Zanzara(require(__DIR__ . '/../settings/key.php'), $config); $bot = new Zanzara(require(__DIR__ . '/../settings/key.php'), $config);
$timer;
$member;
$bot->onMessage(function (Context $ctx) { $bot->onMessage(function (Context $ctx) {
if ($members = $ctx->getMessage()->getNewChatMembers()) { if ($members = $ctx->getMessage()->getNewChatMembers()) {
// Новый аккаунт в чате // Новый аккаунт в чате
$ctx->sendMessage('⚠️ Введите ваш табельный номер для авторизации', ['reply_to_message_id' => $ctx->getMessage()->getMessageId()]) $ctx->sendMessage('⚠️ Введите ваш табельный номер для авторизации', ['reply_to_message_id' => $ctx->getMessage()->getMessageId()])
->then(function () use ($ctx, $members) { ->then(function ($message) use ($ctx, $members) {
global $member;
// Инициализация идентификатора сотрудника // Инициализация идентификатора сотрудника
$member = $id = $members[0]->getId(); $id = $members[0]->getId();
global $timer; $ctx->getGlobalDataItem("member_{$id}_request")
->then(
function ($old) use ($ctx, $id, $message) {
$timer = React\Promise\Timer\sleep(180); $timer = function ($ctx, $id, $message) {
$ctx->setGlobalDataItem("member_{$id}_request", $message)
->then(function () use ($ctx, $id) {
// @todo Если сотрудник вышел из чата и снова зашёл, ответил правильно и его оставило, то всё равно забанит из-за прошлой сессии // Инициализация таймера
$timer->then( React\Promise\Timer\sleep(180)->then(
function ($value) use ($ctx, $id) { function () use ($ctx, $id) {
$ctx->getGlobalDataItem("member_{$id}_request")
->then(
function ($message) use ($ctx, $id) {
if ($message) {
// Изгнание из чата // Изгнание из чата
$ctx->kickChatMember($ctx->getMessage()->getChat()->getId(), $id); $ctx->kickChatMember($message->getChat()->getId(), $id)
->then(function () use ($ctx, $id, $message) {
// Удаление сообщения из сессионного хранилища
$ctx->deleteGlobalDataItem("member_{$id}_request");
$ctx->wipeCache(); // Удаление сообщения
$ctx->deleteMessage($message->getChat()->getId(), $message->getMessageId());
$ctx->endConversation(); });
}
}, },
function () { function () {
} }
); );
$ctx->nextStep('check');
});
} }
);
}); });
};
function check(Context $ctx) if ($old) {
{ $ctx->deleteGlobalDataItem("member_{$id}_request")
global $member; ->then(function () use ($ctx, $id, $message, $timer, $old) {
$ctx->deleteMessage($old->getChat()->getId(), $old->getMessageId())
->then(function () use ($ctx, $id, $message, $timer) {
$timer($ctx, $id, $message);
});
});
} else $timer($ctx, $id, $message);
}
);
});
} else {
// Любое сообщение
if ($member === $ctx->getMessage()->getFrom()->getId()) { // Инициализация сообщения
// Отправителем табельного номера является тот кто подключился к серверу $message = $ctx->getMessage();
// Инициализация идентификатора (только цифры) // Инициализация идентификатора отправителя сообщения
$id = preg_replace('/[^\d]/', '', $ctx->getMessage()->getText()); $id = $message->getFrom()->getId();
$ctx->getGlobalDataItem("member_{$id}_request")
->then(
function ($_message) use ($ctx, $id, $message) {
if ($_message) {
// Инициализация переданного идентификатора (только цифры)
$worker = preg_replace('/[^\d]/', '', $message->getText() ?? '');
$settings = json_decode(require(__DIR__ . '/../settings/workers/google.php'), true); $settings = json_decode(require(__DIR__ . '/../settings/workers/google.php'), true);
$document = require(__DIR__ . '/../settings/workers/document.php'); $document = require(__DIR__ . '/../settings/workers/document.php');
@ -98,23 +121,25 @@ function check(Context $ctx)
foreach ($rows->fetch(10000) as $row) { foreach ($rows->fetch(10000) as $row) {
// Перебор строк // Перебор строк
if ($id === $row->toArray()['ID']) { if ($worker === $row->toArray()['ID']) {
$ctx->sendMessage("✅ Авторизован сотрудник: $id"); $ctx->sendMessage("✅ Авторизован сотрудник: $worker", ['reply_to_message_id' => $message->getMessageId()]);
global $timer; // Удаление сообщения из сессионного хранилища
$ctx->deleteGlobalDataItem("member_{$id}_request");
// Отмена блокировки // Удаление сообщения
$timer->cancel(); $ctx->deleteMessage($_message->getChat()->getId(), $_message->getMessageId());
$ctx->endConversation();
return; return;
} }
} }
}
if (!empty($id)) $ctx->sendMessage("Не найден сотрудник: $id"); if (!empty($worker)) $ctx->sendMessage("Не найден сотрудник: $id", ['reply_to_message_id' => $message->getMessageId()]);
} }
} }
);
} }
});
$bot->run(); $bot->run();