Добавлена пагинация, файл с эмодзи, функция генерации эмодзи
This commit is contained in:
parent
d51640030a
commit
bcb58b7a78
File diff suppressed because it is too large
Load Diff
|
@ -95,7 +95,8 @@ function registration(string $id, string $number): bool
|
||||||
)) return false;
|
)) return false;
|
||||||
|
|
||||||
// Инициализация ребра: workers -> viber
|
// Инициализация ребра: workers -> viber
|
||||||
if (collection::init($arangodb->session, 'workers')
|
if (
|
||||||
|
collection::init($arangodb->session, 'workers')
|
||||||
&& ($worker = collection::search(
|
&& ($worker = collection::search(
|
||||||
$arangodb->session,
|
$arangodb->session,
|
||||||
sprintf(
|
sprintf(
|
||||||
|
@ -142,7 +143,7 @@ function generateMenuKeyboard(): Keyboard
|
||||||
(new Button())
|
(new Button())
|
||||||
->setBgColor('#97d446')
|
->setBgColor('#97d446')
|
||||||
->setActionType('reply')
|
->setActionType('reply')
|
||||||
->setActionBody('btn-search')
|
->setActionBody('btn-search-1')
|
||||||
->setText('🔍 Активные заявки')
|
->setText('🔍 Активные заявки')
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -161,16 +162,31 @@ function generateNumberKeyboard(): Keyboard
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function requests(int $amount = 5): Cursor
|
function generateEmojis(): string
|
||||||
|
{
|
||||||
|
return '&#' . hexdec(trim(array_rand(file(__DIR__ . '/../emojis.txt')))) . ';';
|
||||||
|
}
|
||||||
|
|
||||||
|
function requests(int $amount = 5, int $page = 1): Cursor
|
||||||
{
|
{
|
||||||
global $arangodb;
|
global $arangodb;
|
||||||
|
|
||||||
|
// Фильтрация номера страницы
|
||||||
|
if ($page < 1) $page = 1;
|
||||||
|
|
||||||
|
// Инициализация номера страницы для вычислний
|
||||||
|
--$page;
|
||||||
|
|
||||||
|
// Инициализация сдвига
|
||||||
|
$offset = $page === 0 ? 0 : $page * $amount;
|
||||||
|
|
||||||
return (new _statement(
|
return (new _statement(
|
||||||
$arangodb->session,
|
$arangodb->session,
|
||||||
[
|
[
|
||||||
'query' => sprintf(
|
'query' => sprintf(
|
||||||
"FOR d IN works FILTER d.confirmed != 'да' LIMIT %d RETURN d",
|
"FOR d IN works FILTER d.confirmed != 'да' SORT d.created DESC LIMIT %d, %d RETURN d",
|
||||||
$amount
|
$offset,
|
||||||
|
$amount + $offset
|
||||||
),
|
),
|
||||||
"batchSize" => 1000,
|
"batchSize" => 1000,
|
||||||
"sanitize" => true
|
"sanitize" => true
|
||||||
|
@ -182,7 +198,7 @@ try {
|
||||||
$bot = new Bot(['token' => require('../settings/key.php')]);
|
$bot = new Bot(['token' => require('../settings/key.php')]);
|
||||||
|
|
||||||
$bot
|
$bot
|
||||||
->onText('|btn-request-choose-*|s', function ($event) use ($bot, $botSender, $log) {
|
->onText('|btn-request-choose-*|s', function ($event) use ($bot, $botSender) {
|
||||||
global $arangodb;
|
global $arangodb;
|
||||||
|
|
||||||
$id = $event->getSender()->getId();
|
$id = $event->getSender()->getId();
|
||||||
|
@ -210,13 +226,12 @@ try {
|
||||||
// Записано обновление в базу данных
|
// Записано обновление в базу данных
|
||||||
|
|
||||||
if (collection::search(
|
if (collection::search(
|
||||||
$arangodb->session,
|
$arangodb->session,
|
||||||
sprintf(
|
sprintf(
|
||||||
"FOR d IN readinesses FILTER d._id == '%s' RETURN d",
|
"FOR d IN readinesses FILTER d._id == '%s' RETURN d",
|
||||||
document::write($arangodb->session, 'readinesses', ['_from' => $worker->getId(), '_to' => $work->getId()])
|
document::write($arangodb->session, 'readinesses', ['_from' => $worker->getId(), '_to' => $work->getId()])
|
||||||
)
|
|
||||||
)
|
)
|
||||||
) {
|
)) {
|
||||||
// Записано ребро: worker -> work (принятие заявки)
|
// Записано ребро: worker -> work (принятие заявки)
|
||||||
|
|
||||||
$bot->getClient()->sendMessage(
|
$bot->getClient()->sendMessage(
|
||||||
|
@ -250,19 +265,31 @@ try {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
->onText('|btn-search|s', function ($event) use ($bot, $botSender) {
|
->onText('|btn-search-*|s', function ($event) use ($bot, $botSender) {
|
||||||
global $arangodb;
|
global $arangodb;
|
||||||
|
|
||||||
|
// Инициализация номера страницы
|
||||||
|
preg_match('/btn-search-(\d+)/', $event->getMessage()->getText(), $matches);
|
||||||
|
$page = $matches[1] ?? 1;
|
||||||
|
|
||||||
$id = $event->getSender()->getId();
|
$id = $event->getSender()->getId();
|
||||||
|
|
||||||
if (($worker = authorization($id)) instanceof _document) {
|
if (($worker = authorization($id)) instanceof _document) {
|
||||||
// Авторизован
|
// Авторизован
|
||||||
|
|
||||||
$keyboard = [];
|
// Поиск заявок из базы данных
|
||||||
|
$requests = requests(6, $page);
|
||||||
|
|
||||||
$requests = requests(5);
|
// Подсчёт количества прочитанных заявок из базы данных
|
||||||
|
$count = $requests->getCount();
|
||||||
|
|
||||||
if ($requests->getCount() < 1) {
|
// Проверка существования избытка
|
||||||
|
$excess = $count === 6;
|
||||||
|
|
||||||
|
// Обрезка заявок до размера страницы
|
||||||
|
$requests = array_slice($requests->getAll(), 0, 5);
|
||||||
|
|
||||||
|
if ($count === 0) {
|
||||||
$bot->getClient()->sendMessage(
|
$bot->getClient()->sendMessage(
|
||||||
(new Text())
|
(new Text())
|
||||||
->setSender($botSender)
|
->setSender($botSender)
|
||||||
|
@ -273,6 +300,26 @@ try {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Инициализация буфера клавиатуры для ответа
|
||||||
|
$keyboard = [];
|
||||||
|
|
||||||
|
// Генерация кнопки: "Следующая страница"
|
||||||
|
if ($excess) $keyboard[] = (new Button())
|
||||||
|
->setBgColor('#dce537')
|
||||||
|
->setTextSize('large')
|
||||||
|
->setActionType('reply')
|
||||||
|
->setActionBody('btn-search-' . $page + 1)
|
||||||
|
->setText('Следующая страница');
|
||||||
|
|
||||||
|
// Генерация кнопки: "Предыдущая страница"
|
||||||
|
if ($page > 1) $keyboard[] =
|
||||||
|
(new Button())
|
||||||
|
->setBgColor('#dce537')
|
||||||
|
->setTextSize('large')
|
||||||
|
->setActionType('reply')
|
||||||
|
->setActionBody('btn-search-' . $page - 1)
|
||||||
|
->setText('Предыдущая страница');
|
||||||
|
|
||||||
foreach ($requests as $request) {
|
foreach ($requests as $request) {
|
||||||
// Перебор найденных заявок
|
// Перебор найденных заявок
|
||||||
|
|
||||||
|
@ -285,6 +332,9 @@ try {
|
||||||
)) instanceof _document) {
|
)) instanceof _document) {
|
||||||
// Найден магазин
|
// Найден магазин
|
||||||
|
|
||||||
|
// Генерация эмодзи
|
||||||
|
/* $emoji = generateEmojis(); */
|
||||||
|
|
||||||
// Отправка сообщения с данной заявки
|
// Отправка сообщения с данной заявки
|
||||||
$bot->getClient()->sendMessage(
|
$bot->getClient()->sendMessage(
|
||||||
(new Text())
|
(new Text())
|
||||||
|
@ -296,20 +346,19 @@ try {
|
||||||
// Запись выбора заявки в клавиатуру
|
// Запись выбора заявки в клавиатуру
|
||||||
$keyboard[] = (new Button())
|
$keyboard[] = (new Button())
|
||||||
->setBgColor(sprintf("#%02x%02x%02x", mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)))
|
->setBgColor(sprintf("#%02x%02x%02x", mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)))
|
||||||
->setTextSize('small')
|
->setTextSize('large')
|
||||||
->setActionType('reply')
|
->setActionType('reply')
|
||||||
->setActionBody("btn-request-choose-{$request->getKey()}")
|
->setActionBody("btn-request-choose-{$request->getKey()}")
|
||||||
->setText("#{$request->getKey()}");
|
->setText("#{$request->getKey()}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$bot->getClient()->sendMessage(
|
$bot->getClient()->sendMessage((new Text())
|
||||||
(new Text())
|
|
||||||
->setSender($botSender)
|
->setSender($botSender)
|
||||||
->setReceiver($id)
|
->setReceiver($id)
|
||||||
->setMinApiVersion(3)
|
->setMinApiVersion(3)
|
||||||
->setText("🔍 Выберите заявку")
|
->setText("🔍 Выберите заявку")
|
||||||
->setKeyboard((new Keyboard())->setButtons($keyboard ?? []))
|
->setKeyboard((new Keyboard())->setButtons($keyboard))
|
||||||
);
|
);
|
||||||
} else if ($worker === null) {
|
} else if ($worker === null) {
|
||||||
// Не подключен
|
// Не подключен
|
||||||
|
@ -440,7 +489,7 @@ try {
|
||||||
})
|
})
|
||||||
->on(function ($event) {
|
->on(function ($event) {
|
||||||
return ($event instanceof Message && $event->getMessage() instanceof Contact);
|
return ($event instanceof Message && $event->getMessage() instanceof Contact);
|
||||||
}, function ($event) use ($bot, $botSender, $log) {
|
}, function ($event) use ($bot, $botSender) {
|
||||||
$id = $event->getSender()->getId();
|
$id = $event->getSender()->getId();
|
||||||
|
|
||||||
if (registration($id, $event->getMessage()->getPhoneNumber())) {
|
if (registration($id, $event->getMessage()->getPhoneNumber())) {
|
||||||
|
|
Reference in New Issue