Advertisement
Guest User

Untitled

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