· 6 years ago · Mar 29, 2020, 02:22 PM
1import requests
2import json
3import numpy as np
4import random
5import re
6import threading
7
8access_token = '' #Токен группы (должны быть права на сообщения)
9public_key = '' #API ключ от zvonok.com
10group_id = '' #ID группы (положительное число!)
11
12#Название пранка, ид кампании Zvonok.com, ид аудио VK
13pranks = [['Покупка спермы', '', ''], ['Порнография на компе', '', ''], ['Вы - киберпреступник', '', ''], ['Таксист ждет', '', ''], ['Вы - шпион Пентагона', '', ''], ['Не пукайте', '', '']]
14
15keyboard_main = json.dumps({
16 "one_time": False,
17 "buttons": [
18 [{
19 "action":
20 {
21 "type": "text",
22 "label": "Пранки"
23 },
24 "color": "primary"
25 }],
26 [{
27 "action":
28 {
29 "type": "text",
30 "label": "Ключи"
31 },
32 "color": "primary"
33 }]
34 ]
35})
36
37keyboard_pranks = json.dumps({
38 "one_time": False,
39 "buttons": [
40 [{
41 "action":
42 {
43 "type": "text",
44 "label": pranks[0][0]
45 },
46 "color": "secondary"
47 },
48 {
49 "action":
50 {
51 "type": "text",
52 "label": pranks[1][0]
53 },
54 "color": "secondary"
55 }],
56 [{
57 "action":
58 {
59 "type": "text",
60 "label": pranks[2][0]
61 },
62 "color": "secondary"
63 },
64 {
65 "action":
66 {
67 "type": "text",
68 "label": pranks[3][0]
69 },
70 "color": "secondary"
71 }],
72 [{
73 "action":
74 {
75 "type": "text",
76 "label": pranks[4][0]
77 },
78 "color": "secondary"
79 },
80 {
81 "action":
82 {
83 "type": "text",
84 "label": pranks[5][0]
85 },
86 "color": "secondary"
87 }],
88 [{
89 "action":
90 {
91 "type": "text",
92 "label": 'Назад'
93 },
94 "color": "primary"
95 }]
96 ]
97})
98
99print('Call Prank Бот успешно запустился!\nРазработал MrCreepTon для vk.com/hackmysoftware')
100
101def sendMessage(peerid, message, keyboard, attachment):
102 r = 'https://api.vk.com/method/messages.send?access_token=' + access_token + '&peer_id=' + str(peerid) + '&random_id=' + str(np.int64(random.randint(10000, 1000000000000))) + '&group_id=' + group_id + '&v=5.52&message=' + str(message)
103 if keyboard != None:
104 r = r + '&keyboard=' + str(keyboard)
105 if attachment != None:
106 r = r + '&attachment=' + attachment
107 requests.get(r)
108
109
110def isWhiteListed(peerid):
111 f = open('whitelist.txt', 'r')
112 lines = f.readlines()
113 for line in lines:
114 line = line.split()
115 try:
116 if line[0] == str(peerid):
117 return True
118 except IndexError:
119 print('index error')
120 return False
121
122def addToBase(id, keys):
123 f = open('users.txt', 'a')
124 f.write('\n' + str(id) + ' 0 ' + str(keys))
125 f.close()
126
127def setPrank(id, prank):
128 f = open('users.txt', 'r')
129 lines = f.readlines()
130 f.close()
131 done = ''
132 for line in lines:
133 data = line.split()
134 try:
135 if data[0] == str(id):
136 done = done + data[0] + ' ' + str(prank) + ' ' + data[2] + '\n'
137 else:
138 done = done + line
139 except IndexError:
140 print('index error')
141 f = open('users.txt', 'w')
142 f.write(done)
143 f.close()
144
145def removeKey(id):
146 f = open('users.txt', 'r')
147 lines = f.readlines()
148 f.close()
149 done = ''
150 for line in lines:
151 data = line.split()
152 try:
153 if data[0] == str(id):
154 done = done + data[0] + ' ' + data[1] + ' ' + str(int(data[2]) - 1) + '\n'
155 else:
156 done = done + line
157 except IndexError:
158 print('index error')
159 f = open('users.txt', 'w')
160 f.write(done)
161 f.close()
162
163def getPrank(id):
164 f = open('users.txt', 'r')
165 lines = f.readlines()
166 for line in lines:
167 line = line.split()
168 try:
169 if line[0] == str(id):
170 return int(line[1])
171 except IndexError:
172 print('index error')
173 return None
174
175def getKeys(id):
176 f = open('users.txt', 'r')
177 lines = f.readlines()
178 for line in lines:
179 line = line.split()
180 try:
181 if line[0] == str(id):
182 return int(line[2])
183 except IndexError:
184 print('index error')
185 return None
186
187def mainMenu(peerid):
188 sendMessage(peerid, 'Добро пожаловать в главное меню!', keyboard_main, None)
189
190def validNumber(number):
191 number = number.replace('-', '')
192 number = number.replace('(', '')
193 number = number.replace(')', '')
194 number = number.replace(' ', '')
195 if number.startswith('+7'):
196 number = number.split('+7')
197 try:
198 #print(str(len(number[1])))
199 if len(number[1]) != 10:
200 return None
201 else:
202 return '+7' + number[1]
203 except IndexError:
204 return None
205 elif number.startswith('8'):
206 h = slice(1, 11)
207 try:
208 print(number[h])
209 if len(number[h]) != 10:
210 return None
211 else:
212 return '+7' + number[h]
213 except IndexError:
214 return None
215 return None
216
217
218def isInBase(id):
219 f = open('users.txt', 'r')
220 lines = f.readlines()
221 for line in lines:
222 line = line.split()
223 try:
224 if line[0] == str(id):
225 return True
226 except IndexError:
227 print('index error')
228 return False
229
230def call(peerid, number, prank):
231 print('[ID: '+str(peerid)+'] Начало пранка')
232 campaign_id = ''
233 callid = ''
234 end = False
235 for i in range(0, 7):
236 if prank == i:
237 campaign_id = pranks[i][1]
238 r = requests.post('https://calltools.ru/lk/cabapi_external/api/v1/phones/call/?campaign_id=' + campaign_id + '&phone=+' + number + '&public_key=' + public_key)
239 data = json.loads(r.text)
240 callid = data['call_id']
241 while True:
242 r = requests.get('https://calltools.ru/lk/cabapi_external/api/v1/phones/calls_by_phone/?campaign_id=' + campaign_id + '&phone=+' + number + '&public_key=' + public_key)
243 data = json.loads(r.text)
244 for i in range(0, len(data)):
245 if data[i]['call_id'] == callid:
246 if data[i]['status'] == 'compl_finished':
247 end = True
248 sendMessage(peerid, 'Пранк успешно завершен!\n\nПослушать: ' + data[i]['recorded_audio'], keyboard_main, None)
249 break
250 elif data[i]['status'] == 'attempts_exc':
251 end = True
252 sendMessage(peerid, 'Жертва не взяла трубку!', keyboard_main, None)
253 break
254 if end:
255 break
256while True:
257 r = requests.get('https://api.vk.com/method/messages.getLongPollServer?access_token=' + access_token + '&ts=1&v=5.52')
258 ts = str(json.loads(r.text)['response']['ts'])
259 key = str(json.loads(r.text)['response']['key'])
260 server = str(json.loads(r.text)['response']['server'])
261 r = requests.get('https://' + server + '?act=a_check&key=' + key + '&ts=' + ts + '&wait=1&mode=2&version=3')
262 data = json.loads(r.text)['updates']
263 for message in data:
264 if message[0] == 4:
265 msg = str(message[5])
266 if not isWhiteListed(message[3]):
267 sendMessage(message[3], 'Вас нет в списке юзеров!', keyboard_main, None)
268 print('[ID: '+str(message[3])+'] Отсутствие в списке юзеров')
269 else:
270 if not isInBase(message[3]):
271 addToBase(message[3], 5)
272 sendMessage(message[3], 'Вы отсутствовали в БД. Вам выдано 5 ключей', keyboard_main, None)
273 print('[ID: '+str(message[3])+'] Новый юзер')
274
275 prank = False
276 for i in range(0, 6):
277 if msg == pranks[i][0]:
278 prank = True
279 setPrank(str(message[3]), i)
280 sendMessage(message[3], 'Установлен пранк: ' + pranks[i][0] + '\nТеперь укажите номер, и мы сразу позвоним!', keyboard_main, 'audio' + pranks[i][2])
281 break
282 if prank:
283 break
284 if msg == 'Пранки':
285 attach = ''
286 for i in range(0, len(pranks)):
287 attach = attach + 'audio' + pranks[i][2] + ','
288 sendMessage(message[3], 'Выберите желаемый пранк', keyboard_pranks, attach)
289 elif msg == 'Ключи':
290 sendMessage(message[3], 'У вас: ' + str(getKeys(str(message[3]))) + ' ключей', keyboard_main, None)
291 else:
292 try:
293 try:
294 number = validNumber(msg)
295 if number == None:
296 mainMenu(str(message[3]))
297 else:
298 if getKeys(str(message[3])) == 0:
299 sendMessage(message[3], 'Упс! У вас кончились ключи! Попросите у создателя еще!', keyboard_main, None)
300 else:
301 removeKey(str(message[3]))
302 sendMessage(str(message[3]), 'Звоним на номер ' + number + ' пранком ' + pranks[getPrank(str(message[3]))][0], keyboard_main, None)
303 x = threading.Thread(target = call, args = (message[3], number, getPrank(str(message[3]))))
304 x.start()
305 except phonenumbers.phonenumberutil.NumberParseException:
306 mainMenu(str(message[3]))
307 except IndexError:
308 mainMenu(str(message[3]))