· 6 years ago · Nov 10, 2019, 05:19 PM
1<?php
2require $_SERVER['DOCUMENT_ROOT'].'/configs/Db.php';
3require $_SERVER['DOCUMENT_ROOT'].'/functions/filter.php';
4require $_SERVER['DOCUMENT_ROOT'].'/functions/text.php';
5require $_SERVER['DOCUMENT_ROOT'].'/functions/trueEnding.php';
6require $_SERVER['DOCUMENT_ROOT'].'/functions/create_grafik.php';
7require '/home/t/tetskiy/vendor/autoload.php';
8
9// Параметры ВК
10$vk_params = require $_SERVER['DOCUMENT_ROOT'].'/configs/vk_params.php';
11
12// Подключаем класс VK API bots
13use DigitalStar\vk_api\vk_api;
14const VERSION = '5.103';
15$vk = vk_api::create($vk_params['groups']['dg']['token'], VERSION)->setConfirm($vk_params['groups']['dg']['confirmation_token']);
16
17// Кнопки
18$braq = $vk->buttonText('? Браки', 'blue', ['command' => 'braq']);
19$add_braq = $vk->buttonText('+', 'white', ['command' => 'add_braq']);
20
21$keyboard = [
22 [
23 $braq,
24 $add_braq
25 ]
26 ];
27
28// Инициализация переменных
29$vk->initVars($chat_id, $entry_message, $payload, $user_id, $type, $data);
30
31// Проверяем секретный ключ
32if ($data->secret != "s8QoyA4t2") exit;
33// Подключаем БД
34$db = new Db;
35
36// Если это сообщение
37if ($type == 'message_new' && $chat_id == 2000000003) {
38 if ($entry_message == "update" && $user_id == 406627586) {
39 $vk->sendButton($chat_id, "update: ?", $keyboard);
40 exit;
41 }
42
43 // Обращение к пользователю только по имени
44 $user = $vk->getAlias($user_id, 0);
45
46 // Если нажата кнопка
47 if ($payload) {
48 $marriages = DB::$dbh->getRows("SELECT * FROM marriage WHERE live=1 ORDER BY time ASC;");
49 if ($payload['command'] == 'braq') {
50 if ($marriages) {
51 $message = "? Список всех зарегестрированных браков:\n\n";
52 foreach ($marriages as $key => $marriage) {
53 $key++;
54 $user_data1 = $vk->getAlias($marriage['id1'], 1);
55 $user_data2 = $vk->getAlias($marriage['id2'], 1);
56
57 if ($marriage['time'] < time() - 60 * 60 * 24) {
58 $time = floor((time() - $marriage['time']) / 60 / 60 / 24);
59 $time2 = number_format($time)." ".ending($time, 'день', 'дня', 'дней');
60 } else if ($marriage['time'] < time() - 60 * 60) {
61 $time = floor((time() - $marriage['time']) / 60 / 60);
62 $time2 = number_format($time)." ".ending($time, 'час', 'часа', 'часов');
63 } else if ($marriage['time'] < time() - 60) {
64 $time = floor((time() - $marriage['time']) / 60);
65 $time2 = number_format($time)." ".ending($time, 'минута', 'минуты', 'минут');
66 } else {
67 $time = floor((time() - $marriage['time']));
68 $time2 = number_format($time)." ".ending($time, 'секунда', 'секунды', 'секунд');
69 }
70 $time3 = date('d.m.Yг.', $marriage['time']);;
71
72 $message .= "{$key}) {$user_data1} ? {$user_data2} в браке: {$time2}, дата регистрации {$time3}\n";
73 }
74
75 $vk->reply($message);
76 } else {
77 $vk->reply("{$user}, нет ни одного брака :)");
78 }
79 exit;
80 // Создать брак
81 } else if ($payload['command'] == 'add_braq') {
82 // Ищем брак
83 $braq = DB::$dbh->getRow("SELECT * FROM marriage WHERE live=? AND id1=?;",
84 array(
85 1,
86 $user_id
87 ));
88 if ($braq) {
89 $user2 = $vk->getAlias($braq['id2'], 1);
90 $vk->reply("{$user}, ты уже состоишь в браке с {$user2}\n\nРазвести вас может только создатель беседы ?");
91 } else {
92 $user_data_sex = $vk->userInfo($user_id, ['fields' => 'sex']);
93 if ($user_data_sex['sex'] == 1) {$vk->reply("{$user}, предложение может сделать только парень :)"); exit;}
94 // Заносим в БД
95 DB::$dbh->execute("INSERT INTO marriage (id1, wait) VALUES (?, ?);",
96 array(
97 $user_id,
98 1,
99 ));
100
101 $vk->reply("{$user}, с кем желаешь заключить брак? (Имя Фамилия)");
102 }
103 exit;
104 }
105 }
106
107 // Запрос на вступление в брак
108 $braq_wait = DB::$dbh->getRow("SELECT * FROM marriage WHERE wait=? AND id2=? AND id1=?;",
109 array(
110 1,
111 0,
112 $user_id,
113 ));
114 if ($braq_wait) {
115 if ($entry_message && $braq_wait['id1'] == $user_id) {
116 // Достаем и имя
117 $data_text = explode(" ", $entry_message);
118 $first_name = mb_convert_case($data_text[0], MB_CASE_TITLE, "UTF-8");
119 $last_name = mb_convert_case($data_text[1], MB_CASE_TITLE, "UTF-8");
120
121 // Список участников беседы
122 $list_users = $vk->request('messages.getConversationMembers', ['peer_id' => $chat_id]);
123
124 // Ловим id того кто нужен
125 foreach ($list_users['items'] as $value) {
126 $para_id = $value['member_id'];
127 $user_data = $vk->userInfo($value['member_id']);
128 if ($user_data['first_name'] == $first_name && $user_data['last_name'] == $last_name) {
129 $error = false;
130 break;
131 } else $error = true;
132 }
133
134 // Если такого нет
135 if ($error == true) {
136 $vk->reply("{$user}, участник не найден, попробуй снова");
137 exit;
138 }
139
140 // Не состоит ли в браке
141 $check_braq = DB::$dbh->getRow("SELECT * FROM marriage WHERE live=? AND (id1=? OR id2=?);",
142 array(
143 1,
144 $para_id,
145 $para_id,
146 ));
147
148 if ($check_braq) {
149 $vk->reply("{$user}, этот участник уже состоит в браке {$para_id}");
150 exit;
151 }
152 // Уведомляем пару
153 DB::$dbh->execute("UPDATE marriage SET id2=? WHERE id1=?;",
154 array(
155 $para_id,
156 $user_id,
157 ));
158
159 $user1 = $vk->getAlias($user_id, 1);
160 $user2 = $vk->getAlias($para_id, 1);
161 $vk->reply("{$user2}, согласны-ли Вы вступить в брак с {$user1}? (да или нет)");
162 exit;
163 }
164 }
165
166 // Ожидание ответа
167 $braq_wait_ans = DB::$dbh->getRow("SELECT * FROM marriage WHERE wait=? AND id2=? AND time=?;",
168 array(
169 1,
170 $user_id,
171 0,
172 ));
173 if ($braq_wait_ans) {
174 if ($entry_message && $braq_wait_ans['id2'] == $user_id) {
175 if (preg_match("/^да$/iu", $entry_message)) {
176 DB::$dbh->execute("UPDATE marriage SET time=?, live=?, wait=? WHERE id2=?;",
177 array(
178 time(),
179 1,
180 0,
181 $user_id,
182 ));
183 $user1 = $vk->getAlias($braq_wait_ans['id1'], 1);
184 $user2 = $vk->getAlias($braq_wait_ans['id2'], 1);
185 $vk->reply("{$user1} и {$user2} теперь в счастливом браке!");
186 } else if (preg_match("/^нет$/iu", $entry_message)) {
187 DB::$dbh->execute("DELETE FROM marriage WHERE id2=? AND time=? AND wait=? LIMIT 1;",
188 array(
189 $user_id,
190 0,
191 1,
192 ));
193 $user1 = $vk->getAlias($braq_wait_ans['id1'], 1);
194 $vk->reply("{$user1}, тебе отказали ?");
195 }
196 exit;
197 }
198 }
199}