fix
This commit is contained in:
parent
b1f3be28e0
commit
69c34bb9f9
|
@ -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();
|
||||||
|
|
Reference in New Issue