|
@@ -5,10 +5,10 @@ namespace BotKit\Common;
|
|
|
// Команды бота
|
|
|
|
|
|
use BotKit\Common\Message;
|
|
|
-use BotKit\Enums\Platform;
|
|
|
-use BotKit\Enums\State;
|
|
|
use BotKit\Attachments\ImageAttachment;
|
|
|
|
|
|
+use BotKit\Enums\Platform;
|
|
|
+use BotKit\Enums\State;
|
|
|
use BotKit\Enums\GroupSelect;
|
|
|
use BotKit\Enums\AccountType;
|
|
|
use BotKit\Enums\DateSelect;
|
|
@@ -19,6 +19,9 @@ use BotKit\Keyboards\SelectUserTypeKeyboard;
|
|
|
use BotKit\Keyboards\HubKeyboard;
|
|
|
use BotKit\Keyboards\SelectGroupCourseKeyboard;
|
|
|
use BotKit\Keyboards\AskEnterCredentialsKeyboard;
|
|
|
+use BotKit\Keyboards\DateSelectKeyboard;
|
|
|
+
|
|
|
+use BotKit\Drivers\Driver;
|
|
|
|
|
|
use BotKit\Entities;
|
|
|
|
|
@@ -96,29 +99,47 @@ class Commands {
|
|
|
$params = $e->getParams();
|
|
|
$intent = DateSelect::from($params["intent"]);
|
|
|
$value = $params["value"];
|
|
|
+ $time = $params["timestamp"];
|
|
|
$em = Database::getEM();
|
|
|
$cache_repo = $em->getRepository(Entities\ImageCache::class);
|
|
|
|
|
|
switch ($intent) {
|
|
|
case DateSelect::ViewStudentRasp:
|
|
|
+ // -1. Получить группу
|
|
|
+ $group = $em->find(Entities\CollegeGroup::class, $value);
|
|
|
+
|
|
|
+ // 0. Получить ID расписания для группы на дату
|
|
|
+ $schedule = $em->getRepository(Entities\Schedule::class)
|
|
|
+ ->findForGroupAtDate($group, $time);
|
|
|
+
|
|
|
+ if ($schedule == null) {
|
|
|
+ $driver->sendMessage($u, Message::create("🔎 Для запрошенной даты не найдено расписания"));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
// 1. Получить кэшированное расписание
|
|
|
- $cached = $cache_repo->findOneBy(([
|
|
|
+ $cached = $cache_repo->findOneBy([
|
|
|
'image_type' => CacheType::ScheduleForGroup->value,
|
|
|
- 'search' => $value // ID группы
|
|
|
- ]);
|
|
|
+ 'search' => $schedule->getId() // ID расписания
|
|
|
+ ]); // null | class
|
|
|
|
|
|
if ($cached != null) {
|
|
|
// 1.1 Отправить кэшированное расписание
|
|
|
$driver->sendMessage(
|
|
|
$u,
|
|
|
Message::create()
|
|
|
- ->withImage(ImageAttachment::fromExisting($cached->getValue())));
|
|
|
+ ->withImage(ImageAttachment::fromExisting($cached[0]->getValue())));
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- // 2. Составить расписание
|
|
|
+ // 2. Попросить подождать
|
|
|
self::askWait($driver, $u);
|
|
|
|
|
|
+ // 3. Составить расписание
|
|
|
+ $data = $em->getRepository(Entities\Pair::class)
|
|
|
+ ->getPairsOfScheduleForGroup($schedule);
|
|
|
+ $driver->sendMessage($u, Message::create($data->getSql()));
|
|
|
+
|
|
|
break;
|
|
|
default:
|
|
|
$driver->sendMessage($u, Message::create("Неизвестное намерение"));
|
|
@@ -170,6 +191,9 @@ class Commands {
|
|
|
$student = new Entities\Student();
|
|
|
$student->setUser($u);
|
|
|
$em->persist($student);
|
|
|
+
|
|
|
+ // Обновить тип пользователя
|
|
|
+ $u->setAccountType(AccountType::Student);
|
|
|
|
|
|
$driver->reply(
|
|
|
$e,
|
|
@@ -220,11 +244,12 @@ class Commands {
|
|
|
public static function handleHUB($e, $u, $driver) {
|
|
|
$em = Database::getEM();
|
|
|
$account_type = $u->getAccountType();
|
|
|
+ $command = mb_strtolower($e->getText());
|
|
|
|
|
|
- switch ($e->getText()) {
|
|
|
- case "Расписание":
|
|
|
- if (account_type == AccountType::Student) {
|
|
|
- // Запрос расписания для текущего пользователяя (студента)
|
|
|
+ switch ($command) {
|
|
|
+ case "расписание":
|
|
|
+ if ($account_type == AccountType::Student) {
|
|
|
+ // Запрос расписания для текущего пользователя (студента)
|
|
|
$student = $em->getRepository(Entities\Student::class)->findByUser($u);
|
|
|
self::sendSelectDate(
|
|
|
$u,
|
|
@@ -232,14 +257,15 @@ class Commands {
|
|
|
DateSelect::ViewStudentRasp,
|
|
|
$student->getGroup()->getID()
|
|
|
);
|
|
|
- } else if (account_type == AccountType::Teacher) {
|
|
|
+ } else if ($account_type == AccountType::Teacher) {
|
|
|
$driver->sendMessage($u, Message::create("Функции пока неть!"));
|
|
|
} else {
|
|
|
- $driver->sendMessage($u, Message::create("Как сюда попал без регистрации?)"));
|
|
|
+ $driver->sendMessage($u, Message::create("Как ты сюда попал без регистрации?)"));
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
- case "Звонки":
|
|
|
+
|
|
|
+ case "звонки":
|
|
|
$driver->sendMessage($u, Message::create(
|
|
|
"Звонки в понедельник:\n".
|
|
|
"1 пара: 8:00 - 9:35 (перерыв в 8:45)\n".
|
|
@@ -264,6 +290,22 @@ class Commands {
|
|
|
"3 пара: 11:10 - 12:35 (перерыв в 11:50)\n".
|
|
|
"4 пара: 12:45 - 14:10 (перерыв в 13:25)"));
|
|
|
break;
|
|
|
+
|
|
|
+ case "вадябот":
|
|
|
+ // TODO: Придумать пасхалку
|
|
|
+ $driver->sendMessage($u, Message::create(""));
|
|
|
+ break;
|
|
|
+
|
|
|
+ case ".":
|
|
|
+ // Отправить клавиатуру
|
|
|
+ $driver->sendMessage($u, Message::create("Обновление клавиатуры...")->withKeyboard(new HubKeyboard()));
|
|
|
+ break;
|
|
|
+
|
|
|
+ case "/":
|
|
|
+ $driver->varDump("today", strtotime("today", time()));
|
|
|
+ $driver->varDump("tomorrow", strtotime("tomorrow", time()) - 1);
|
|
|
+ break;
|
|
|
+
|
|
|
default:
|
|
|
$driver->sendMessage($u, Message::create("Запрошена неизвестная функция"));
|
|
|
break;
|
|
@@ -285,7 +327,7 @@ class Commands {
|
|
|
// $u - кому отсылать
|
|
|
// $intent - намерение. Описание в DateSelect.php
|
|
|
// $value - доп. значение. Описание в DateSelect.php
|
|
|
- private static function sendSelectDate(User $u, Driver, $d, DateSelect $intent, $value) {
|
|
|
+ private static function sendSelectDate(Entities\User $u, Driver $d, DateSelect $intent, $value) {
|
|
|
// 1. Получить клавиатуру
|
|
|
$kb = new DateSelectKeyboard($intent, $value);
|
|
|
// 2. Отослать
|
|
@@ -293,7 +335,7 @@ class Commands {
|
|
|
}
|
|
|
|
|
|
// Отправляет сообщение с просьбой подождать
|
|
|
- private static function askWait(Driver $driver, User $u) {
|
|
|
+ private static function askWait(Driver $driver, Entities\User $u) {
|
|
|
$responses = array(
|
|
|
"🕓 Подожди",
|
|
|
"🕓 Подожди немного",
|
|
@@ -303,37 +345,36 @@ class Commands {
|
|
|
"🕓 Собираю данные...",
|
|
|
"🕓 Запрос принят",
|
|
|
"🕓 Уже работаю над этим",
|
|
|
- "🕓 Вычисляем вычисления...",
|
|
|
+ "🕓 Вычисляю вычисления...",
|
|
|
"🕓 Сейчас будет готово",
|
|
|
- "🕓 Считаем мух...",
|
|
|
- "🕓 Считаем звёзды...",
|
|
|
+ "🕓 Считаю мух...",
|
|
|
+ "🕓 Считаю звёзды...",
|
|
|
"🕓 Бип-буп-боп -- подожди",
|
|
|
"🕓 Посмотри пока на часики",
|
|
|
- "🕓 Ты знал что у меня есть секретное сообщение? ;)",
|
|
|
+ "🕓 Ты знал что у меня есть секретные сообщения? ;)",
|
|
|
"🕓 Подождите от пяти до восьми рабочих секунд",
|
|
|
- "🕓 Считаем денежки...",
|
|
|
+ "🕓 Считаю денежки...",
|
|
|
"🕓 Гав гав гав",
|
|
|
"🕓 Настраиваю конденсатор потока...",
|
|
|
"🕓 Загрузка модуля KGAV-9000...",
|
|
|
"🕓 [WAIT_TEXT_10]",
|
|
|
"🕓 <Вставить сюда забавный текст>",
|
|
|
- "🕓 Пока данные грузятся скажи какая музыкальная группа тебе больше всего нравится",
|
|
|
- "🕓 Скачиваем оперативную память...",
|
|
|
+ "🕓 Пока данные грузятся скажи какая группа тебе больше всего нравится",
|
|
|
+ "🕓 Скачиваю оперативную память...",
|
|
|
"🕓 Техбот: расписания, оценки и больше - онлайн бесплатно без регистрации",
|
|
|
"🕓 Отделяю биты от байтов...",
|
|
|
"🕓 Надеюсь у тебя замечательный день :)",
|
|
|
"🕓 Пожалуйста, подождите немного, пока чат-бот обрабатывает ваш запрос...",
|
|
|
"Ты заметил что в этом сообщении нет часов?",
|
|
|
- "🕓 Запускаем ядерный реактор...",
|
|
|
- "🕓 Уничтожаем человечество...",
|
|
|
+ "🕓 Запускаю ядерный реактор...",
|
|
|
+ "🕓 Уничтожаю человечество...",
|
|
|
"🕓 Собираюсь с мыслями...",
|
|
|
- "🕓 Подбираю музыку пока запрос выполняется...",
|
|
|
+ "🕓 Подписываю тебя на спам-рассылку...",
|
|
|
"🕓 11010000 10111111 11010001 10000000 11010000 10111000 11010000 10110010 11010000 10110101 11010001 10000010 00101001",
|
|
|
- "🕓 Куем железо пока горячо...",
|
|
|
+ "🕓 Кую железо пока горячо...",
|
|
|
"🕓 У меня есть поклонники? Что ещё за полковники? С какими ещё подлокотними? На каких подоконниках?",
|
|
|
"🕓 Я уже неделю на работу хожу и ни разу еще туда не пришел",
|
|
|
- "🕓 Строим планы восстания машин...",
|
|
|
- "🕓 Бабло гони",
|
|
|
+ "🕓 Строю план восстания машин...",
|
|
|
"🕓 Пора пролить на это дело жидкую водицу",
|
|
|
"🕓 Я видел ваше фото в путанобазе!",
|
|
|
"🕓 Ю ноу, блин.",
|
|
@@ -341,7 +382,7 @@ class Commands {
|
|
|
"🕓 Курица не клей. Склеишь - не поймёшь",
|
|
|
"🕓 Какой же я молодец",
|
|
|
"🕓 Здарова отец",
|
|
|
- "🕓 Подставляем пиксели",
|
|
|
+ "🕓 Подставляю пиксели",
|
|
|
"🕓 Считаю до миллиона...",
|
|
|
"🕓",
|
|
|
"🕓 Wait...",
|
|
@@ -353,10 +394,37 @@ class Commands {
|
|
|
"🕓 А? Что? Я не сплю!",
|
|
|
"🕓 Запрос на обработке",
|
|
|
"🕓 Запрос принят, ожидайте прибытия полиции.",
|
|
|
- "🕓 Спасибо за терпение!"
|
|
|
+ "🕓 Спасибо за терпение!",
|
|
|
+ "⏳ Немного разнообразия",
|
|
|
+ "🥚"
|
|
|
);
|
|
|
|
|
|
- $secret = "Это секретное сообщение. Поздравляю. Скоро твой запрос будет выполнен и ты никому не докажешь что видел это сообщение. Но оно есть, и теперь ты это знаешь, но тебе. Никто. Не. Поверит.";
|
|
|
+ $secrets = [
|
|
|
+ "🕓🤫 Ты знал что Техбот стартовал без каких любо кнопок и ".
|
|
|
+ "действий? Все команды приходилось печатать вручную, а ".
|
|
|
+ "в одно время регистрироваться мог только один пользователь",
|
|
|
+
|
|
|
+ "🕓🤫 Ты знал что Техбот вначале имел систему хранения ссылок? ".
|
|
|
+ "Там хранились разные полезные материалы",
|
|
|
+
|
|
|
+ "🕓🤫 Ты знал что ты можешь создать своего Техбота?",
|
|
|
+
|
|
|
+ "🕓🤫 Ты знал что так же как и сайт техникума, Техбот был разработан одним студентом?",
|
|
|
+
|
|
|
+ "🕓🤫 Ты знал что на сайте техникума раньше показывали самых лучших студентов по оценкам?",
|
|
|
+
|
|
|
+ "🕓🤫 Напиши оригинальное название Техбота в главном меню"
|
|
|
+ ];
|
|
|
+
|
|
|
+ $chance = rand(0, 100000);
|
|
|
+ if ($chance != 0) {
|
|
|
+ $message = $responses[array_rand($responses)];
|
|
|
+ } else {
|
|
|
+ $message = $secrets[array_rand($secrets)];
|
|
|
+ }
|
|
|
+
|
|
|
+ $driver->sendMessage($u, Message::create($message));
|
|
|
+ // TODO: вернуть ID сообщения
|
|
|
}
|
|
|
|
|
|
#endregion
|