1 | |
2 | import os |
3 | from time import sleep |
4 | from datetime import datetime |
5 | |
6 | os.environ['TZ'] = 'Asia/Ho_Chi_Minh' |
7 | |
8 | try: |
9 | import requests |
10 | except: |
11 | os.system("pip3 install requests") |
12 | import requests |
13 | |
14 | try: |
15 | from pystyle import Colors, Colorate, Write, Center, Add, Box |
16 | except: |
17 | os.system("pip3 install pystyle") |
18 | from pystyle import Colors, Colorate, Write, Center, Add, Box |
19 | |
20 | headers = { |
21 | 'authority': 'traodoisub.com', |
22 | 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', |
23 | 'accept-language': 'en-US,en;q=0.9,vi;q=0.8', |
24 | 'user-agent': 'traodoisub tiktok tool', |
25 | } |
26 | |
27 | def login_tds(token): |
28 | try: |
29 | r = requests.get('https://traodoisub.com/api/?fields=profile&access_token='+token, headers=headers, timeout=5).json() |
30 | if 'success' in r: |
31 | os.system('clear') |
32 | print(Colors.green + f"Đăng nhập thành công!\nUser: {Colors.yellow + r['data']['user'] + Colors.green} | Xu hiện tại: {Colors.yellow + r['data']['xu']}") |
33 | return 'success' |
34 | else: |
35 | print(Colors.red + f"Token TDS không hợp lệ, hãy kiểm tra lại!\n") |
36 | return 'error_token' |
37 | except: |
38 | return 'error' |
39 | |
40 | def load_job(type_job, token): |
41 | try: |
42 | r = requests.get('https://traodoisub.com/api/?fields='+type_job+'&access_token='+token, headers=headers, timeout=5).json() |
43 | if 'data' in r: |
44 | return r |
45 | elif "countdown" in r: |
46 | sleep(round(r['countdown'])) |
47 | print(Colors.red + f"{r['error']}\n") |
48 | return 'error_countdown' |
49 | else: |
50 | print(Colors.red + f"{r['error']}\n") |
51 | return 'error_error' |
52 | except: |
53 | return 'error' |
54 | |
55 | def duyet_job(type_job, token, uid): |
56 | try: |
57 | r = requests.get(f'https://traodoisub.com/api/coin/?type={type_job}&id={uid}&access_token={token}', headers=headers, timeout=5).json() |
58 | if "cache" in r: |
59 | return r['cache'] |
60 | elif "success" in r: |
61 | dai = f'{Colors.yellow}------------------------------------------' |
62 | print(dai) |
63 | print(f"{Colors.cyan}Nhận thành công {r['data']['job_success']} nhiệm vụ | {Colors.green}{r['data']['msg']} | {Colors.yellow}{r['data']['xu']}") |
64 | print(dai) |
65 | return 'error' |
66 | else: |
67 | print(f"{Colors.red}{r['error']}") |
68 | return 'error' |
69 | except: |
70 | return 'error' |
71 | |
72 | |
73 | def check_tiktok(id_tiktok, token): |
74 | try: |
75 | r = requests.get('https://traodoisub.com/api/?fields=tiktok_run&id='+id_tiktok+'&access_token='+token, headers=headers, timeout=5).json() |
76 | if 'success' in r: |
77 | os.system('clear') |
78 | print(Colors.green + f"{r['data']['msg']}|ID: {Colors.yellow + r['data']['id'] + Colors.green}") |
79 | return 'success' |
80 | else: |
81 | print(Colors.red + f"{r['error']}\n") |
82 | return 'error_token' |
83 | except: |
84 | return 'error' |
85 | |
86 | |
87 | os.system('clear') |
88 | banner = r''' |
89 | █████╗ ███████╗ ██████╗██╗██╗ |
90 | ██╔══██╗██╔════╝██╔════╝██║██║ |
91 | ███████║███████╗██║ ██║██║ |
92 | ██╔══██║╚════██║██║ ██║██║ |
93 | ██║ ██║███████║╚██████╗██║██║ |
94 | ╚═╝ ╚═╝╚══════╝ ╚═════╝╚═╝╚═╝ |
95 | |
96 | ''' |
97 | gach = '=========================================' |
98 | option = f'''{gach}{Colors.green} |
99 | Danh sách nhiệm vu tool hỗ trợ: {Colors.red} |
100 | 1. Follow |
101 | 2. Tym |
102 | {Colors.yellow}{gach} |
103 | ''' |
104 | option_acc = f'''{gach}{Colors.green} |
105 | Danh sách lựa chọn: {Colors.red} |
106 | 1. Tiếp tục sử dụng acc TDS đã lưu |
107 | 2. Sử dụng acc TDS mới |
108 | {Colors.yellow}{gach} |
109 | ''' |
110 | print(Colorate.Horizontal(Colors.yellow_to_red, Center.XCenter(banner))) |
111 | print(Colors.red + Center.XCenter(Box.DoubleCube("Tool TDS Tiktok [ASCII]"))) |
112 | |
113 | |
114 | while True: |
115 | try: |
116 | f = open(f'TDS.txt','r') |
117 | token_tds = f.read() |
118 | f.close() |
119 | cache = 'old' |
120 | except FileNotFoundError: |
121 | token_tds = Write.Input("Nhập token TDS:", Colors.green_to_yellow, interval=0.0025) |
122 | cache = 'new' |
123 | |
124 | for _ in range(3): |
125 | check_log = login_tds(token_tds) |
126 | if check_log == 'success' or check_log == 'error_token': |
127 | break |
128 | else: |
129 | sleep(2) |
130 | |
131 | if check_log == 'success': |
132 | if cache == 'old': |
133 | while True: |
134 | print(option_acc) |
135 | try: |
136 | choice = int(Write.Input("Lựa chọn của bạn là (Ví dụ: sử dụng acc cũ nhập 1):", Colors.green_to_yellow, interval=0.0025)) |
137 | if choice in [1,2]: |
138 | break |
139 | else: |
140 | os.system('clear') |
141 | print(Colors.red + f"Lỗi lựa chọn!! Chỉ nhập 1 hoặc 2\n") |
142 | except: |
143 | os.system('clear') |
144 | print(Colors.red + f"Lỗi lựa chọn!! Chỉ nhập 1 hoặc 2\n") |
145 | |
146 | os.system('clear') |
147 | if choice == 1: |
148 | break |
149 | else: |
150 | os.remove('TDS.txt') |
151 | |
152 | else: |
153 | f = open(f'TDS.txt', 'w') |
154 | f.write(f'{token_tds}') |
155 | f.close() |
156 | break |
157 | else: |
158 | sleep(1) |
159 | os.system('clear') |
160 | |
161 | if check_log == 'success': |
162 | |
163 | while True: |
164 | id_tiktok = Write.Input("Nhập ID tiktok chạy (lấy ở mục cấu hình web):", Colors.green_to_yellow, interval=0.0025) |
165 | for _ in range(3): |
166 | check_log = check_tiktok(id_tiktok,token_tds) |
167 | if check_log == 'success' or check_log == 'error_token': |
168 | break |
169 | else: |
170 | sleep(2) |
171 | |
172 | if check_log == 'success': |
173 | break |
174 | elif check_log == 'error_token': |
175 | os.system('clear') |
176 | print(Colors.red + f"ID tiktok chưa được thêm vào cấu hình, vui lòng thêm vào cấu hình rồi nhập lại!\n") |
177 | else: |
178 | os.system('clear') |
179 | print(Colors.red + f"Lỗi sever vui lòng nhập lại!\n") |
180 | |
181 | |
182 | while True: |
183 | print(option) |
184 | try: |
185 | choice = int(Write.Input("Lựa chọn nhiệm vụ muốn làm (Ví dụ: Follow nhập 1):", Colors.green_to_yellow, interval=0.0025)) |
186 | if choice in [1,2]: |
187 | break |
188 | else: |
189 | os.system('clear') |
190 | print(Colors.red + f"Lỗi lựa chọn!! Chỉ nhập 1 hoặc 2\n") |
191 | except: |
192 | os.system('clear') |
193 | print(Colors.red + f"Lỗi lựa chọn!! Chỉ nhập 1 hoặc 2\n") |
194 | |
195 | |
196 | while True: |
197 | try: |
198 | delay = int(Write.Input("Thời gian delay giữa các job (giây):", Colors.green_to_yellow, interval=0.0025)) |
199 | if delay > 1: |
200 | break |
201 | else: |
202 | os.system('clear') |
203 | print(Colors.red + f"Delay tối thiểu là 3\n") |
204 | except: |
205 | os.system('clear') |
206 | print(Colors.red + f"Vui lòng nhập một số > 2\n") |
207 | |
208 | |
209 | while True: |
210 | try: |
211 | max_job = int(Write.Input("Dừng lại khi làm được số nhiệm vụ là:", Colors.green_to_yellow, interval=0.0025)) |
212 | if max_job > 9: |
213 | break |
214 | else: |
215 | os.system('clear') |
216 | print(Colors.red + f"Tối thiểu là 10\n") |
217 | except: |
218 | os.system('clear') |
219 | print(Colors.red + f"Vui lòng nhập một số > 9\n") |
220 | |
221 | os.system('clear') |
222 | |
223 | if choice == 1: |
224 | type_load = 'tiktok_follow' |
225 | type_duyet = 'TIKTOK_FOLLOW_CACHE' |
226 | type_nhan = 'TIKTOK_FOLLOW' |
227 | type_type = 'FOLLOW' |
228 | api_type = 'TIKTOK_FOLLOW_API' |
229 | elif choice == 2: |
230 | type_load = 'tiktok_like' |
231 | type_duyet = 'TIKTOK_LIKE_CACHE' |
232 | type_nhan = 'TIKTOK_LIKE' |
233 | api_type = 'TIKTOK_LIKE_API' |
234 | type_type = 'TYM' |
235 | |
236 | dem_tong = 0 |
237 | |
238 | while True: |
239 | list_job = load_job(type_load, token_tds) |
240 | sleep(2) |
241 | if isinstance(list_job, dict) == True: |
242 | for job in list_job['data']: |
243 | uid = job['id'] |
244 | link = job['link'] |
245 | os.system(f'termux-open-url {link}') |
246 | check_duyet = duyet_job(type_duyet, token_tds, uid) |
247 | |
248 | if check_duyet != 'error': |
249 | dem_tong += 1 |
250 | t_now = datetime.now().strftime("%H:%M:%S") |
251 | print(f'{Colors.yellow}[{dem_tong}] {Colors.red}| {Colors.cyan}{t_now} {Colors.red}| {Colors.pink}{type_type} {Colors.red}| {Colors.light_gray}{uid}') |
252 | |
253 | if check_duyet > 9: |
254 | sleep(3) |
255 | a = duyet_job(type_nhan, token_tds, api_type) |
256 | |
257 | |
258 | if dem_tong == max_job: |
259 | break |
260 | else: |
261 | for i in range(delay,-1,-1): |
262 | print(Colors.green + 'Vui lòng đợi: '+str(i)+' giây',end=('\r')) |
263 | sleep(1) |
264 | |
265 | if dem_tong == max_job: |
266 | print(f'{Colors.green}Hoàn thành {max_job} nhiệm vụ!') |
267 | break |