Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 31.96 KB | None | 0 0
  1. <?php
  2. error_reporting(E_ALL);
  3. ini_set('display_errors', false);
  4. date_default_timezone_set('Europe/Moscow');
  5.  
  6. static $access_token = 'bea8d4b574c30c7cf1a66f7c48701efcbd99d59ecb6d04aa69a9d8525656a6560aa8031d04bfcd735e591';
  7. static $v = 5.101;
  8. static $group_id = 192319497;
  9. static $prefix = 'dating_';
  10. static $sex = [1 => 'Женский', 2 => 'Мужской'];
  11. static $sex_smile = [1 => '&#128590;', 2 => '&#128694;'];
  12.  
  13. $json = json_decode(file_get_contents('php://input'), true);
  14.  
  15. require (__DIR__ . '/lib/db.php');
  16.  
  17. DB::setup('mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=dating', 'root', '6fmKueYH7jJVEYOAQQrvyAMDQcIidzD3CcE9i6O02DUmyYKBL7j14EiIYPFIgBK1XTbC9NaJPI9ZAPX9vrDMbCmU1wAuxJFG8gg');
  18. DB::freeze(true);
  19.  
  20. $cache = new Memcached();
  21. $cache->addServer('/var/run/memcached/memcached.sock', 0);
  22.  
  23.  
  24. switch ($json['type']) {
  25.     case 'confirmation': {
  26.         die('f617a1aa');
  27.     }
  28.     case 'message_new': {
  29.  
  30.         echo 'ok';
  31.         fastcgi_finish_request();
  32.  
  33.         $name = DB::getAll('SELECT `first_name` FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0]['first_name'];
  34.  
  35.         switch (json_decode($json['object']['message']['payload'], true)['button']) {
  36.             case 'step_edit_profile': {
  37.                 $user = api('users.get', [
  38.                     'user_ids' => $json['object']['message']['from_id'],
  39.                     'fields' => 'photo_400_orig,city,sex',
  40.                 ])['response'][0];
  41.  
  42.                 $path = sha1($_SERVER['REQUEST_TIME'] . $json['object']['message']['from_id']);
  43.                 file_put_contents(__DIR__ . '/photos/' . $path . '.jpg', cURL($user['photo_400_orig']));
  44.  
  45.                 $upload = uploadFile(api('photos.getMessagesUploadServer', [
  46.                     'peer_id' => $json['object']['message']['from_id'],
  47.                 ])['response']['upload_url'], __DIR__ . '/photos/' . $path . '.jpg');
  48.  
  49.                 $photo = api('photos.saveMessagesPhoto', [
  50.                     'server' => $upload['server'],
  51.                     'photo' => $upload['photo'],
  52.                     'hash' => $upload['hash'],
  53.                 ]);
  54.  
  55.                 $db = DB::dispense('users');
  56.                 $db['user_id'] = $json['object']['message']['from_id'];
  57.                 $db['first_name'] = $user['first_name'];
  58.                 $db['sex'] = $user['sex'];
  59.                 $db['photo'] = $path;
  60.                 $db['server_photo'] = 'photo' . $photo['response'][0]['owner_id'] . '_' . $photo['response'][0]['id'];
  61.                 $db['created_at'] = $_SERVER['REQUEST_TIME'];
  62.                 $id = DB::store($db);
  63.                
  64.                 if (empty($user['city']['title'])) $user['city']['title'] = '<<Не указан>>';
  65.  
  66.                 api('messages.send', [
  67.                     'user_id' => $json['object']['message']['from_id'],
  68.                     'message' => $user['first_name'] . ', перед тем, как начать искать собеседников, пожалуйста, заполни свою анкету. &#128524;<br>Вот твоя анкета &#128521;<br><br>&#128123; Номер анкеты: ' . $id . '<br>&#128100; Имя: ' . $user['first_name'] . '<br>' . $sex_smile[$user['sex']] . ' Пол: ' . $sex[$user['sex']] . ' <br>&#128123; Возраст: <<Не указан>><br>&#127751; Город: ' . $user['city']['title'] . '<br>&#128221; Информация о себе: <<Не указана>><br>&#128467; Дата создания анкеты: ' . date('d.m.Y в H:i', $_SERVER['REQUEST_TIME']),
  69.                     'attachment' => 'photo' . $photo['response'][0]['owner_id'] . '_' . $photo['response'][0]['id'],
  70.                     'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_edit_photo\"}","label": "&#128248; Изменить фотографию"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_edit_name\"}","label": "&#9999; Изменить имя"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_edit_age\"}","label": "' . $sex_smile[$db['sex']] . ' Изменить возраст"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_edit_description\"}","label": "&#128221; Изменить информацию о себе"},"color": "secondary"}],[{"action": {"type": "location","payload": "{\"button\": \"step_edit_city\"}"}}]]}',
  71.                 ]);
  72.                 break;
  73.             }
  74.             case 'step_edit_photo': {
  75.                 $cache->set('step' . $json['object']['message']['from_id'], 'step_edit_photo');
  76.                 api('messages.send', [
  77.                     'user_id' => $json['object']['message']['from_id'],
  78.                     'message' => $name . ', пришли мне свою фотографию. &#128527;',
  79.                 ]);
  80.                 break;
  81.             }
  82.             case 'step_edit_name': {
  83.                 $cache->set('step' . $json['object']['message']['from_id'], 'step_edit_name');
  84.                 api('messages.send', [
  85.                     'user_id' => $json['object']['message']['from_id'],
  86.                     'message' => $name . ', укажи свое новое имя. &#128524;',
  87.                 ]);
  88.                 break;
  89.             }
  90.             case 'step_edit_age': {
  91.                 $cache->set('step' . $json['object']['message']['from_id'], 'step_edit_age');
  92.                 api('messages.send', [
  93.                     'user_id' => $json['object']['message']['from_id'],
  94.                     'message' => $name . ', укажи свой возраст (от 6-ти лет). &#128516;',
  95.                 ]);
  96.                 break;
  97.             }
  98.             case 'step_edit_description': {
  99.                 $cache->set('step' . $json['object']['message']['from_id'], 'step_edit_description');
  100.                 api('messages.send', [
  101.                     'user_id' => $json['object']['message']['from_id'],
  102.                     'message' => $name . ', пожалуйста, расскажи пару предложений о себе. &#128512;',
  103.                 ]);
  104.                 break;
  105.             }
  106.             case 'step_edit_city': {
  107.                 DB::exec('UPDATE `users` SET `latitude`=?, `longitude`=?, `city`=? WHERE `user_id`=?', [
  108.                     $json['object']['message']['geo']['coordinates']['latitude'],
  109.                     $json['object']['message']['geo']['coordinates']['longitude'],
  110.                     $json['object']['message']['geo']['place']['city'],
  111.                     $json['object']['message']['from_id'],
  112.                 ]);
  113.  
  114.                 api('messages.send', [
  115.                     'user_id' => $json['object']['message']['from_id'],
  116.                     'message' => $name . ', отлично! &#9786;<br>Твой город изменен на «' . $json['object']['message']['geo']['place']['city'] . '». &#128517;',
  117.                     'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_search\"}","label": "&#128269; Начать поиск"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_view_profile\"}","label": "&#128213; Посмотреть мою анкету"},"color": "secondary"}]]}',
  118.                 ]);
  119.                 break;
  120.             }
  121.  
  122.             case 'step_view_profile': {
  123.                 $db = DB::findOne('users', 'WHERE `user_id`=?', [$json['object']['message']['from_id']]);
  124.  
  125.                 if (empty($db['age'])) $db['age'] = '<<Не указан>>';
  126.                 else $db['age'] .= ' лет';
  127.  
  128.                 if (empty($db['city'])) $db['city'] = '<<Не указан>>';
  129.                 if (empty($db['description'])) $db['description'] = '<<Не указана>>';
  130.  
  131.                 api('messages.send', [
  132.                     'user_id' => $json['object']['message']['from_id'],
  133.                     'message' => $db['first_name'] . ', вот твоя анкета &#128521;<br><br>&#128123; Номер анкеты: ' . $db['id'] . '<br>&#128100; Имя: ' . $db['first_name'] . '<br>' . $sex_smile[$db['sex']] . 'Пол: ' . $sex[$db['sex']] . '<br>&#128123; Возраст: ' . $db['age'] . '<br>&#127751; Город: ' . $db['city'] . '<br>&#128221; О себе: ' . $db['description'] . '<br>&#128467; Дата создания анкеты: ' . date('d.m.Y в H:i', $db['created_at']),
  134.                     'attachment' => $db['server_photo'],
  135.                     'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_edit_photo\"}","label": "&#128248; Изменить фотографию"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_edit_name\"}","label": "&#9999; Изменить имя"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_edit_age\"}","label": "' . $sex_smile[$db['sex']] . ' Изменить возраст"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_edit_description\"}","label": "&#128221; Изменить информацию о себе"},"color": "secondary"}],[{"action": {"type": "location","payload": "{\"button\": \"step_edit_city\"}"}}],[{"action": {"type": "text","payload": "{\"button\": \"step\"}","label": "&#10006; Выйти из редактирования"},"color": "secondary"}]]}',
  136.                 ]);
  137.                 break;
  138.             }
  139.             case 'step_search': {
  140.                 $db_sex = DB::getAll('SELECT `sex` FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0];
  141.                 $search_sex = [1 => 2, 2 => 1];
  142.  
  143.                 $db = DB::getAll('SELECT * FROM `users` WHERE `user_id`<>? AND `sex`=? ORDER BY RAND() LIMIT 1', [$json['object']['message']['from_id'], $search_sex[$db_sex['sex']]])[0];
  144.  
  145.                 $cache->set('search' . $json['object']['message']['from_id'], $db['user_id']);
  146.                 $message = $name . ', нашел кое-кого для тебя, смотри! &#128527;<br><br>&#128100; Имя: ' . $db['first_name'];
  147.  
  148.                 if (!empty($db['age'])) $message .= '<br>&#128123; Возраст: ' . $db['age'];
  149.                 if (!empty($db['city'])) $message .= '<br>&#127751; Город: ' . $db['city'];
  150.                 if (!empty($db['description'])) $message .= '<br>&#128221; О себе: ' . $db['description'];
  151.                 if (!empty($db['latitude']) && !empty($db['longitude'])) {
  152.                     $my_dist = DB::getAll('SELECT `latitude`, `longitude` FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0];
  153.                     $dist = calculateTheDistance($my_dist['latitude'], $my_dist['longitude'], $db['latitude'], $db['longitude']);
  154.                     if ($dist < 1000) $message  .= '<br>&#128204; Расстояние: < 1 км';
  155.                     else $message .= '<br>&#128204; Расстояние: ' . (int)($dist / 1000) . ' км';
  156.                 }
  157.  
  158.                 api('messages.send', [
  159.                     'user_id' => $json['object']['message']['from_id'],
  160.                     'message' => $message,
  161.                     'attachment' => $db['server_photo'],
  162.                     'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_like\"}","label": "&#10084; ' . $db['likes'] . '"},"color": "secondary"},{"action": {"type": "text","payload": "{\"button\": \"step_send_message\"}","label": "&#128140;"},"color": "secondary"},{"action": {"type": "text","payload": "{\"button\": \"step_search\"}","label": "&#128260;"},"color": "secondary"}]]}',
  163.                 ]);
  164.                 break;
  165.             }
  166.             case 'step_like': {
  167.                 $peer_id = $cache->get('search' . $json['object']['message']['from_id']);
  168.  
  169.                 DB::exec('UPDATE `users` SET `likes`=`likes`+1 WHERE `user_id`=?', [$peer_id]);
  170.  
  171.                 $db_sex = DB::getAll('SELECT `sex` FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0];
  172.                 $search_sex = [1 => 2, 2 => 1];
  173.  
  174.                 $db = DB::getAll('SELECT * FROM `users` WHERE `user_id`<>? AND `sex`=? ORDER BY RAND() LIMIT 1', [$json['object']['message']['from_id'], $search_sex[$db_sex['sex']]])[0];
  175.  
  176.                 $cache->set('search' . $json['object']['message']['from_id'], $db['user_id']);
  177.                 $message = $name . ', отлично, лайк поставлен! &#10084;<br>Нашел еще кое-кого для тебя, смотри! &#128527;<br><br>&#128100; Имя: ' . $db['first_name'];
  178.  
  179.                 if (!empty($db['age'])) $message .= '<br>&#128123; Возраст: ' . $db['age'];
  180.                 if (!empty($db['city'])) $message .= '<br>&#127751; Город: ' . $db['city'];
  181.                 if (!empty($db['description'])) $message .= '<br>&#128221; О себе: ' . $db['description'];
  182.                 if (!empty($db['latitude']) && !empty($db['longitude'])) {
  183.                     $my_dist = DB::getAll('SELECT `latitude`, `longitude` FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0];
  184.                     $dist = calculateTheDistance($my_dist['latitude'], $my_dist['longitude'], $db['latitude'], $db['longitude']);
  185.                     if ($dist < 1000) $message  .= '<br>&#128204; Расстояние: < 1 км';
  186.                     else $message .= '<br>&#128204; Расстояние: ' . (int)($dist / 1000) . ' км';
  187.                 }
  188.  
  189.                 api('messages.send', [
  190.                     'user_id' => $json['object']['message']['from_id'],
  191.                     'message' => $message,
  192.                     'attachment' => $db['server_photo'],
  193.                     'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_like\"}","label": "&#10084; ' . $db['likes'] . '"},"color": "secondary"},{"action": {"type": "text","payload": "{\"button\": \"step_send_message\"}","label": "&#128140;"},"color": "secondary"},{"action": {"type": "text","payload": "{\"button\": \"step_search\"}","label": "&#128260;"},"color": "secondary"}]]}',
  194.                 ]);
  195.  
  196.                 $db = DB::getAll('SELECT * FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0];
  197.  
  198.                 $message = DB::getAll('SELECT `first_name` FROM `users` WHERE `user_id`=?', [$peer_id])[0]['first_name'] . ', @id' . $json['object']['message']['from_id'] . '(' . $name . ') оценил твою анкету. &#10084;<br><br>&#128100; Имя: ' . $db['first_name'];
  199.  
  200.                 if (!empty($db['age'])) $message .= '<br>&#128123; Возраст: ' . $db['age'];
  201.                 if (!empty($db['city'])) $message .= '<br>&#127751; Город: ' . $db['city'];
  202.                 if (!empty($db['description'])) $message .= '<br>&#128221; О себе: ' . $db['description'];
  203.                 if (!empty($db['latitude']) && !empty($db['longitude'])) {
  204.                     $my_dist = DB::getAll('SELECT `latitude`, `longitude` FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0];
  205.                     $dist = calculateTheDistance($my_dist['latitude'], $my_dist['longitude'], $db['latitude'], $db['longitude']);
  206.                     if ($dist < 1000) $message  .= '<br>&#128204; Расстояние: < 1 км';
  207.                     else $message .= '<br>&#128204; Расстояние: ' . (int)($dist / 1000) . ' км';
  208.                 }
  209.  
  210.                 api('messages.send', [
  211.                     'user_id' => $peer_id,
  212.                     'message' => $message,
  213.                     'attachment' => $db['server_photo'],
  214.                     'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_like\"}","label": "&#10084; ' . $db['likes'] . '"},"color": "secondary"},{"action": {"type": "text","payload": "{\"button\": \"step_send_message\"}","label": "&#128140;"},"color": "secondary"},{"action": {"type": "text","payload": "{\"button\": \"step_search\"}","label": "&#128260;"},"color": "secondary"}]]}',
  215.                 ]);
  216.                 break;
  217.             }
  218.             case 'step_send_message': {
  219.                 $cache->set('step' . $json['object']['message']['from_id'], 'step_send_message');
  220.                 $peer_id = $cache->get('search' . $json['object']['message']['from_id']);
  221.  
  222.                 $peer_name = api('users.get', [
  223.                     'user_ids' => $peer_id,
  224.                     'name_case' => 'gen',
  225.                 ])['response'][0]['first_name'];
  226.  
  227.                 api('messages.send', [
  228.                     'user_id' => $json['object']['message']['from_id'],
  229.                     'message' => $name . ', отлично, теперь напиши сообщение ' . $peer_name . ' &#128145;',
  230.                 ]);
  231.                 break;
  232.             }
  233.  
  234.             default: {
  235.                 switch ($cache->get('step' . $json['object']['message']['from_id'])) {
  236.                     case 'step_edit_photo': {
  237.                         if (is_array($json['object']['message']['attachments'][0]['photo'])) {
  238.                             $cache->delete('step' . $json['object']['message']['from_id']);
  239.                             $path = sha1($_SERVER['REQUEST_TIME'] . $json['object']['message']['from_id']);
  240.                             file_put_contents(__DIR__ . '/photos/' . $path . '.jpg', cURL($json['object']['message']['attachments'][0]['photo']['sizes'][count($json['object']['message']['attachments'][0]['photo']['sizes']) - 1]['url']));
  241.  
  242.                             $upload = uploadFile(api('photos.getMessagesUploadServer', [
  243.                                 'peer_id' => $json['object']['message']['from_id'],
  244.                             ])['response']['upload_url'], __DIR__ . '/photos/' . $path . '.jpg');
  245.  
  246.                             $photo = api('photos.saveMessagesPhoto', [
  247.                                 'server' => $upload['server'],
  248.                                 'photo' => $upload['photo'],
  249.                                 'hash' => $upload['hash'],
  250.                             ]);
  251.  
  252.                             if (!empty($old_photo = DB::getAll('SELECT `photo` FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']]))) {
  253.                                 unlink(__DIR__ . '/photos/' . $old_photo . '.jpg');
  254.                             }
  255.                             DB::exec('UPDATE `users` SET `photo`=?, `server_photo`=? WHERE `user_id`=?', [$path, 'photo' . $photo['response'][0]['owner_id'] . '_' . $photo['response'][0]['id'], $json['object']['message']['from_id']]);
  256.  
  257.                             $sex_db = DB::getAll('SELECT `sex` FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0]['sex'];
  258.  
  259.                             if ($sex_db == 1) $f = 'лась';
  260.                             else $f = 'лся';
  261.  
  262.                             api('messages.send', [
  263.                                 'user_id' => $json['object']['message']['from_id'],
  264.                                 'message' => $name . ', вау! А ты тут красиво получи' . $f . '! &#128572;<br>Фотография успешно обновлена. &#128517;',
  265.                                 'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_search\"}","label": "&#128269; Начать поиск"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_view_profile\"}","label": "&#128213; Посмотреть мою анкету"},"color": "secondary"}]]}',
  266.                             ]);
  267.                         } else {
  268.                             api('messages.send', [
  269.                                 'user_id' => $json['object']['message']['from_id'],
  270.                                 'message' => $name . ', пожалуйста, пришли мне фотографию, или нажми кнопку <<Выйти>>. &#128521;',
  271.                             ]);
  272.                         }
  273.                         break;
  274.                     }
  275.                     case 'step_edit_name': {
  276.                         $cache->delete('step' . $json['object']['message']['from_id']);
  277.                         DB::exec('UPDATE `users` SET `first_name`=? WHERE `user_id`=?', [$json['object']['message']['text'], $json['object']['message']['from_id']]);
  278.                         api('messages.send', [
  279.                             'user_id' => $json['object']['message']['from_id'],
  280.                             'message' => $name . ', отлично! Теперь ты ' . $json['object']['message']['text'] . ' &#128525;',
  281.                             'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_search\"}","label": "&#128269; Начать поиск"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_view_profile\"}","label": "&#128213; Посмотреть мою анкету"},"color": "secondary"}]]}',
  282.                         ]);
  283.                         break;
  284.                     }
  285.                     case 'step_edit_age': {
  286.                         if (preg_match('/^[0-9]{1,2}$/', $json['object']['message']['text'])) {
  287.                             $cache->delete('step' . $json['object']['message']['from_id']);
  288.                             DB::exec('UPDATE `users` SET `age`=? WHERE `user_id`=?', [$json['object']['message']['text'], $json['object']['message']['from_id']]);
  289.  
  290.                             api('messages.send', [
  291.                                 'user_id' => $json['object']['message']['from_id'],
  292.                                 'message' => $name . ', возраст успешно изменен. &#128522;',
  293.                                 'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_search\"}","label": "&#128269; Начать поиск"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_view_profile\"}","label": "&#128213; Посмотреть мою анкету"},"color": "secondary"}]]}',
  294.                             ]);
  295.                         } else {
  296.                             api('messages.send', [
  297.                                 'user_id' => $json['object']['message']['from_id'],
  298.                                 'message' => $name . ', пожалуйста, укажи корректный возраст от 6-ти лет. &#128532;',
  299.                             ]);
  300.                         }
  301.                         break;
  302.                     }
  303.                     case 'step_edit_description': {
  304.                         DB::exec('UPDATE `users` SET `description`=? WHERE `user_id`=?', [$json['object']['message']['text'], $json['object']['message']['from_id']]);
  305.                         api('messages.send', [
  306.                             'user_id' => $json['object']['message']['from_id'],
  307.                             'message' => $name . ', отлично, информация <<О себе>> изменена. &#128519;',
  308.                             'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_search\"}","label": "&#128269; Начать поиск"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_view_profile\"}","label": "&#128213; Посмотреть мою анкету"},"color": "secondary"}]]}',
  309.                         ]);
  310.                         $cache->delete('step' . $json['object']['message']['from_id']);
  311.                         break;
  312.                     }
  313.                     case 'step_send_message': {
  314.                         $peer_id = $cache->get('search' . $json['object']['message']['from_id']);
  315.  
  316.                         DB::exec('UPDATE `users` SET `likes`=`likes`+1 WHERE `user_id`=?', [$peer_id]);
  317.  
  318.                         $db_sex = DB::getAll('SELECT `sex` FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0];
  319.                         $search_sex = [1 => 2, 2 => 1];
  320.  
  321.                         $db = DB::getAll('SELECT * FROM `users` WHERE `user_id`<>? AND `sex`=? ORDER BY RAND() LIMIT 1', [$json['object']['message']['from_id'], $search_sex[$db_sex['sex']]])[0];
  322.  
  323.                         $cache->set('search' . $json['object']['message']['from_id'], $db['user_id']);
  324.                         $message = $name . ', отлично, сообщение отправлено! &#128140;<br>Нашел еще кое-кого для тебя, смотри! &#128527;<br><br>&#128100; Имя: ' . $db['first_name'];
  325.  
  326.                         if (!empty($db['age'])) $message .= '<br>&#128123; Возраст: ' . $db['age'];
  327.                         if (!empty($db['city'])) $message .= '<br>&#127751; Город: ' . $db['city'];
  328.                         if (!empty($db['description'])) $message .= '<br>&#128221; О себе: ' . $db['description'];
  329.                         if (!empty($db['latitude']) && !empty($db['longitude'])) {
  330.                             $my_dist = DB::getAll('SELECT `latitude`, `longitude` FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0];
  331.                             $dist = calculateTheDistance($my_dist['latitude'], $my_dist['longitude'], $db['latitude'], $db['longitude']);
  332.                             if ($dist < 1000) $message  .= '<br>&#128204; Расстояние: < 1 км';
  333.                             else $message .= '<br>&#128204; Расстояние: ' . (int)($dist / 1000) . ' км';
  334.                         }
  335.  
  336.                         api('messages.send', [
  337.                             'user_id' => $json['object']['message']['from_id'],
  338.                             'message' => $message,
  339.                             'attachment' => $db['server_photo'],
  340.                             'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_like\"}","label": "&#10084; ' . $db['likes'] . '"},"color": "secondary"},{"action": {"type": "text","payload": "{\"button\": \"step_send_message\"}","label": "&#128140;"},"color": "secondary"},{"action": {"type": "text","payload": "{\"button\": \"step_search\"}","label": "&#128260;"},"color": "secondary"}]]}',
  341.                         ]);
  342.  
  343.                         $db = DB::getAll('SELECT * FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0];
  344.  
  345.                         $message = DB::getAll('SELECT `first_name` FROM `users` WHERE `user_id`=?', [$peer_id])[0]['first_name'] . ', @id' . $json['object']['message']['from_id'] . '(' . $name . ') написал тебе сообщение. &#10084;<br>&#128233; Текст сообщения: ' . $json['object']['message']['text'] . '<br><br>&#128100; Имя: ' . $db['first_name'];
  346.  
  347.                         if (!empty($db['age'])) $message .= '<br>&#128123; Возраст: ' . $db['age'];
  348.                         if (!empty($db['city'])) $message .= '<br>&#127751; Город: ' . $db['city'];
  349.                         if (!empty($db['description'])) $message .= '<br>&#128221; О себе: ' . $db['description'];
  350.                         if (!empty($db['latitude']) && !empty($db['longitude'])) {
  351.                             $my_dist = DB::getAll('SELECT `latitude`, `longitude` FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']])[0];
  352.                             $dist = calculateTheDistance($my_dist['latitude'], $my_dist['longitude'], $db['latitude'], $db['longitude']);
  353.                             if ($dist < 1000) $message  .= '<br>&#128204; Расстояние: < 1 км';
  354.                             else $message .= '<br>&#128204; Расстояние: ' . (int)($dist / 1000) . ' км';
  355.                         }
  356.  
  357.                         api('messages.send', [
  358.                             'user_id' => $peer_id,
  359.                             'message' => $message,
  360.                             'attachment' => $db['server_photo'],
  361.                             'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_like\"}","label": "&#10084; ' . $db['likes'] . '"},"color": "secondary"},{"action": {"type": "text","payload": "{\"button\": \"step_send_message\"}","label": "&#128140;"},"color": "secondary"},{"action": {"type": "text","payload": "{\"button\": \"step_search\"}","label": "&#128260;"},"color": "secondary"}]]}',
  362.                         ]);
  363.                         $cache->delete('step' . $json['object']['message']['from_id']);
  364.                         $cache->delete('search' . $json['object']['message']['from_id']);
  365.                         break;
  366.                     }
  367.                     default: {
  368.                         if (empty(DB::getAll('SELECT 1 FROM `users` WHERE `user_id`=?', [$json['object']['message']['from_id']]))) {
  369.                             api('messages.send', [
  370.                                 'user_id' => $json['object']['message']['from_id'],
  371.                                 'message' => 'Привет - привет! &#128516;<br>Хочешь найти вторую половинку? Тогда скорее жми <<Начать>>! &#128515;',
  372.                                 'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_edit_profile\"}","label": "Начать &#128293;"},"color": "secondary"}]]}',
  373.                             ]);
  374.                         } else {
  375.                             api('messages.send', [
  376.                                 'user_id' => $json['object']['message']['from_id'],
  377.                                 'message' => $name . ', пожалуйста, выбери, что ты хочешь сделать. &#128521; (test-menu da da da da)',
  378.                                 'keyboard' => '{"inline": true,"buttons": [[{"action": {"type": "text","payload": "{\"button\": \"step_search\"}","label": "&#128269; Начать поиск"},"color": "secondary"}],[{"action": {"type": "text","payload": "{\"button\": \"step_view_profile\"}","label": "&#128213; Посмотреть мою анкету"},"color": "secondary"}]]}',
  379.                             ]);
  380.                         }
  381.                         break;
  382.                     }
  383.                 }
  384.             }
  385.         }
  386.     }
  387. }
  388.  
  389. function api(string $method, array $array): array {
  390.     global $access_token, $v;
  391.     $array['access_token'] = $access_token;
  392.     $array['v'] = $v;
  393.     if ($method == 'messages.send') $array['random_id'] = rand(-999999999, 999999999);
  394.     return json_decode(cURL('https://api.vk.com/method/' . $method . '?' . http_build_query($array)), true);
  395. }
  396. function cURL(string $url): string {
  397.     $ch = curl_init();
  398.     curl_setopt_array($ch, [
  399.         CURLOPT_URL => $url,
  400.         CURLOPT_RETURNTRANSFER => true,
  401.         CURLOPT_SSL_VERIFYHOST => false,
  402.         CURLOPT_SSL_VERIFYPEER => false,
  403.         CURLOPT_FOLLOWLOCATION => false,
  404.         CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0,
  405.     ]);
  406.     $string = curl_exec($ch);
  407.     curl_close($ch);
  408.     return $string;
  409. }
  410. function uploadFile($url, $path)
  411. {
  412.     $ch = curl_init($url);
  413.     curl_setopt($ch, CURLOPT_HEADER, false);
  414.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  415.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  416.     curl_setopt($ch, CURLOPT_POST, true);
  417.     curl_setopt($ch, CURLOPT_POSTFIELDS, ['file1' => new \CURLFile($path)]);
  418.  
  419.     $data = curl_exec($ch);
  420.     curl_close($ch);
  421.     return json_decode($data, true);
  422. }
  423. function calculateTheDistance ($zA, $xA, $fB, $xB) {
  424.  
  425. // перевести координаты в радианы
  426.     $lat1 = $zA * M_PI / 180;
  427.     $lat2 = $fB * M_PI / 180;
  428.     $long1 = $xA * M_PI / 180;
  429.     $long2 = $xB * M_PI / 180;
  430.  
  431. // косинусы и синусы широт и разницы долгот
  432.     $cl1 = cos($lat1);
  433.     $cl2 = cos($lat2);
  434.     $sl1 = sin($lat1);
  435.     $sl2 = sin($lat2);
  436.     $delta = $long2 - $long1;
  437.     $cdelta = cos($delta);
  438.     $sdelta = sin($delta);
  439.  
  440. // вычисления длины большого круга
  441.     $y = sqrt(pow($cl2 * $sdelta, 2) + pow($cl1 * $sl2 - $sl1 * $cl2 * $cdelta, 2));
  442.     $x = $sl1 * $sl2 + $cl1 * $cl2 * $cdelta;
  443.  
  444. //
  445.     $ad = atan2($y, $x);
  446.     $dist = $ad * 6372795;
  447.  
  448.     return $dist;
  449. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement