Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.92 KB | None | 0 0
  1. <?php
  2. ini_set('display_errors', 1);
  3. ini_set('display_startup_errors', 1);
  4. error_reporting(E_ALL);
  5. require 'vendor/autoload.php';
  6. require 'lib/db.php';
  7. require "helpers/dateHelper.php";
  8. //require "helpers/saveHomework.php";
  9. use VK\Client\VKApiClient;
  10.  
  11. class ServerHandler extends VK\CallbackApi\Server\VKCallbackApiServerHandler
  12. {
  13.     public function __construct()
  14.     {
  15.         $this->vk = new VKAPIClient();
  16.         $this->buttons = file_get_contents('lib/buttons.json');
  17.     }
  18.     const SECRET = 'dzbot';
  19.     const GROUP_ID = 176571052;
  20.     const CONFIRMATION_TOKEN = '';
  21.     const token = '';
  22.  
  23.     public function confirmation(int $group_id, ?string $secret)
  24.     {
  25.         if ($secret === static::SECRET && $group_id === static::GROUP_ID) {
  26.             echo static::CONFIRMATION_TOKEN;
  27.         }
  28.     }
  29.  
  30.     private function getHomework()
  31.     {
  32.         $endpoints = getEndPoints();
  33.         $begin = date('Y-m-d H:i:s', $endpoints['start']);
  34.         $end = date('Y-m-d H:i:s', $endpoints['end']);
  35.         $message = " \n _________________ \n";
  36.         $homeworks = R::getAll("SELECT * FROM homework WHERE todate between ? AND ? ORDER BY todate", [$begin, $end]);
  37.         foreach ($homeworks as $homework) {
  38.             $message = $message . $homework['text'] . " | Дата - " . $homework['todate'] . "\n_____________________\n";
  39.  
  40.         }
  41.         return $message;
  42.  
  43.     }
  44.  
  45.     private function mb_ucfirst($string)
  46.     {
  47.         return mb_strtoupper(mb_substr($string, 0, 1)) . mb_strtolower(mb_substr($string, 1));
  48.     }
  49.  
  50.     private function isAdmin($from)
  51.     {
  52.         $check = R::count('admins', 'user_id = ?', [$from]);
  53.         if ($check > 0) {
  54.             return true;
  55.         } else {
  56.             return false;
  57.         }
  58.     }
  59.  
  60.     private function saveHomework($body)
  61.     {
  62.         $str = trim(preg_replace('/\s+/', ' ', $body));
  63.         $ex = explode(' ', $str);
  64.         unset($ex[0]);
  65.         $key = array_search('надату', $ex);
  66.         $newHomework = R::dispense('homework');
  67.         if ($key !== false) {
  68.             unset($ex[$key]);
  69.             if (strpos($ex[$key + 1], '.') !== false) {
  70.                 $md = explode('.', $ex[$key + 1]);
  71.                 $day = $md[0];
  72.                 $month = $md[1];
  73.                 $d = new DateTime(date("Y-{$month}-{$day} H:i:s"));
  74.                 $newHomework->todate = $d->format('Y-m-d H:i:s');
  75.                 unset($ex[$key + 1]);
  76.             } else {
  77.  
  78.                 $day = $ex[$key + 1];
  79.                 $d = new DateTime(date("Y-m-{$day} H:i:s"));
  80.                 $newHomework->todate = $d->format('Y-m-d H:i:s');
  81.                 unset($ex[$key + 1]);
  82.  
  83.             }
  84.         } else {
  85.             $date = (new \DateTime());
  86.             $dayOfWeek = $date->format('w');
  87.             if ($dayOfWeek == 0 || $dayOfWeek == 6) {
  88.                 $todate = date("Y-m-d", strtotime('monday next week'));
  89.             } else {
  90.                 $todate = date("Y-m-d", strtotime('tomorrow'));
  91.             }
  92.             $newHomework->todate = $todate;
  93.         }
  94.         $newHomeworkText = implode(' ', $ex);
  95.  
  96.         $newHomework->text = $this->mb_ucfirst($newHomeworkText);
  97.         $id = R::store($newHomework);
  98.         return $id;
  99.     }
  100.  
  101.     public function messageNew(int $group_id, ?string $secret, array $object)
  102.     {
  103.         $this->params = ['peer_id' => $object['peer_id'], 'random_id' => mt_rand(1, 9999), 'keyboard' => $this->buttons];
  104.         $body = mb_strtolower($object['text']);
  105.         $body = preg_replace('/\[.*?\]/', '', $body);
  106.         if ($body[0] == ',') {
  107.             unset($body[0]);
  108.         }
  109.         $body = ltrim($body);
  110.         switch ($body) {
  111.             case 'привет':
  112.                 $name = $this->vk->users()->get(static::token, ['user_ids' => $object['from_id']])[0]['first_name'];
  113.                 $message = "Привет, " . $name . "!";
  114.                 $this->params['message'] = $message;
  115.                 break;
  116.  
  117.             case '!расписание':
  118.                 $message = file_get_contents('helpers/timetable.txt');
  119.                 $this->params['message'] = $message;
  120.                 break;
  121.  
  122.             case '!команды':
  123.                 $message = "Команды: \n !рассылка - подписаться или отписаться от рассылки \n !статус - проверить подписаны вы на рассылку или нет \n !дз - вручную посмотреть домашнее задание \n !добавитьдз самодз надату здесь номер дня на какое задали или номер.месяц \n !добавитьдз Физика §4,§9,§10 надату 18 Вот пример \n Или так !добавитьдз Физика §4,§9,§10 надату 18.09";
  124.                 $this->params['message'] = $message;
  125.                 break;
  126.  
  127.             case '!дз':
  128.                 $message = "Вот ваше домашнее задание!".$this->getHomework();
  129.                 $this->params['message'] = $message;
  130.                 break;
  131.  
  132.             case '!статус':
  133.                 $check = R::count('recipients', 'user_id = ?', [$object['from_id']]);
  134.                 $message = ($check > 0 ? 'Вы подписаны на рассылку' : 'Вы не подписаны на рассылку,чтобы подписаться введите: !рассылка');
  135.                 $this->params['message'] = $message;
  136.  
  137.             case '!рассылка':
  138.                 $id = $object['from_id'];
  139.                 $status = R::findOne('recipients', 'user_id = ? ', [$object['from_id']]);
  140.                 if (is_null($status)) {
  141.                     $recipient = R::dispense('recipients');
  142.                     $name = $this->vk->users()->get(static::token, ['user_ids' => $id])[0]['first_name'];
  143.                     $recipient->name = $name;
  144.                     $recipient->user_id = $object['from_id'];
  145.                     R::store($recipient);
  146.                     $this->params['message'] = 'Вы успешно подписались на рассылку!';
  147.                 } else {
  148.                     $bean = R::load('recipients', $status->id);
  149.                     R::trash($bean);
  150.                     $this->params['message'] = 'Вы успешно отписались от рассылки!';
  151.                 }
  152.                 break;
  153.  
  154.             // Admin Part
  155.  
  156.             case strpos($body, '!добавитьдз') !== false:
  157.                 $isAdmin = $this->isAdmin($object['from_id']);
  158.                 if ($isAdmin) {
  159.                     $id = $this->saveHomework($body);
  160.                     if ($id != null) {
  161.                         $this->params['message'] = 'Вы успешно добавили домашнее задание';
  162.                     } else {
  163.                         $this->params['message'] = 'Error...';
  164.                     }
  165.                 } else {
  166.                     $this->params['message'] = 'У вас нет прав на использование этой команды';
  167.                 }
  168.                 break;
  169.  
  170.             case '!разослать':
  171.                 $isAdmin = $this->isAdmin($object['from_id']);
  172.                 if ($isAdmin) {
  173.                    
  174.                     $homework = $this->getHomework();
  175.                     $recipients = R::find("recipients");
  176.                     foreach ($recipients as $recipient) {
  177.                         $message = "Привет, ".$recipient['name'].$homework;
  178.                         $this->params['peer_id'] = $recipient['user_id'];
  179.                         $this->params['message'] = $message;
  180.                         $this->vk->messages()->send(static::token, $this->params);
  181.                        
  182.                     }
  183.  
  184.                    
  185.                 } else {
  186.                     $this->params['message'] = 'У вас нет прав на использование этой команды';
  187.                 }
  188.                 break;
  189.  
  190.             case '!удалить':
  191.                 $isAdmin = $this->isAdmin($object['from_id']);
  192.                 if ($isAdmin) {
  193.                     $homework = R::findLast("homework");
  194.                     R::trash($homework);
  195.                     $this->params['message'] = 'Последнее домашнее задание было удалено';
  196.                 } else {
  197.                     $this->params['message'] = 'У вас нет прав на использование этой команды';
  198.                 }
  199.                 break;
  200.  
  201.             default:
  202.                 # code...
  203.                break;
  204.         }
  205.         if (isset($this->params['message'])) {
  206.             $this->vk->messages()->send(static::token, $this->params);
  207.             echo "ok";
  208.         } else {
  209.             echo "ok";
  210.         }
  211.     }
  212.  
  213. }
  214. $handler = new ServerHandler();
  215. $data = json_decode(file_get_contents('php://input'));
  216. $handler->parse($data);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement