├── accounts.txt ├── proxy.txt ├── requirements.txt ├── README.md └── bot.py /accounts.txt: -------------------------------------------------------------------------------- 1 | your_evm_private_key_1 2 | your_evm_private_key_2 -------------------------------------------------------------------------------- /proxy.txt: -------------------------------------------------------------------------------- 1 | ip:port # Default Protcol HTTP. 2 | protocol://ip:port 3 | protocol://user:pass@ip:port -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | web3 2 | aiohttp 3 | aiohttp-socks 4 | fake-useragent 5 | eth-account 6 | eth-utils 7 | colorama 8 | pytz -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PolyFlow BOT 2 | PolyFlow BOT 3 | 4 | - Register Here : [PolyFlow](https://app.polyflow.tech/?refCode=D5C6CA5E86) 5 | - Use Code : D5C6CA5E86 6 | 7 | ## Features 8 | 9 | - Auto Get Account Information 10 | - Auto Run With [Monosans](https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/all.txt) Proxy - Choose 1 11 | - Auto Run With Private Proxy - Choose 2 12 | - Auto Run Without Proxy - Choose 3 13 | - Auto Complete Daily & Tutorial Quests 14 | - Multi Accounts 15 | 16 | ### Note: For now, I made the bot to skipping the scan to earn task, because the risk of the account being banned is very high. 17 | 18 | ## Requiremnets 19 | 20 | - Make sure you have Python3.9 or higher installed and pip. 21 | 22 | ## Instalation 23 | 24 | 1. **Clone The Repositories:** 25 | ```bash 26 | git clone https://github.com/vonssy/PolyFlow-BOT.git 27 | ``` 28 | ```bash 29 | cd PolyFlow-BOT 30 | ``` 31 | 32 | 2. **Install Requirements:** 33 | ```bash 34 | pip install -r requirements.txt #or pip3 install -r requirements.txt 35 | ``` 36 | 37 | ## Configuration 38 | 39 | - **accounts.txt:** You will find the file `accounts.txt` inside the project directory. Make sure `accounts.txt` contains data that matches the format expected by the script. Here are examples of file formats: 40 | ```bash 41 | your_evm_private_key_1 42 | your_evm_private_key_2 43 | ``` 44 | 45 | - **proxy.txt:** You will find the file `proxy.txt` inside the project directory. Make sure `proxy.txt` contains data that matches the format expected by the script. Here are examples of file formats: 46 | ```bash 47 | ip:port # Default Protcol HTTP. 48 | protocol://ip:port 49 | protocol://user:pass@ip:port 50 | ``` 51 | 52 | ## Run 53 | 54 | ```bash 55 | python bot.py #or python3 bot.py 56 | ``` 57 | 58 | ## Buy Me a Coffee 59 | 60 | - **EVM:** 0xe3c9ef9a39e9eb0582e5b147026cae524338521a 61 | - **TON:** UQBEFv58DC4FUrGqinBB5PAQS7TzXSm5c1Fn6nkiet8kmehB 62 | - **SOL:** E1xkaJYmAFEj28NPHKhjbf7GcvfdjKdvXju8d8AeSunf 63 | - **SUI:** 0xa03726ecbbe00b31df6a61d7a59d02a7eedc39fe269532ceab97852a04cf3347 64 | 65 | Thank you for visiting this repository, don't forget to contribute in the form of follows and stars. 66 | If you have questions, find an issue, or have suggestions for improvement, feel free to contact me or open an *issue* in this GitHub repository. 67 | 68 | **vonssy** -------------------------------------------------------------------------------- /bot.py: -------------------------------------------------------------------------------- 1 | from aiohttp import ( 2 | ClientResponseError, 3 | ClientSession, 4 | ClientTimeout 5 | ) 6 | from aiohttp_socks import ProxyConnector 7 | from fake_useragent import FakeUserAgent 8 | from eth_account import Account 9 | from eth_account.messages import encode_defunct 10 | from eth_utils import to_hex 11 | from datetime import datetime 12 | from colorama import * 13 | import asyncio, json, os, pytz 14 | 15 | wib = pytz.timezone('Asia/Jakarta') 16 | 17 | class Polyflow: 18 | def __init__(self) -> None: 19 | self.headers = { 20 | "Accept": "application/json, text/plain, */*", 21 | "Accept-Language": "id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7", 22 | "Origin": "https://app.polyflow.tech", 23 | "Referer": "https://app.polyflow.tech/", 24 | "Sec-Fetch-Dest": "empty", 25 | "Sec-Fetch-Mode": "cors", 26 | "Sec-Fetch-Site": "same-site", 27 | "User-Agent": FakeUserAgent().random 28 | } 29 | self.BASE_API = "https://api-v2.polyflow.tech/api" 30 | self.ref_code = "D5C6CA5E86" # U can change it with yours. 31 | self.proxies = [] 32 | self.proxy_index = 0 33 | self.account_proxies = {} 34 | 35 | def clear_terminal(self): 36 | os.system('cls' if os.name == 'nt' else 'clear') 37 | 38 | def log(self, message): 39 | print( 40 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 41 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}{message}", 42 | flush=True 43 | ) 44 | 45 | def welcome(self): 46 | print( 47 | f""" 48 | {Fore.GREEN + Style.BRIGHT}Auto Claim {Fore.BLUE + Style.BRIGHT}Polyflow - BOT 49 | """ 50 | f""" 51 | {Fore.GREEN + Style.BRIGHT}Rey? {Fore.YELLOW + Style.BRIGHT} 52 | """ 53 | ) 54 | 55 | def format_seconds(self, seconds): 56 | hours, remainder = divmod(seconds, 3600) 57 | minutes, seconds = divmod(remainder, 60) 58 | return f"{int(hours):02}:{int(minutes):02}:{int(seconds):02}" 59 | 60 | async def load_proxies(self, use_proxy_choice: int): 61 | filename = "proxy.txt" 62 | try: 63 | if use_proxy_choice == 1: 64 | async with ClientSession(timeout=ClientTimeout(total=30)) as session: 65 | async with session.get("https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/all.txt") as response: 66 | response.raise_for_status() 67 | content = await response.text() 68 | with open(filename, 'w') as f: 69 | f.write(content) 70 | self.proxies = content.splitlines() 71 | else: 72 | if not os.path.exists(filename): 73 | self.log(f"{Fore.RED + Style.BRIGHT}File {filename} Not Found.{Style.RESET_ALL}") 74 | return 75 | with open(filename, 'r') as f: 76 | self.proxies = f.read().splitlines() 77 | 78 | if not self.proxies: 79 | self.log(f"{Fore.RED + Style.BRIGHT}No Proxies Found.{Style.RESET_ALL}") 80 | return 81 | 82 | self.log( 83 | f"{Fore.GREEN + Style.BRIGHT}Proxies Total : {Style.RESET_ALL}" 84 | f"{Fore.WHITE + Style.BRIGHT}{len(self.proxies)}{Style.RESET_ALL}" 85 | ) 86 | 87 | except Exception as e: 88 | self.log(f"{Fore.RED + Style.BRIGHT}Failed To Load Proxies: {e}{Style.RESET_ALL}") 89 | self.proxies = [] 90 | 91 | def check_proxy_schemes(self, proxies): 92 | schemes = ["http://", "https://", "socks4://", "socks5://"] 93 | if any(proxies.startswith(scheme) for scheme in schemes): 94 | return proxies 95 | return f"http://{proxies}" 96 | 97 | def get_next_proxy_for_account(self, account): 98 | if account not in self.account_proxies: 99 | if not self.proxies: 100 | return None 101 | proxy = self.check_proxy_schemes(self.proxies[self.proxy_index]) 102 | self.account_proxies[account] = proxy 103 | self.proxy_index = (self.proxy_index + 1) % len(self.proxies) 104 | return self.account_proxies[account] 105 | 106 | def rotate_proxy_for_account(self, account): 107 | if not self.proxies: 108 | return None 109 | proxy = self.check_proxy_schemes(self.proxies[self.proxy_index]) 110 | self.account_proxies[account] = proxy 111 | self.proxy_index = (self.proxy_index + 1) % len(self.proxies) 112 | return proxy 113 | 114 | def generate_address(self, account: str): 115 | try: 116 | account = Account.from_key(account) 117 | address = account.address 118 | 119 | return address 120 | except Exception as e: 121 | return None 122 | 123 | def generate_payload(self, account: str, address: str, message: str): 124 | try: 125 | encoded_message = encode_defunct(text=message) 126 | signed_message = Account.sign_message(encoded_message, private_key=account) 127 | signature = to_hex(signed_message.signature) 128 | 129 | payload = { 130 | "address":address, 131 | "signature":signature, 132 | "chain_id":1, 133 | "referral_code":self.ref_code 134 | } 135 | 136 | return payload 137 | except Exception as e: 138 | return None 139 | 140 | def mask_account(self, account): 141 | mask_account = account[:6] + '*' * 6 + account[-6:] 142 | return mask_account 143 | 144 | def print_question(self): 145 | while True: 146 | try: 147 | print("1. Run With Monosans Proxy") 148 | print("2. Run With Private Proxy") 149 | print("3. Run Without Proxy") 150 | choose = int(input("Choose [1/2/3] -> ").strip()) 151 | 152 | if choose in [1, 2, 3]: 153 | proxy_type = ( 154 | "Run With Monosans Proxy" if choose == 1 else 155 | "Run With Private Proxy" if choose == 2 else 156 | "Run Without Proxy" 157 | ) 158 | print(f"{Fore.GREEN + Style.BRIGHT}{proxy_type} Selected.{Style.RESET_ALL}") 159 | return choose 160 | else: 161 | print(f"{Fore.RED + Style.BRIGHT}Please enter either 1, 2 or 3.{Style.RESET_ALL}") 162 | except ValueError: 163 | print(f"{Fore.RED + Style.BRIGHT}Invalid input. Enter a number (1, 2 or 3).{Style.RESET_ALL}") 164 | 165 | async def get_message(self, address: str, proxy=None, retries=5): 166 | url = f"{self.BASE_API}/account/sign_content?address={address}" 167 | for attempt in range(retries): 168 | connector = ProxyConnector.from_url(proxy) if proxy else None 169 | try: 170 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 171 | async with session.get(url=url, headers=self.headers) as response: 172 | response.raise_for_status() 173 | result = await response.json() 174 | return result["msg"]["content"] 175 | except (Exception, ClientResponseError) as e: 176 | if attempt < retries - 1: 177 | await asyncio.sleep(5) 178 | continue 179 | return None 180 | 181 | async def user_login(self, account: str, address: str, message: str, proxy=None, retries=5): 182 | url = f"{self.BASE_API}/account/login" 183 | data = json.dumps(self.generate_payload(account, address, message)) 184 | headers = { 185 | **self.headers, 186 | "Content-Length": str(len(data)), 187 | "Content-Type": "application/json" 188 | } 189 | for attempt in range(retries): 190 | connector = ProxyConnector.from_url(proxy) if proxy else None 191 | try: 192 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 193 | async with session.post(url=url, headers=headers, data=data) as response: 194 | response.raise_for_status() 195 | result = await response.json() 196 | return result["msg"]["token"] 197 | except (Exception, ClientResponseError) as e: 198 | if attempt < retries - 1: 199 | await asyncio.sleep(5) 200 | continue 201 | return None 202 | 203 | async def user_dashboard(self, token: str, proxy=None, retries=5): 204 | url = f"{self.BASE_API}/account/personalcenter/dashboard" 205 | headers = { 206 | **self.headers, 207 | "Authorization": f"Bearer {token}" 208 | } 209 | for attempt in range(retries): 210 | connector = ProxyConnector.from_url(proxy) if proxy else None 211 | try: 212 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 213 | async with session.get(url=url, headers=headers) as response: 214 | response.raise_for_status() 215 | result = await response.json() 216 | return result["msg"] 217 | except (Exception, ClientResponseError) as e: 218 | if attempt < retries - 1: 219 | await asyncio.sleep(5) 220 | continue 221 | return None 222 | 223 | async def quest_lists(self, token: str, quest_type: str, proxy=None, retries=5): 224 | url = f"{self.BASE_API}/account/personalcenter/quests/{quest_type}" 225 | headers = { 226 | **self.headers, 227 | "Authorization": f"Bearer {token}" 228 | } 229 | for attempt in range(retries): 230 | connector = ProxyConnector.from_url(proxy) if proxy else None 231 | try: 232 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 233 | async with session.get(url=url, headers=headers) as response: 234 | response.raise_for_status() 235 | result = await response.json() 236 | return result["msg"] 237 | except (Exception, ClientResponseError) as e: 238 | if attempt < retries - 1: 239 | await asyncio.sleep(5) 240 | continue 241 | return None 242 | 243 | async def complete_quests(self, token: str, quest_id: int, proxy=None, retries=5): 244 | url = f"{self.BASE_API}/account/personalcenter/quests/complete" 245 | data = json.dumps({"quest_id":quest_id}) 246 | headers = { 247 | **self.headers, 248 | "Authorization": f"Bearer {token}", 249 | "Content-Length": str(len(data)), 250 | "Content-Type": "application/json" 251 | } 252 | for attempt in range(retries): 253 | connector = ProxyConnector.from_url(proxy) if proxy else None 254 | try: 255 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 256 | async with session.post(url=url, headers=headers, data=data) as response: 257 | response.raise_for_status() 258 | result = await response.json() 259 | return result["msg"] 260 | except (Exception, ClientResponseError) as e: 261 | if attempt < retries - 1: 262 | await asyncio.sleep(5) 263 | continue 264 | return None 265 | 266 | async def claim_reward(self, token: str, proxy=None, retries=5): 267 | url = f"{self.BASE_API}/account/personalcenter/quests/daily/claim-reward" 268 | headers = { 269 | **self.headers, 270 | "Authorization": f"Bearer {token}", 271 | "Content-Length": "2", 272 | "Content-Type": "application/json" 273 | } 274 | for attempt in range(retries): 275 | connector = ProxyConnector.from_url(proxy) if proxy else None 276 | try: 277 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 278 | async with session.post(url=url, headers=headers, json={}) as response: 279 | if response.status == 500: 280 | return self.log( 281 | f"{Fore.CYAN + Style.BRIGHT} ● {Style.RESET_ALL}" 282 | f"{Fore.MAGENTA + Style.BRIGHT}Daily Reward{Style.RESET_ALL}" 283 | f"{Fore.YELLOW + Style.BRIGHT} Not Eligible To Claim {Style.RESET_ALL}" 284 | ) 285 | response.raise_for_status() 286 | result = await response.json() 287 | return result["msg"] 288 | except (Exception, ClientResponseError) as e: 289 | if attempt < retries - 1: 290 | await asyncio.sleep(5) 291 | continue 292 | return None 293 | 294 | async def process_get_nonce(self, address: str, use_proxy: bool): 295 | proxy = self.get_next_proxy_for_account(address) if use_proxy else None 296 | message = None 297 | while message is None: 298 | message = await self.get_message(address, proxy) 299 | if not message: 300 | self.log( 301 | f"{Fore.CYAN + Style.BRIGHT}Status :{Style.RESET_ALL}" 302 | f"{Fore.RED + Style.BRIGHT} GET Nonce Failed {Style.RESET_ALL}" 303 | ) 304 | proxy = self.rotate_proxy_for_account(address) if use_proxy else None 305 | await asyncio.sleep(5) 306 | continue 307 | 308 | return message 309 | 310 | async def process_get_token(self, account: str, address: str, use_proxy: bool): 311 | message = await self.process_get_nonce(address, use_proxy) 312 | if message: 313 | proxy = self.get_next_proxy_for_account(address) if use_proxy else None 314 | 315 | token = None 316 | while token is None: 317 | token = await self.user_login(account, address, message, proxy) 318 | if not token: 319 | self.log( 320 | f"{Fore.CYAN + Style.BRIGHT}Status :{Style.RESET_ALL}" 321 | f"{Fore.RED + Style.BRIGHT} Login Failed {Style.RESET_ALL}" 322 | ) 323 | proxy = self.rotate_proxy_for_account(address) if use_proxy else None 324 | await asyncio.sleep(5) 325 | continue 326 | 327 | self.log( 328 | f"{Fore.CYAN + Style.BRIGHT}Status :{Style.RESET_ALL}" 329 | f"{Fore.GREEN + Style.BRIGHT} Login Success {Style.RESET_ALL}" 330 | ) 331 | return token 332 | 333 | async def process_accounts(self, account: str, address, use_proxy: bool): 334 | token = await self.process_get_token(account, address, use_proxy) 335 | if token: 336 | proxy = self.get_next_proxy_for_account(address) if use_proxy else None 337 | self.log( 338 | f"{Fore.CYAN + Style.BRIGHT}Proxy :{Style.RESET_ALL}" 339 | f"{Fore.WHITE + Style.BRIGHT} {proxy} {Style.RESET_ALL}" 340 | ) 341 | 342 | balance = "N/A" 343 | 344 | user = await self.user_dashboard(token, proxy) 345 | if user: 346 | balance = user.get("total_points", 0) 347 | 348 | self.log( 349 | f"{Fore.CYAN + Style.BRIGHT}Balance :{Style.RESET_ALL}" 350 | f"{Fore.WHITE + Style.BRIGHT} {balance} PTS {Style.RESET_ALL}" 351 | ) 352 | 353 | self.log(f"{Fore.CYAN + Style.BRIGHT}Quest Lists:{Style.RESET_ALL}") 354 | 355 | daily_quests = await self.quest_lists(token, "daily", proxy) 356 | if daily_quests: 357 | quests = daily_quests.get("quests", []) 358 | if quests: 359 | self.log( 360 | f"{Fore.CYAN + Style.BRIGHT} ● {Style.RESET_ALL}" 361 | f"{Fore.MAGENTA + Style.BRIGHT}Daily{Style.RESET_ALL}" 362 | ) 363 | for quest in quests: 364 | if quest: 365 | quest_id = quest["id"] 366 | title = quest["title"] 367 | reward = quest["points"] 368 | status = quest["status"] 369 | 370 | if status == "Completed": 371 | self.log( 372 | f"{Fore.CYAN + Style.BRIGHT} > {Style.RESET_ALL}" 373 | f"{Fore.WHITE + Style.BRIGHT}{title}{Style.RESET_ALL}" 374 | f"{Fore.YELLOW + Style.BRIGHT} Already Completed {Style.RESET_ALL}" 375 | ) 376 | continue 377 | 378 | elif quest_id == 6: 379 | self.log( 380 | f"{Fore.CYAN + Style.BRIGHT} > {Style.RESET_ALL}" 381 | f"{Fore.WHITE + Style.BRIGHT}{title}{Style.RESET_ALL}" 382 | f"{Fore.YELLOW + Style.BRIGHT} Skipped {Style.RESET_ALL}" 383 | ) 384 | continue 385 | 386 | complete = await self.complete_quests(token, quest_id, proxy) 387 | if complete and complete.get("message", ) == "Quest completed successfully": 388 | self.log( 389 | f"{Fore.CYAN + Style.BRIGHT} > {Style.RESET_ALL}" 390 | f"{Fore.WHITE + Style.BRIGHT}{title}{Style.RESET_ALL}" 391 | f"{Fore.GREEN + Style.BRIGHT} Is Completed {Style.RESET_ALL}" 392 | f"{Fore.MAGENTA + Style.BRIGHT}-{Style.RESET_ALL}" 393 | f"{Fore.CYAN + Style.BRIGHT} Reward {Style.RESET_ALL}" 394 | f"{Fore.WHITE + Style.BRIGHT}{reward} PTS{Style.RESET_ALL}" 395 | ) 396 | else: 397 | self.log( 398 | f"{Fore.CYAN + Style.BRIGHT} > {Style.RESET_ALL}" 399 | f"{Fore.WHITE + Style.BRIGHT}{title}{Style.RESET_ALL}" 400 | f"{Fore.RED + Style.BRIGHT} Not Completed {Style.RESET_ALL}" 401 | ) 402 | 403 | else: 404 | self.log( 405 | f"{Fore.CYAN + Style.BRIGHT} ● {Style.RESET_ALL}" 406 | f"{Fore.MAGENTA + Style.BRIGHT}Daily{Style.RESET_ALL}" 407 | f"{Fore.RED + Style.BRIGHT} Quests Data Is None {Style.RESET_ALL}" 408 | ) 409 | 410 | claim_reward = await self.claim_reward(token, proxy) 411 | if claim_reward and claim_reward.get("message") == "Daily quest reward claimed successfully": 412 | reward = claim_reward.get("points", "N/A") 413 | self.log( 414 | f"{Fore.CYAN + Style.BRIGHT} ● {Style.RESET_ALL}" 415 | f"{Fore.MAGENTA + Style.BRIGHT}Daily Reward{Style.RESET_ALL}" 416 | f"{Fore.GREEN + Style.BRIGHT} Is Claimed {Style.RESET_ALL}" 417 | f"{Fore.MAGENTA + Style.BRIGHT}-{Style.RESET_ALL}" 418 | f"{Fore.CYAN + Style.BRIGHT} Reward {Style.RESET_ALL}" 419 | f"{Fore.WHITE + Style.BRIGHT}{reward} PTS{Style.RESET_ALL}" 420 | ) 421 | elif claim_reward and claim_reward.get("message") == "You've already received a Daily quest reward": 422 | self.log( 423 | f"{Fore.CYAN + Style.BRIGHT} ● {Style.RESET_ALL}" 424 | f"{Fore.MAGENTA + Style.BRIGHT}Daily Reward{Style.RESET_ALL}" 425 | f"{Fore.YELLOW + Style.BRIGHT} Already Claimed {Style.RESET_ALL}" 426 | ) 427 | 428 | tutorial_quests = await self.quest_lists(token, "tutorial", proxy) 429 | if tutorial_quests: 430 | quests = tutorial_quests.get("list", []) 431 | if quests: 432 | self.log( 433 | f"{Fore.CYAN + Style.BRIGHT} ● {Style.RESET_ALL}" 434 | f"{Fore.MAGENTA + Style.BRIGHT}Tutorial{Style.RESET_ALL}" 435 | ) 436 | for quest in quests: 437 | if quest: 438 | quest_id = quest["id"] 439 | title = quest["title"] 440 | reward = quest["points"] 441 | status = quest["campaign_status"] 442 | 443 | if status == "Completed": 444 | self.log( 445 | f"{Fore.CYAN + Style.BRIGHT} > {Style.RESET_ALL}" 446 | f"{Fore.WHITE + Style.BRIGHT}{title}{Style.RESET_ALL}" 447 | f"{Fore.YELLOW + Style.BRIGHT} Already Completed {Style.RESET_ALL}" 448 | ) 449 | continue 450 | elif quest_id == 9: 451 | self.log( 452 | f"{Fore.CYAN + Style.BRIGHT} > {Style.RESET_ALL}" 453 | f"{Fore.WHITE + Style.BRIGHT}{title}{Style.RESET_ALL}" 454 | f"{Fore.YELLOW + Style.BRIGHT} Skipped {Style.RESET_ALL}" 455 | ) 456 | continue 457 | 458 | complete = await self.complete_quests(token, quest_id, proxy) 459 | if complete and complete.get("message") == "Tutorial quest completed successfully": 460 | self.log( 461 | f"{Fore.CYAN + Style.BRIGHT} > {Style.RESET_ALL}" 462 | f"{Fore.WHITE + Style.BRIGHT}{title}{Style.RESET_ALL}" 463 | f"{Fore.GREEN + Style.BRIGHT} Is Completed {Style.RESET_ALL}" 464 | f"{Fore.MAGENTA + Style.BRIGHT}-{Style.RESET_ALL}" 465 | f"{Fore.CYAN + Style.BRIGHT} Reward {Style.RESET_ALL}" 466 | f"{Fore.WHITE + Style.BRIGHT}{reward} PTS{Style.RESET_ALL}" 467 | ) 468 | else: 469 | self.log( 470 | f"{Fore.CYAN + Style.BRIGHT} > {Style.RESET_ALL}" 471 | f"{Fore.WHITE + Style.BRIGHT}{title}{Style.RESET_ALL}" 472 | f"{Fore.RED + Style.BRIGHT} Not Completed {Style.RESET_ALL}" 473 | ) 474 | 475 | else: 476 | self.log( 477 | f"{Fore.CYAN + Style.BRIGHT} ● {Style.RESET_ALL}" 478 | f"{Fore.MAGENTA + Style.BRIGHT}Tutorial{Style.RESET_ALL}" 479 | f"{Fore.RED + Style.BRIGHT} Quests Data Is None {Style.RESET_ALL}" 480 | ) 481 | 482 | async def main(self): 483 | try: 484 | with open('accounts.txt', 'r') as file: 485 | accounts = [line.strip() for line in file if line.strip()] 486 | 487 | use_proxy_choice = self.print_question() 488 | 489 | use_proxy = False 490 | if use_proxy_choice in [1, 2]: 491 | use_proxy = True 492 | 493 | while True: 494 | self.clear_terminal() 495 | self.welcome() 496 | self.log( 497 | f"{Fore.GREEN + Style.BRIGHT}Account's Total: {Style.RESET_ALL}" 498 | f"{Fore.WHITE + Style.BRIGHT}{len(accounts)}{Style.RESET_ALL}" 499 | ) 500 | 501 | if use_proxy: 502 | await self.load_proxies(use_proxy_choice) 503 | 504 | separator = "=" * 25 505 | for account in accounts: 506 | if account: 507 | address = self.generate_address(account) 508 | self.log( 509 | f"{Fore.CYAN + Style.BRIGHT}{separator}[{Style.RESET_ALL}" 510 | f"{Fore.WHITE + Style.BRIGHT} {self.mask_account(address)} {Style.RESET_ALL}" 511 | f"{Fore.CYAN + Style.BRIGHT}]{separator}{Style.RESET_ALL}" 512 | ) 513 | account = await self.process_accounts(account, address, use_proxy) 514 | 515 | self.log(f"{Fore.CYAN + Style.BRIGHT}={Style.RESET_ALL}"*72) 516 | 517 | delay = 12 * 60 * 60 518 | while delay > 0: 519 | formatted_time = self.format_seconds(delay) 520 | print( 521 | f"{Fore.CYAN+Style.BRIGHT}[ Wait for{Style.RESET_ALL}" 522 | f"{Fore.WHITE+Style.BRIGHT} {formatted_time} {Style.RESET_ALL}" 523 | f"{Fore.CYAN+Style.BRIGHT}... ]{Style.RESET_ALL}" 524 | f"{Fore.WHITE+Style.BRIGHT} | {Style.RESET_ALL}" 525 | f"{Fore.YELLOW+Style.BRIGHT}All Accounts Have Been Processed...{Style.RESET_ALL}", 526 | end="\r", 527 | flush=True 528 | ) 529 | await asyncio.sleep(1) 530 | delay -= 1 531 | 532 | except FileNotFoundError: 533 | self.log(f"{Fore.RED}File 'accounts.txt' Not Found.{Style.RESET_ALL}") 534 | return 535 | except Exception as e: 536 | self.log(f"{Fore.RED+Style.BRIGHT}Error: {e}{Style.RESET_ALL}") 537 | 538 | if __name__ == "__main__": 539 | try: 540 | bot = Polyflow() 541 | asyncio.run(bot.main()) 542 | except KeyboardInterrupt: 543 | print( 544 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 545 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 546 | f"{Fore.RED + Style.BRIGHT}[ EXIT ] Polyflow - BOT{Style.RESET_ALL} " 547 | ) --------------------------------------------------------------------------------