├── query.txt ├── requirements.txt ├── README.md └── bot.py /query.txt: -------------------------------------------------------------------------------- 1 | user= 2 | user= -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | colorama 3 | pytz -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fintopio BOT 2 | Fintopio BOT 3 | 4 | Register Here : [Fintopio](https://t.me/fintopio/wallet?startapp=reflink-reflink_3hluZhaQrVzr8HoL-) 5 | 6 | ## Fitur 7 | 8 | - Auto Get Account Information 9 | - Auto Claim Daily Login 10 | - Auto Destroyed Asteroid 11 | - Auto Start and Claim Farming 12 | - Auto Play Diamond Breath Game 13 | - Auto Play Space Tapper Game [y/n] 14 | - Auto Complete Task 15 | - Multi Account 16 | 17 | ## Prasyarat 18 | 19 | Pastikan Anda telah menginstal Python3.9 dan PIP. 20 | 21 | ## Instalasi 22 | 23 | 1. **Kloning repositori:** 24 | ```bash 25 | git clone https://github.com/vonssy/Fintopio-BOT.git 26 | ``` 27 | ```bash 28 | cd Fintopio-BOT 29 | ``` 30 | 31 | 2. **Instal Requirements:** 32 | ```bash 33 | pip install -r requirements.txt #or pip3 install -r requirements.txt 34 | ``` 35 | 36 | ## Konfigurasi 37 | 38 | - **query.txt:** Anda akan menemukan file `query.txt` di dalam direktori proyek. Pastikan `query.txt` berisi data yang sesuai dengan format yang diharapkan oleh skrip. Berikut adalah contoh format file: 39 | 40 | ```bash 41 | query_id= 42 | user= 43 | ``` 44 | 45 | ## Jalankan 46 | 47 | ```bash 48 | python bot.py #or python3 bot.py 49 | ``` 50 | 51 | ## Penutup 52 | 53 | Terima kasih telah mengunjungi repository ini, jangan lupa untuk memberikan kontribusi berupa follow dan stars. 54 | Jika Anda memiliki pertanyaan, menemukan masalah, atau memiliki saran untuk perbaikan, jangan ragu untuk menghubungi saya atau membuka *issue* di repositori GitHub ini. 55 | 56 | **vonssy** -------------------------------------------------------------------------------- /bot.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import os 4 | import random 5 | import urllib.parse 6 | from colorama import * 7 | from datetime import datetime, timedelta, timezone 8 | import time 9 | import pytz 10 | 11 | wib = pytz.timezone('Asia/Jakarta') 12 | 13 | class Fintopio: 14 | def __init__(self) -> None: 15 | self.session = requests.Session() 16 | self.headers = { 17 | 'Accept': 'application/json, text/plain, */*', 18 | 'Accept-Language': 'en-US,en;q=0.9', 19 | 'Cache-Control': 'no-cache', 20 | 'Host': 'fintopio-tg.fintopio.com', 21 | 'Origin': 'https://fintopio-tg.fintopio.com/', 22 | 'Pragma': 'no-cache', 23 | 'Referer': 'https://fintopio-tg.fintopio.com//', 24 | 'Sec-Fetch-Dest': 'empty', 25 | 'Sec-Fetch-Mode': 'cors', 26 | 'Sec-Fetch-Site': 'same-origin', 27 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0' 28 | } 29 | 30 | def clear_terminal(self): 31 | os.system('cls' if os.name == 'nt' else 'clear') 32 | 33 | def log(self, message): 34 | print( 35 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 36 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}{message}", 37 | flush=True 38 | ) 39 | 40 | def welcome(self): 41 | print( 42 | f""" 43 | {Fore.GREEN + Style.BRIGHT}Auto Claim {Fore.BLUE + Style.BRIGHT}Fintopio - BOT 44 | """ 45 | f""" 46 | {Fore.GREEN + Style.BRIGHT}Rey? {Fore.YELLOW + Style.BRIGHT} 47 | """ 48 | ) 49 | 50 | def format_seconds(self, seconds): 51 | hours, remainder = divmod(seconds, 3600) 52 | minutes, seconds = divmod(remainder, 60) 53 | return f"{int(hours):02}:{int(minutes):02}:{int(seconds):02}" 54 | 55 | def load_data(self, query: str): 56 | query_params = urllib.parse.parse_qs(query) 57 | query = query_params.get('user', [None])[0] 58 | 59 | if query: 60 | user_data_json = urllib.parse.unquote(query) 61 | user_data = json.loads(user_data_json) 62 | first_name = user_data['first_name'] 63 | return first_name 64 | else: 65 | raise ValueError("User data not found in query.") 66 | 67 | def auth_telegram(self, query: str): 68 | url = f'https://fintopio-tg.fintopio.com/api/auth/telegram?{query}' 69 | self.headers.update({ 70 | 'Content-Type': 'application/json' 71 | }) 72 | 73 | response = self.session.get(url, headers=self.headers) 74 | if response.status_code == 200: 75 | return response.json()['token'] 76 | else: 77 | return None 78 | 79 | def user(self, token: str): 80 | url = 'https://fintopio-tg.fintopio.com/api/hold/fast/init' 81 | self.headers.update({ 82 | 'Authorization': f'Bearer {token}', 83 | 'Content-Type': 'application/json' 84 | }) 85 | 86 | response = self.session.get(url, headers=self.headers) 87 | if response.status_code == 200: 88 | return response.json() 89 | else: 90 | return None 91 | 92 | def daily_checkin(self, token: str): 93 | url = 'https://fintopio-tg.fintopio.com/api/daily-checkins' 94 | self.headers.update({ 95 | 'Authorization': f'Bearer {token}', 96 | 'Content-Type': 'application/json' 97 | }) 98 | 99 | response = self.session.get(url, headers=self.headers) 100 | if response.status_code == 200: 101 | return response.json() 102 | else: 103 | return None 104 | 105 | def claim_checkin(self, token: str): 106 | url = 'https://fintopio-tg.fintopio.com/api/daily-checkins' 107 | self.headers.update({ 108 | 'Authorization': f'Bearer {token}', 109 | 'Content-Type': 'application/json' 110 | }) 111 | 112 | response = self.session.post(url, headers=self.headers) 113 | if response.status_code in [200, 201]: 114 | return response.json() 115 | else: 116 | return None 117 | 118 | def destroyed_asteroid(self, token: str, diamond_id: str): 119 | url = 'https://fintopio-tg.fintopio.com/api/clicker/diamond/complete' 120 | data = json.dumps({'diamondNumber': diamond_id}) 121 | self.headers.update({ 122 | 'Authorization': f'Bearer {token}', 123 | 'Content-Type': 'application/json' 124 | }) 125 | 126 | response = self.session.post(url, headers=self.headers, data=data) 127 | if response.status_code in [200, 201]: 128 | return True 129 | else: 130 | return False 131 | 132 | def farming_state(self, token: str): 133 | url = 'https://fintopio-tg.fintopio.com/api/farming/state' 134 | self.headers.update({ 135 | 'Authorization': f'Bearer {token}', 136 | 'Content-Type': 'application/json' 137 | }) 138 | 139 | response = self.session.get(url, headers=self.headers) 140 | if response.status_code == 200: 141 | return response.json() 142 | else: 143 | return None 144 | 145 | def start_farming(self, token: str): 146 | url = 'https://fintopio-tg.fintopio.com/api/farming/farm' 147 | self.headers.update({ 148 | 'Authorization': f'Bearer {token}', 149 | 'Content-Type': 'application/json' 150 | }) 151 | 152 | response = self.session.post(url, headers=self.headers) 153 | if response.status_code in [200, 201]: 154 | return response.json() 155 | else: 156 | return None 157 | 158 | def claim_farming(self, token: str): 159 | url = 'https://fintopio-tg.fintopio.com/api/farming/claim' 160 | self.headers.update({ 161 | 'Authorization': f'Bearer {token}', 162 | 'Content-Type': 'application/json' 163 | }) 164 | 165 | response = self.session.post(url, headers=self.headers) 166 | if response.status_code in [200, 201]: 167 | return response.json() 168 | else: 169 | return None 170 | 171 | def start_diamond_breath(self, token: str): 172 | url = 'https://fintopio-tg.fintopio.com/api/games/diamond-breath' 173 | self.headers.update({ 174 | 'Authorization': f'Bearer {token}', 175 | 'Content-Type': 'application/json' 176 | }) 177 | 178 | response = self.session.get(url, headers=self.headers) 179 | if response.status_code in [200, 201]: 180 | return response.json() 181 | else: 182 | return None 183 | 184 | def finish_diamond_breath(self, token: str, seconds: int): 185 | url = 'https://fintopio-tg.fintopio.com/api/games/diamond-breath' 186 | data = json.dumps({'seconds':seconds}) 187 | self.headers.update({ 188 | 'Authorization': f'Bearer {token}', 189 | 'Content-Type': 'application/json' 190 | }) 191 | 192 | response = self.session.post(url, headers=self.headers, data=data) 193 | if response.status_code in [200, 201]: 194 | return response.json() 195 | else: 196 | return None 197 | 198 | def start_sapce_tapper(self, token: str): 199 | url = 'https://fintopio-tg.fintopio.com/api/hold/space-tappers/game-settings' 200 | self.headers.update({ 201 | 'Authorization': f'Bearer {token}', 202 | 'Content-Type': 'application/json' 203 | }) 204 | 205 | response = self.session.get(url, headers=self.headers) 206 | if response.status_code in [200, 201]: 207 | return response.json() 208 | else: 209 | return None 210 | 211 | def claim_space_tapper(self, token: str, score: int): 212 | url = 'https://fintopio-tg.fintopio.com/api/hold/space-tappers/add-new-result' 213 | data = json.dumps({'score':score}) 214 | self.headers.update({ 215 | 'Authorization': f'Bearer {token}', 216 | 'Content-Type': 'application/json' 217 | }) 218 | 219 | response = self.session.post(url, headers=self.headers, data=data) 220 | if response.status_code in [200, 201]: 221 | return response.json() 222 | else: 223 | return None 224 | 225 | def tasks(self, token: str): 226 | url = 'https://fintopio-tg.fintopio.com/api/hold/tasks' 227 | self.headers.update({ 228 | 'Authorization': f'Bearer {token}', 229 | 'Content-Type': 'application/json' 230 | }) 231 | 232 | response = self.session.get(url, headers=self.headers) 233 | if response.status_code == 200: 234 | return response.json()['tasks'] 235 | else: 236 | return None 237 | 238 | def start_tasks(self, token: str, task_id: int): 239 | url = f'https://fintopio-tg.fintopio.com/api/hold/tasks/{task_id}/start' 240 | self.headers.update({ 241 | 'Authorization': f'Bearer {token}', 242 | 'Content-Type': 'application/json' 243 | }) 244 | 245 | response = self.session.post(url, headers=self.headers) 246 | if response.status_code in [200, 201]: 247 | return response.json() 248 | else: 249 | return None 250 | 251 | def claim_tasks(self, token: str, task_id: int): 252 | url = f'https://fintopio-tg.fintopio.com/api/hold/tasks/{task_id}/claim' 253 | self.headers.update({ 254 | 'Authorization': f'Bearer {token}', 255 | 'Content-Type': 'application/json' 256 | }) 257 | 258 | response = self.session.post(url, headers=self.headers) 259 | if response.status_code in [200, 201]: 260 | return response.json() 261 | else: 262 | return None 263 | 264 | def question(self): 265 | while True: 266 | play_game = input("Auto Play Space Tapper Game? [y/n] -> ").strip().lower() 267 | if play_game in ["y", "n"]: 268 | play_game = play_game == "y" 269 | break 270 | else: 271 | print(f"{Fore.RED+Style.BRIGHT}Invalid Input.{Fore.WHITE+Style.BRIGHT} Choose 'y' to play or 'n' to skip.{Style.RESET_ALL}") 272 | 273 | low_point = 0 274 | max_point = 0 275 | if play_game: 276 | while True: 277 | try: 278 | low_point = int(input("Set Low Point [ex: 1-3000]? -> ")) 279 | if low_point <= 0 or low_point > 3000: 280 | print(f"{Fore.RED+Style.BRIGHT}Low Point must be greater than 0 and less than or equal to 3000.{Style.RESET_ALL}") 281 | continue 282 | 283 | max_point = int(input("Set Max Point [ex: 3000]? -> ")) 284 | if max_point < low_point: 285 | print(f"{Fore.RED+Style.BRIGHT}Max Point must be greater than Low Point.{Style.RESET_ALL}") 286 | elif max_point > 3000: 287 | print(f"{Fore.RED+Style.BRIGHT}Max Point must be less than or equal to 3000.{Style.RESET_ALL}") 288 | else: 289 | break 290 | except ValueError: 291 | print(f"{Fore.RED+Style.BRIGHT}Invalid input. Enter a number.{Style.RESET_ALL}") 292 | 293 | return play_game, low_point, max_point 294 | 295 | def process_query(self, query: str, play_game: bool, low_point: int, max_point: int): 296 | 297 | account = self.load_data(query) 298 | 299 | token = self.auth_telegram(query) 300 | if not token: 301 | self.log( 302 | f"{Fore.MAGENTA+Style.BRIGHT}[ Account{Style.RESET_ALL}" 303 | f"{Fore.WHITE+Style.BRIGHT} {account} {Style.RESET_ALL}" 304 | f"{Fore.RED+Style.BRIGHT}Query Isn't Valid{Style.RESET_ALL}" 305 | f"{Fore.MAGENTA+Style.BRIGHT} ]{Style.RESET_ALL}" 306 | ) 307 | return 308 | 309 | if token: 310 | user = self.user(token) 311 | if user: 312 | self.log( 313 | f"{Fore.MAGENTA+Style.BRIGHT}[ Account{Style.RESET_ALL}" 314 | f"{Fore.WHITE+Style.BRIGHT} {account} {Style.RESET_ALL}" 315 | f"{Fore.MAGENTA+Style.BRIGHT}] [ Balance{Style.RESET_ALL}" 316 | f"{Fore.WHITE+Style.BRIGHT} {user['referralData']['balance']} {Style.RESET_ALL}" 317 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 318 | ) 319 | time.sleep(1) 320 | 321 | daily_checkin = self.daily_checkin(token) 322 | if daily_checkin: 323 | for checkin in daily_checkin['rewards']: 324 | status = checkin['status'] 325 | 326 | if status == 'now': 327 | claim = self.claim_checkin(token) 328 | if claim and not claim['claimed']: 329 | self.log( 330 | f"{Fore.MAGENTA+Style.BRIGHT}[ Check-In{Style.RESET_ALL}" 331 | f"{Fore.WHITE+Style.BRIGHT} Day {daily_checkin['totalDays']} {Style.RESET_ALL}" 332 | f"{Fore.GREEN+Style.BRIGHT}Is Claimed{Style.RESET_ALL}" 333 | f"{Fore.MAGENTA+Style.BRIGHT} ] [ Reward{Style.RESET_ALL}" 334 | f"{Fore.WHITE+Style.BRIGHT} {checkin['reward']} {Style.RESET_ALL}" 335 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 336 | ) 337 | else: 338 | self.log( 339 | f"{Fore.MAGENTA+Style.BRIGHT}[ Check-In{Style.RESET_ALL}" 340 | f"{Fore.WHITE+Style.BRIGHT} Day {daily_checkin['totalDays']} {Style.RESET_ALL}" 341 | f"{Fore.YELLOW+Style.BRIGHT}Is Already Checkin{Style.RESET_ALL}" 342 | f"{Fore.MAGENTA+Style.BRIGHT} ]{Style.RESET_ALL}" 343 | ) 344 | else: 345 | self.log( 346 | f"{Fore.MAGENTA+Style.BRIGHT}[ Check-In{Style.RESET_ALL}" 347 | f"{Fore.RED+Style.BRIGHT} Is None {Style.RESET_ALL}" 348 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 349 | ) 350 | time.sleep(1) 351 | 352 | diamond_state = user['clickerDiamondState'] 353 | diamond_id = diamond_state['diamondNumber'] 354 | state = diamond_state['state'] 355 | 356 | if state == 'available': 357 | click = self.destroyed_asteroid(token, diamond_id) 358 | if click: 359 | self.log( 360 | f"{Fore.MAGENTA+Style.BRIGHT}[ Asteroid{Style.RESET_ALL}" 361 | f"{Fore.GREEN+Style.BRIGHT} Is Destroyed {Style.RESET_ALL}" 362 | f"{Fore.MAGENTA+Style.BRIGHT}] [ Reward{Style.RESET_ALL}" 363 | f"{Fore.WHITE+Style.BRIGHT} {diamond_state['settings']['totalReward']} {Style.RESET_ALL}" 364 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 365 | ) 366 | else: 367 | self.log( 368 | f"{Fore.MAGENTA+Style.BRIGHT}[ Asteroid{Style.RESET_ALL}" 369 | f"{Fore.YELLOW+Style.BRIGHT} Isn't Destroyed {Style.RESET_ALL}" 370 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 371 | ) 372 | else: 373 | asteroid_time = diamond_state['timings']['nextAt'] / 1000 374 | if asteroid_time: 375 | next_asteroid_utc = datetime.fromtimestamp(asteroid_time, tz=timezone.utc) 376 | next_asteroid_wib = next_asteroid_utc.astimezone(wib).strftime('%x %X %Z') 377 | else: 378 | next_asteroid_wib = "N/A" 379 | 380 | self.log( 381 | f"{Fore.MAGENTA+Style.BRIGHT}[ Asteroid{Style.RESET_ALL}" 382 | f"{Fore.YELLOW+Style.BRIGHT} Is Already Destroyed {Style.RESET_ALL}" 383 | f"{Fore.MAGENTA+Style.BRIGHT}] Next Destroy at{Style.RESET_ALL}" 384 | f"{Fore.WHITE+Style.BRIGHT} {next_asteroid_wib} {Style.RESET_ALL}" 385 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 386 | ) 387 | time.sleep(1) 388 | 389 | farming = self.farming_state(token) 390 | if farming: 391 | farming_time = farming['timings']['finish'] 392 | if farming_time: 393 | claim_utc = datetime.fromtimestamp(farming_time / 1000, tz=timezone.utc) 394 | claim_wib = claim_utc.astimezone(wib).strftime('%x %X %Z') 395 | else: 396 | claim_wib = "N/A" 397 | 398 | state = farming['state'] 399 | if state == 'idling': 400 | start = self.start_farming(token) 401 | if start: 402 | self.log( 403 | f"{Fore.MAGENTA+Style.BRIGHT}[ Farming{Style.RESET_ALL}" 404 | f"{Fore.GREEN+Style.BRIGHT} Is Started {Style.RESET_ALL}" 405 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 406 | ) 407 | else: 408 | self.log( 409 | f"{Fore.MAGENTA+Style.BRIGHT}[ Farming{Style.RESET_ALL}" 410 | f"{Fore.RED+Style.BRIGHT} Isn't Started {Style.RESET_ALL}" 411 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 412 | ) 413 | elif state == 'farmed': 414 | claim = self.claim_farming(token) 415 | if claim: 416 | self.log( 417 | f"{Fore.MAGENTA+Style.BRIGHT}[ Farming{Style.RESET_ALL}" 418 | f"{Fore.GREEN+Style.BRIGHT} Is Claimed {Style.RESET_ALL}" 419 | f"{Fore.MAGENTA+Style.BRIGHT}] [ Reward{Style.RESET_ALL}" 420 | f"{Fore.WHITE+Style.BRIGHT} {farming['farmed']} {Style.RESET_ALL}" 421 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 422 | ) 423 | else: 424 | self.log( 425 | f"{Fore.MAGENTA+Style.BRIGHT}[ Farming{Style.RESET_ALL}" 426 | f"{Fore.RED+Style.BRIGHT} Isn't Claimed {Style.RESET_ALL}" 427 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 428 | ) 429 | start = self.start_farming(token) 430 | if start: 431 | self.log( 432 | f"{Fore.MAGENTA+Style.BRIGHT}[ Farming{Style.RESET_ALL}" 433 | f"{Fore.GREEN+Style.BRIGHT} Is Started {Style.RESET_ALL}" 434 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 435 | ) 436 | else: 437 | self.log( 438 | f"{Fore.MAGENTA+Style.BRIGHT}[ Farming{Style.RESET_ALL}" 439 | f"{Fore.RED+Style.BRIGHT} Isn't Started {Style.RESET_ALL}" 440 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 441 | ) 442 | else: 443 | self.log( 444 | f"{Fore.MAGENTA+Style.BRIGHT}[ Farming{Style.RESET_ALL}" 445 | f"{Fore.YELLOW+Style.BRIGHT} Is Already Started {Style.RESET_ALL}" 446 | f"{Fore.MAGENTA+Style.BRIGHT}] [ Claim at{Style.RESET_ALL}" 447 | f"{Fore.WHITE+Style.BRIGHT} {claim_wib} {Style.RESET_ALL}" 448 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 449 | ) 450 | else: 451 | self.log( 452 | f"{Fore.MAGENTA+Style.BRIGHT}[ Farming{Style.RESET_ALL}" 453 | f"{Fore.RED+Style.BRIGHT} Is None {Style.RESET_ALL}" 454 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 455 | ) 456 | time.sleep(1) 457 | 458 | diamond_breath = self.start_diamond_breath(token) 459 | if diamond_breath: 460 | reward = 6400 461 | score = diamond_breath['rewardPerSecond'] 462 | is_available = diamond_breath['isAvailableGame'] 463 | if is_available: 464 | seconds = reward / score 465 | finish = self.finish_diamond_breath(token, seconds) 466 | if finish: 467 | self.log( 468 | f"{Fore.MAGENTA+Style.BRIGHT}[ Diamond Breath{Style.RESET_ALL}" 469 | f"{Fore.GREEN+Style.BRIGHT} Is Success {Style.RESET_ALL}" 470 | f"{Fore.MAGENTA+Style.BRIGHT}] [ Reward{Style.RESET_ALL}" 471 | f"{Fore.WHITE+Style.BRIGHT} {reward} {Style.RESET_ALL}" 472 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 473 | ) 474 | else: 475 | self.log( 476 | f"{Fore.MAGENTA+Style.BRIGHT}[ Diamond Breath{Style.RESET_ALL}" 477 | f"{Fore.RED+Style.BRIGHT} Isn't Success {Style.RESET_ALL}" 478 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 479 | ) 480 | else: 481 | last_play = datetime.strptime(diamond_breath['lastPlayDate'], "%Y-%m-%dT%H:%M:%S.%fZ") 482 | next_play = (last_play.replace(tzinfo=timezone.utc) + timedelta(hours=7)).astimezone(wib).strftime('%x %X %Z') 483 | self.log( 484 | f"{Fore.MAGENTA+Style.BRIGHT}[ Diamond Breath{Style.RESET_ALL}" 485 | f"{Fore.YELLOW+Style.BRIGHT} Not Available {Style.RESET_ALL}" 486 | f"{Fore.MAGENTA+Style.BRIGHT}] [ Next Play at{Style.RESET_ALL}" 487 | f"{Fore.WHITE+Style.BRIGHT} {next_play} {Style.RESET_ALL}" 488 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 489 | ) 490 | else: 491 | self.log( 492 | f"{Fore.MAGENTA+Style.BRIGHT}[ Diamond Breath{Style.RESET_ALL}" 493 | f"{Fore.RED+Style.BRIGHT} Data Is None {Style.RESET_ALL}" 494 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 495 | ) 496 | time.sleep(1) 497 | 498 | if play_game: 499 | score = random.randint(low_point, max_point) * 10 500 | space_tapper = self.start_sapce_tapper(token) 501 | if space_tapper: 502 | claim = self.claim_space_tapper(token, score) 503 | if claim: 504 | self.log( 505 | f"{Fore.MAGENTA+Style.BRIGHT}[ Space Tapper{Style.RESET_ALL}" 506 | f"{Fore.GREEN+Style.BRIGHT} Is Finished {Style.RESET_ALL}" 507 | f"{Fore.MAGENTA+Style.BRIGHT}] [ Reward{Style.RESET_ALL}" 508 | f"{Fore.WHITE+Style.BRIGHT} {score} {Style.RESET_ALL}" 509 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 510 | ) 511 | else: 512 | self.log( 513 | f"{Fore.MAGENTA+Style.BRIGHT}[ Space Tapper{Style.RESET_ALL}" 514 | f"{Fore.RED+Style.BRIGHT} Isn't Finished {Style.RESET_ALL}" 515 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 516 | ) 517 | else: 518 | self.log( 519 | f"{Fore.MAGENTA+Style.BRIGHT}[ Space Tapper{Style.RESET_ALL}" 520 | f"{Fore.RED+Style.BRIGHT} Isn't Started {Style.RESET_ALL}" 521 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 522 | ) 523 | else: 524 | self.log( 525 | f"{Fore.MAGENTA+Style.BRIGHT}[ Space Tapper{Style.RESET_ALL}" 526 | f"{Fore.YELLOW+Style.BRIGHT} Is Skipped {Style.RESET_ALL}" 527 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 528 | ) 529 | time.sleep(1) 530 | 531 | tasks = self.tasks(token) 532 | if tasks: 533 | completed = False 534 | for task in tasks: 535 | task_id = task['id'] 536 | slug = task['slug'] 537 | 538 | if task and task['status'] == 'available': 539 | start = self.start_tasks(token, task_id) 540 | if start and start['status'] == 'verified': 541 | self.log( 542 | f"{Fore.MAGENTA+Style.BRIGHT}[ Task{Style.RESET_ALL}" 543 | f"{Fore.WHITE+Style.BRIGHT} {slug.upper()} {Style.RESET_ALL}" 544 | f"{Fore.GREEN+Style.BRIGHT}Is Started{Style.RESET_ALL}" 545 | f"{Fore.MAGENTA+Style.BRIGHT} ]{Style.RESET_ALL}" 546 | ) 547 | 548 | claim = self.claim_tasks(token, task_id) 549 | if claim and claim['status'] == 'completed': 550 | self.log( 551 | f"{Fore.MAGENTA+Style.BRIGHT}[ Task{Style.RESET_ALL}" 552 | f"{Fore.WHITE+Style.BRIGHT} {slug.upper()} {Style.RESET_ALL}" 553 | f"{Fore.GREEN+Style.BRIGHT}Is Claimed{Style.RESET_ALL}" 554 | f"{Fore.MAGENTA+Style.BRIGHT} ] [ Reward{Style.RESET_ALL}" 555 | f"{Fore.WHITE+Style.BRIGHT} {task['rewardAmount']} {Style.RESET_ALL}" 556 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 557 | ) 558 | else: 559 | self.log( 560 | f"{Fore.MAGENTA+Style.BRIGHT}[ Task{Style.RESET_ALL}" 561 | f"{Fore.WHITE+Style.BRIGHT} {slug.upper()} {Style.RESET_ALL}" 562 | f"{Fore.RED+Style.BRIGHT}Isn't Claimed{Style.RESET_ALL}" 563 | f"{Fore.MAGENTA+Style.BRIGHT} ]{Style.RESET_ALL}" 564 | ) 565 | else: 566 | self.log( 567 | f"{Fore.MAGENTA+Style.BRIGHT}[ Task{Style.RESET_ALL}" 568 | f"{Fore.WHITE+Style.BRIGHT} {slug.upper()} {Style.RESET_ALL}" 569 | f"{Fore.RED+Style.BRIGHT}Isn't Started{Style.RESET_ALL}" 570 | f"{Fore.MAGENTA+Style.BRIGHT} ]{Style.RESET_ALL}" 571 | ) 572 | 573 | elif task and task['status'] == 'verified': 574 | claim = self.claim_tasks(token, task_id) 575 | if claim and claim['status'] == 'completed': 576 | self.log( 577 | f"{Fore.MAGENTA+Style.BRIGHT}[ Task{Style.RESET_ALL}" 578 | f"{Fore.WHITE+Style.BRIGHT} {slug.upper()} {Style.RESET_ALL}" 579 | f"{Fore.GREEN+Style.BRIGHT}Is Claimed{Style.RESET_ALL}" 580 | f"{Fore.MAGENTA+Style.BRIGHT} ] [ Reward{Style.RESET_ALL}" 581 | f"{Fore.WHITE+Style.BRIGHT} {task['rewardAmount']} {Style.RESET_ALL}" 582 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 583 | ) 584 | else: 585 | self.log( 586 | f"{Fore.MAGENTA+Style.BRIGHT}[ Task{Style.RESET_ALL}" 587 | f"{Fore.WHITE+Style.BRIGHT} {slug.upper()} {Style.RESET_ALL}" 588 | f"{Fore.RED+Style.BRIGHT}Isn't Claimed{Style.RESET_ALL}" 589 | f"{Fore.MAGENTA+Style.BRIGHT} ]{Style.RESET_ALL}" 590 | ) 591 | else: 592 | completed = True 593 | 594 | if completed: 595 | self.log( 596 | f"{Fore.MAGENTA+Style.BRIGHT}[ Task{Style.RESET_ALL}" 597 | f"{Fore.GREEN+Style.BRIGHT} Is Completed {Style.RESET_ALL}" 598 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 599 | ) 600 | else: 601 | self.log( 602 | f"{Fore.MAGENTA+Style.BRIGHT}[ Task{Style.RESET_ALL}" 603 | f"{Fore.GREEN+Style.BRIGHT} Is Completed {Style.RESET_ALL}" 604 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 605 | ) 606 | else: 607 | self.log( 608 | f"{Fore.MAGENTA+Style.BRIGHT}[ Account{Style.RESET_ALL}" 609 | f"{Fore.RED+Style.BRIGHT} Data Is None {Style.RESET_ALL}" 610 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 611 | ) 612 | 613 | 614 | def main(self): 615 | try: 616 | with open('query.txt', 'r') as file: 617 | queries = [line.strip() for line in file if line.strip()] 618 | 619 | play_game, low_point, max_point = self.question() 620 | 621 | while True: 622 | self.clear_terminal() 623 | self.welcome() 624 | self.log( 625 | f"{Fore.GREEN + Style.BRIGHT}Account's Total: {Style.RESET_ALL}" 626 | f"{Fore.WHITE + Style.BRIGHT}{len(queries)}{Style.RESET_ALL}" 627 | ) 628 | self.log(f"{Fore.CYAN + Style.BRIGHT}-{Style.RESET_ALL}"*75) 629 | 630 | for query in queries: 631 | query = query.strip() 632 | if query: 633 | self.process_query(query, play_game, low_point, max_point) 634 | self.log(f"{Fore.CYAN + Style.BRIGHT}-{Style.RESET_ALL}"*75) 635 | time.sleep(3) 636 | 637 | seconds = 1800 638 | while seconds > 0: 639 | formatted_time = self.format_seconds(seconds) 640 | print( 641 | f"{Fore.CYAN+Style.BRIGHT}[ Wait for{Style.RESET_ALL}" 642 | f"{Fore.WHITE+Style.BRIGHT} {formatted_time} {Style.RESET_ALL}" 643 | f"{Fore.CYAN+Style.BRIGHT}... ]{Style.RESET_ALL}", 644 | end="\r" 645 | ) 646 | time.sleep(1) 647 | seconds -= 1 648 | 649 | except KeyboardInterrupt: 650 | self.log(f"{Fore.RED + Style.BRIGHT}[ EXIT ] Fintopio - BOT{Style.RESET_ALL}") 651 | except Exception as e: 652 | self.log(f"{Fore.RED + Style.BRIGHT}An error occurred: {e}{Style.RESET_ALL}") 653 | 654 | if __name__ == "__main__": 655 | bot = Fintopio() 656 | bot.main() --------------------------------------------------------------------------------