This repository has been archived on 2024-10-16. You can view files and clone it, but cannot push or open issues or pull requests.
spetsresurs-telegram-robot-.../mirzaev/telegram/robot/entry/system/public/robot.php

119 lines
2.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// Фреймворк Telegram
use Zanzara\Zanzara;
use Zanzara\Context;
use Zanzara\Config;
// Фреймворк для Google Sheets
use Flow\ETL\Adapter\GoogleSheet\GoogleSheetRange,
Flow\ETL\Adapter\GoogleSheet\GoogleSheetExtractor,
Flow\ETL\Adapter\GoogleSheet\Columns,
Flow\ETL\Flow,
Flow\ETL\Config as _config,
Flow\ETL\FlowContext,
Flow\ETL\Row\Entry,
Flow\ETL\Row,
Flow\ETL\DSL\To,
Flow\ETL\DSL\From;
// Фреймворк для Google API
use Google\Client,
Google\Service\Sheets,
Google\Service\Sheets\ValueRange;
require __DIR__ . '/../../../../../../vendor/autoload.php';
/* ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1); */
$config = new Config();
$config->setParseMode(Config::PARSE_MODE_MARKDOWN);
$bot = new Zanzara(require(__DIR__ . '/../settings/key.php'), $config);
$timer;
$member;
$bot->onMessage(function (Context $ctx) {
if ($members = $ctx->getMessage()->getNewChatMembers()) {
// Новый аккаунт в чате
$ctx->sendMessage('⚠️ Введите ваш табельный номер для авторизации', ['reply_to_message_id' => $ctx->getMessage()->getMessageId()])
->then(function () use ($ctx, $members) {
global $member;
// Инициализация идентификатора сотрудника
$member = $id = $members[0]->getId();
global $timer;
$timer = React\Promise\Timer\sleep(180);
$timer->then(
function ($value) use ($ctx, $id) {
// Изгнание из чата
$ctx->kickChatMember($ctx->getMessage()->getChat()->getId(), $id);
$ctx->wipeCache();
$ctx->endConversation();
},
function () {
}
);
$ctx->nextStep('check');
});
}
});
function check(Context $ctx)
{
global $member;
if ($member === $ctx->getMessage()->getFrom()->getId()) {
// Отправителем табельного номера является тот кто подключился к серверу
$id = $ctx->getMessage()->getText();
$settings = json_decode(require(__DIR__ . '/../settings/workers/google.php'), true);
$document = require(__DIR__ . '/../settings/workers/document.php');
$sheets = require(__DIR__ . '/../settings/workers/sheets.php');
$client = new Client();
$client->setScopes(Sheets::SPREADSHEETS);
$client->setAuthConfig($settings);
$api = new Sheets($client);
foreach ($sheets as $sheet) {
$rows = (new Flow())->read(new GoogleSheetExtractor($api, $document, new Columns($sheet, 'A', 'A'), true, 1000));
foreach ($rows->fetch(10000) as $row) {
// Перебор строк
if ($id === $row->toArray()['ID']) {
$ctx->sendMessage("✅ Авторизован сотрудник: $id");
global $timer;
// Отмена блокировки
$timer->cancel();
$ctx->endConversation();
return;
}
}
$ctx->sendMessage("Не найден сотрудник: $id");
}
}
}
$bot->run();