· 6 years ago · Feb 23, 2020, 06:18 AM
1import curses
2from curses import panel
3import pickle
4import os
5import urllib
6import urllib.parse
7import urllib.request
8import time
9import ssl
10import sys
11# PYTHON SMS REPEATER WITH PROOVL SMS API CONNECTION
12# https://github.com/aarnhub
13# MAX LIMIT YOU CAN CHANGE - line 102 (by default 15)
14def mainmenu():
15 hedr()
16 key = 0
17 if not os.path.exists('smsrepdb.pickle'):
18 smsrepeater.addstr(11, 4, "1 STEP => SETUP API SETTINGS", curses.color_pair(3))
19 else:
20 smsrepeater.addstr(11, 4, " ")
21 smsrepeater.addstr(12, 4, "[ A ] SEND SMS")
22 smsrepeater.addstr(13, 4, "[ B ] API SETTINGS")
23 smsrepeater.addstr(14, 4, "[ Q ] QUIT")
24 smsrepeater.addstr(15, 4, "Choose button on keyboard: ", curses.color_pair(2))
25 try:
26 key = smsrepeater.getch(15,30)
27 smsrepeater.addch(15,31,key)
28 if key == ord('a') or key == ord('A'):
29 smsrepeater.clear()
30 curses.endwin()
31 smsrep()
32 elif key == ord('b') or key == ord('B'):
33 smsrepeater.clear()
34 settings()
35 elif key == ord('q') or key == ord('Q'):
36 curses.endwin()
37 print("bye")
38 sys.exit()
39 else:
40 smsrepeater.refresh()
41 smsrepeater.addstr(16, 6, "Wrong key press detected...")
42 mainmenu()
43 except:
44 smsrepeater.refresh()
45def settings():
46 hedr()
47 key = 0
48 smsrepeater.addstr(12, 4, "[ A ] CHANGE SETTINGS")
49 smsrepeater.addstr(13, 4, "[ B ] BACK")
50 smsrepeater.addstr(14, 4, "Choose button on keyboard: ", curses.color_pair(2))
51
52 try:
53 key = smsrepeater.getch(14,30)
54 smsrepeater.addch(14,30,key)
55 if key == ord('a') or key == ord('A'):
56 smsrepeater.clear()
57 settapi()
58 elif key == ord('b') or key == ord('B'):
59 smsrepeater.clear()
60 mainmenu()
61 else:
62 smsrepeater.refresh()
63 smsrepeater.addstr(18, 6, "Wrong key press detected...")
64 settings()
65 except:
66 smsrepeater.refresh()
67def smsrep():
68 print("\033[H\033[J")
69 print ("""
70 \x1B[32m ___ __ __ ___
71│ / __| \/ / __|
72│ \__ \ |\/| \__ \
73│ |___/_| |_|___/
74│ ___ ___ ___ ___ _ _____ ___ ___
75│ | _ \ __| _ \ __| /_\_ _| __| _ \
76│ | / _|| _/ _| / _ \| | | _|| /
77│ |_|_\___|_| |___/_/ \_\_| |___|_|_\
78
79 SMS Repeater: github.com/aarnhub \033[1;0m
80 """)
81 try:
82 with open('smsrepdb.pickle', 'rb') as rfp:
83 otput = pickle.load(rfp)
84 from2 = otput[0]
85 user1 = otput[1]
86 token1 = otput[2]
87 except:
88 print("\033[1;33mAfter sending, please check Api settings. It can't be empty \033[1;0m")
89 from2 = "44555555555"
90 user1 = "Empty"
91 token1 = "Empty"
92 finally:
93 user = user1
94 token = token1
95 from1 = from2
96 print("\033[1;33mSettings SID:" + from1 + " UID:" + user + " token:" + token + "\033[1;0m")
97 int_string = input(" \033[1;32m 1.Enter phone numbers, separated by comma:\033[1;0m\n")
98 input_string2 = input(" \033[1;32m 2.Enter Text and press Enter:\033[1;0m\n")
99 while True:
100 try:
101 user_number = int(input(" \033[1;32m 3.How many times repeate SMS to this numbers? (min 1 - 10000 max):\033[1;0m\n"))
102 assert 0 < user_number < 10000 # MAX LIMIT 15
103 except ValueError:
104 print(" \033[1;31mNot a number! Please enter a number.\033[1;0m")
105 except AssertionError:
106 print(" \033[1;31mPlease enter a number between 1 and 15\033[1;0m")
107 else:
108 numbers = int_string.split(",")
109 n = int(user_number)
110 messagesSent = 0
111 host = "https://www.proovl.com/api/send.php?"
112 for x in range (n):
113 for x in numbers:
114 messagesSent += 1
115 params = {
116 "user": user,
117 "token": token,
118 "from": from1,
119 "text": input_string2,
120 "to": x}
121 try:
122 _create_unverified_https_context = ssl._create_unverified_context
123 except AttributeError:
124 pass
125 else:
126 ssl._create_default_https_context = _create_unverified_https_context
127 query_string = urllib.parse.urlencode(params)
128 http_req = host + query_string
129 f = urllib.request.urlopen(http_req)
130 txt = (f.read().decode('utf-8'))
131 z = txt.split(";")
132 time.sleep(0.5)
133 print("\033[1;32mProgress: {}/{}\033[1;0m".format(messagesSent, len(numbers)), (x),("" + z[1] + ""))
134 if z[0] == "Error":
135 print("\033[1;31m== Error. Text messages not sent ==\033[1;0m")
136 else:
137 print("\033[1;32m== All messages has been sent! ==\033[1;0m")
138 else:
139 f.close()
140 if input("Send new message? \033[1;32m(Y/N)\033[1;0m").strip().upper() != 'Y':
141 print("\033[H\033[J")
142 mainmenu()
143 return
144 else:
145 print("\033[H\033[J")
146 smsrep()
147def settapi():
148 curses.endwin()
149 print("\033[H\033[J")
150 print ("""
151 \x1B[32m ___ __ __ ___
152│ / __| \/ / __|
153│ \__ \ |\/| \__ \
154│ |___/_| |_|___/
155│ ___ ___ ___ ___ _ _____ ___ ___
156│ | _ \ __| _ \ __| /_\_ _| __| _ \
157│ | / _|| _/ _| / _ \| | | _|| /
158│ |_|_\___|_| |___/_/ \_\_| |___|_|_\
159
160 SMS Repeater: github.com/aarnhub \033[1;0m
161 """)
162 input_number = input(" \033[1;32m1.Enter www.Proovl.com Phone number\033[1;0m\n")
163 input_userid = input(" \033[1;32m2.Enter www.Proovl.com UserID\033[1;0m\n")
164 input_token = input(" \033[1;32m3.Enter www.Proovl.com Token\033[1;0m\n")
165 try:
166 os.system('color 1f')
167 with open('smsrepdb.pickle', 'wb') as wfp:
168 pickle.dump((input_number, input_userid, input_token), wfp, protocol=pickle.HIGHEST_PROTOCOL)
169
170 with open('smsrepdb.pickle', 'rb') as rfp:
171 otput = pickle.load(rfp)
172
173 smsrepeater.addstr(17, 4, "Number: " + otput[0] )
174 smsrepeater.addstr(18, 4, "UserID: " + otput[1] )
175 smsrepeater.addstr(19, 4, "Token: " + otput[2] )
176 except:
177 print("Something wrong. Check files permissions.")
178 finally:
179 print("\033[H\033[J")
180 mainmenu()
181 return
182def hedr():
183 curses.start_color()
184 curses.init_pair(1, curses.COLOR_GREEN, curses.COLOR_BLACK)
185 curses.init_pair(2, curses.COLOR_RED, curses.COLOR_BLACK)
186 curses.init_pair(3, curses.COLOR_YELLOW, curses.COLOR_BLACK)
187 height, width = smsrepeater.getmaxyx()
188 smsrepeater.border(0)
189 smsrepeater.addstr(1,4," ___ __ __ ___", curses.color_pair(1))
190 smsrepeater.addstr(2,4," / __| \/ / __|", curses.color_pair(1))
191 smsrepeater.addstr(3,4," \__ \ |\/| \__ \ ", curses.color_pair(1))
192 smsrepeater.addstr(4,4," |___/_| |_|___/", curses.color_pair(1))
193 smsrepeater.addstr(5,4," ___ ___ ___ ___ _ _____ ___ ___", curses.color_pair(1))
194 smsrepeater.addstr(6,4,"| _ \ __| _ \ __| /_\_ _| __| _ \ ", curses.color_pair(1))
195 smsrepeater.addstr(7,4,"| / _|| _/ _| / _ \| | | _|| /", curses.color_pair(1))
196 smsrepeater.addstr(8,4,"|_|_\___|_| |___/_/ \_\_| |___|_|_\ ", curses.color_pair(1))
197 smsrepeater.addstr(10, 4, " SMS Repeater: github.com/aarnhub ", curses.color_pair(1))
198 #smsrepeater.endwin()
199def LogicLoop():
200 mainmenu()
201try:
202 smsrepeater = curses.initscr()
203 hedr()
204 LogicLoop()
205finally:
206 print(":)")
207 curses.endwin()
208 sys.exit()