├── accounts.txt ├── proxy.txt ├── requirements.txt ├── README.md └── bot.py /accounts.txt: -------------------------------------------------------------------------------- 1 | your_solana_private_key_1 (base58) 2 | your_solana_private_key_2 (base58) -------------------------------------------------------------------------------- /proxy.txt: -------------------------------------------------------------------------------- 1 | ip:port # Default Protcol HTTP. 2 | protocol://ip:port 3 | protocol://user:pass@ip:port -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | aiohttp==3.11.10 2 | aiohttp-socks==0.9.1 3 | fake-useragent==1.5.1 4 | colorama==0.4.6 5 | base58==2.1.1 6 | pynacl==1.5.0 7 | pytz==2024.1 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Assisterr BOT 2 | Assisterr BOT 3 | 4 | Register Here : [Assisterr](https://build.assisterr.ai/?ref=66aa875402ad9bcc9ae1f21a) 5 | 6 | ## Features 7 | 8 | - Auto Get Account Information 9 | - Auto Run With [Proxyscrape Free Proxy](https://proxyscrape.com/free-proxy-list) - `Choose 1` 10 | - Auto Run With Private Proxy - `Choose 2` 11 | - Auto Run Without Proxy - `Choose 3` 12 | - Auto Rotate Invalid Proxies - `y` or `n` 13 | - Auto Claim Daily Check-In 14 | - Multi Account 15 | 16 | ## Requiremnets 17 | 18 | - Make sure you have Python3.9 or higher installed and pip. 19 | 20 | ## Instalation 21 | 22 | 1. **Clone The Repositories:** 23 | ```bash 24 | git clone https://github.com/vonssy/Assisterr-BOT.git 25 | ``` 26 | ```bash 27 | cd Assisterr-BOT 28 | ``` 29 | 30 | 2. **Install Requirements:** 31 | ```bash 32 | pip install -r requirements.txt #or pip3 install -r requirements.txt 33 | ``` 34 | 35 | ## Configuration 36 | 37 | - **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: 38 | 39 | ```bash 40 | your_solana_private_key_1 (base58) 41 | your_solana_private_key_2 (base58) 42 | ``` 43 | 44 | - **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: 45 | ```bash 46 | ip:port # Default Protcol HTTP. 47 | protocol://ip:port 48 | protocol://user:pass@ip:port 49 | ``` 50 | 51 | ## Run 52 | 53 | ```bash 54 | python bot.py #or python3 bot.py 55 | ``` 56 | 57 | ## Buy Me a Coffee 58 | 59 | - **EVM:** 0xe3c9ef9a39e9eb0582e5b147026cae524338521a 60 | - **TON:** UQBEFv58DC4FUrGqinBB5PAQS7TzXSm5c1Fn6nkiet8kmehB 61 | - **SOL:** E1xkaJYmAFEj28NPHKhjbf7GcvfdjKdvXju8d8AeSunf 62 | - **SUI:** 0xa03726ecbbe00b31df6a61d7a59d02a7eedc39fe269532ceab97852a04cf3347 63 | 64 | Thank you for visiting this repository, don't forget to contribute in the form of follows and stars. 65 | 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. 66 | 67 | **vonssy** -------------------------------------------------------------------------------- /bot.py: -------------------------------------------------------------------------------- 1 | from aiohttp import ( 2 | ClientResponseError, 3 | ClientSession, 4 | ClientTimeout, 5 | BasicAuth 6 | ) 7 | from aiohttp_socks import ProxyConnector 8 | from fake_useragent import FakeUserAgent 9 | from base58 import b58decode, b58encode 10 | from nacl.signing import SigningKey 11 | from datetime import datetime, timezone 12 | from colorama import * 13 | import asyncio, json, re, os, pytz 14 | 15 | wib = pytz.timezone('Asia/Jakarta') 16 | 17 | class Assisterr: 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://build.assisterr.ai", 23 | "Referer": "https://build.assisterr.ai/", 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.assisterr.ai/incentive" 30 | self.proxies = [] 31 | self.proxy_index = 0 32 | self.account_proxies = {} 33 | self.message_nonce = {} 34 | self.access_tokens = {} 35 | 36 | def clear_terminal(self): 37 | os.system('cls' if os.name == 'nt' else 'clear') 38 | 39 | def log(self, message): 40 | print( 41 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 42 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}{message}", 43 | flush=True 44 | ) 45 | 46 | def welcome(self): 47 | print( 48 | f""" 49 | {Fore.GREEN + Style.BRIGHT}Assisterr {Fore.BLUE + Style.BRIGHT}Auto BOT 50 | """ 51 | f""" 52 | {Fore.GREEN + Style.BRIGHT}Rey? {Fore.YELLOW + Style.BRIGHT} 53 | """ 54 | ) 55 | 56 | def format_seconds(self, seconds): 57 | hours, remainder = divmod(seconds, 3600) 58 | minutes, seconds = divmod(remainder, 60) 59 | return f"{int(hours):02}:{int(minutes):02}:{int(seconds):02}" 60 | 61 | async def load_proxies(self, use_proxy_choice: int): 62 | filename = "proxy.txt" 63 | try: 64 | if use_proxy_choice == 1: 65 | async with ClientSession(timeout=ClientTimeout(total=30)) as session: 66 | async with session.get("https://raw.githubusercontent.com/monosans/proxy-list/refs/heads/main/proxies/http.txt") as response: 67 | response.raise_for_status() 68 | content = await response.text() 69 | with open(filename, 'w') as f: 70 | f.write(content) 71 | self.proxies = [line.strip() for line in content.splitlines() if line.strip()] 72 | else: 73 | if not os.path.exists(filename): 74 | self.log(f"{Fore.RED + Style.BRIGHT}File {filename} Not Found.{Style.RESET_ALL}") 75 | return 76 | with open(filename, 'r') as f: 77 | self.proxies = [line.strip() for line in f.read().splitlines() if line.strip()] 78 | 79 | if not self.proxies: 80 | self.log(f"{Fore.RED + Style.BRIGHT}No Proxies Found.{Style.RESET_ALL}") 81 | return 82 | 83 | self.log( 84 | f"{Fore.GREEN + Style.BRIGHT}Proxies Total : {Style.RESET_ALL}" 85 | f"{Fore.WHITE + Style.BRIGHT}{len(self.proxies)}{Style.RESET_ALL}" 86 | ) 87 | 88 | except Exception as e: 89 | self.log(f"{Fore.RED + Style.BRIGHT}Failed To Load Proxies: {e}{Style.RESET_ALL}") 90 | self.proxies = [] 91 | 92 | def check_proxy_schemes(self, proxies): 93 | schemes = ["http://", "https://", "socks4://", "socks5://"] 94 | if any(proxies.startswith(scheme) for scheme in schemes): 95 | return proxies 96 | return f"http://{proxies}" 97 | 98 | def get_next_proxy_for_account(self, account): 99 | if account not in self.account_proxies: 100 | if not self.proxies: 101 | return None 102 | proxy = self.check_proxy_schemes(self.proxies[self.proxy_index]) 103 | self.account_proxies[account] = proxy 104 | self.proxy_index = (self.proxy_index + 1) % len(self.proxies) 105 | return self.account_proxies[account] 106 | 107 | def rotate_proxy_for_account(self, account): 108 | if not self.proxies: 109 | return None 110 | proxy = self.check_proxy_schemes(self.proxies[self.proxy_index]) 111 | self.account_proxies[account] = proxy 112 | self.proxy_index = (self.proxy_index + 1) % len(self.proxies) 113 | return proxy 114 | 115 | def build_proxy_config(self, proxy=None): 116 | if not proxy: 117 | return None, None, None 118 | 119 | if proxy.startswith("socks"): 120 | connector = ProxyConnector.from_url(proxy) 121 | return connector, None, None 122 | 123 | elif proxy.startswith("http"): 124 | match = re.match(r"http://(.*?):(.*?)@(.*)", proxy) 125 | if match: 126 | username, password, host_port = match.groups() 127 | clean_url = f"http://{host_port}" 128 | auth = BasicAuth(username, password) 129 | return None, clean_url, auth 130 | else: 131 | return None, proxy, None 132 | 133 | raise Exception("Unsupported Proxy Type.") 134 | 135 | def generate_address(self, account: str): 136 | try: 137 | decode_account = b58decode(account) 138 | signing_key = SigningKey(decode_account[:32]) 139 | verify_key = signing_key.verify_key 140 | address = b58encode(verify_key.encode()).decode() 141 | 142 | return address 143 | except Exception as e: 144 | return None 145 | 146 | def generate_payload(self, account: str, address: str): 147 | try: 148 | decode_account = b58decode(account) 149 | signing_key = SigningKey(decode_account[:32]) 150 | message = self.message_nonce[address] 151 | encode_message = message.encode('utf-8') 152 | signature = signing_key.sign(encode_message) 153 | signature_base58 = b58encode(signature.signature).decode() 154 | 155 | payload = { 156 | "message": message, 157 | "signature": signature_base58, 158 | "key": address 159 | } 160 | 161 | return payload 162 | except Exception as e: 163 | raise Exception(f"Generate Req Payload Failed: {str(e)}") 164 | 165 | def mask_account(self, account): 166 | try: 167 | mask_account = account[:6] + '*' * 6 + account[-6:] 168 | return mask_account 169 | except Exception as e: 170 | return None 171 | 172 | def print_question(self): 173 | while True: 174 | try: 175 | print(f"{Fore.WHITE + Style.BRIGHT}1. Run With Proxyscrape Free Proxy{Style.RESET_ALL}") 176 | print(f"{Fore.WHITE + Style.BRIGHT}2. Run With Private Proxy{Style.RESET_ALL}") 177 | print(f"{Fore.WHITE + Style.BRIGHT}3. Run Without Proxy{Style.RESET_ALL}") 178 | choose = int(input(f"{Fore.BLUE + Style.BRIGHT}Choose [1/2/3] -> {Style.RESET_ALL}").strip()) 179 | 180 | if choose in [1, 2, 3]: 181 | proxy_type = ( 182 | "With Proxyscrape Free" if choose == 1 else 183 | "With Private" if choose == 2 else 184 | "Without" 185 | ) 186 | print(f"{Fore.GREEN + Style.BRIGHT}Run {proxy_type} Proxy Selected.{Style.RESET_ALL}") 187 | break 188 | else: 189 | print(f"{Fore.RED + Style.BRIGHT}Please enter either 1, 2 or 3.{Style.RESET_ALL}") 190 | except ValueError: 191 | print(f"{Fore.RED + Style.BRIGHT}Invalid input. Enter a number (1, 2 or 3).{Style.RESET_ALL}") 192 | 193 | rotate = False 194 | if choose in [1, 2]: 195 | while True: 196 | rotate = input(f"{Fore.BLUE + Style.BRIGHT}Rotate Invalid Proxy? [y/n] -> {Style.RESET_ALL}").strip() 197 | 198 | if rotate in ["y", "n"]: 199 | rotate = rotate == "y" 200 | break 201 | else: 202 | print(f"{Fore.RED + Style.BRIGHT}Invalid input. Enter 'y' or 'n'.{Style.RESET_ALL}") 203 | 204 | return choose, rotate 205 | 206 | async def check_connection(self, proxy_url=None): 207 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 208 | try: 209 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=30)) as session: 210 | async with session.get(url="https://api.ipify.org?format=json", proxy=proxy, proxy_auth=proxy_auth) as response: 211 | response.raise_for_status() 212 | return True 213 | except (Exception, ClientResponseError) as e: 214 | self.log( 215 | f"{Fore.CYAN+Style.BRIGHT}Status :{Style.RESET_ALL}" 216 | f"{Fore.RED+Style.BRIGHT} Connection Not 200 OK {Style.RESET_ALL}" 217 | f"{Fore.MAGENTA+Style.BRIGHT}-{Style.RESET_ALL}" 218 | f"{Fore.YELLOW+Style.BRIGHT} {str(e)} {Style.RESET_ALL}" 219 | ) 220 | 221 | return None 222 | 223 | async def get_message(self, proxy_url=None, retries=5): 224 | url = f"{self.BASE_API}/auth/login/get_message/" 225 | await asyncio.sleep(3) 226 | for attempt in range(retries): 227 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 228 | try: 229 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 230 | async with session.get(url=url, headers=self.headers, proxy=proxy, proxy_auth=proxy_auth) as response: 231 | response.raise_for_status() 232 | return await response.json() 233 | except (Exception, ClientResponseError) as e: 234 | if attempt < retries - 1: 235 | await asyncio.sleep(5) 236 | continue 237 | self.log( 238 | f"{Fore.CYAN+Style.BRIGHT}Status :{Style.RESET_ALL}" 239 | f"{Fore.RED+Style.BRIGHT} GET Nonce Msg Failed {Style.RESET_ALL}" 240 | f"{Fore.MAGENTA+Style.BRIGHT}-{Style.RESET_ALL}" 241 | f"{Fore.YELLOW+Style.BRIGHT} {str(e)} {Style.RESET_ALL}" 242 | ) 243 | 244 | return None 245 | 246 | async def user_login(self, account: str, address: str, proxy_url=None, retries=5): 247 | url = f"{self.BASE_API}/auth/login/" 248 | data = json.dumps(self.generate_payload(account, address)) 249 | headers = { 250 | **self.headers, 251 | "Content-Length": str(len(data)), 252 | "Content-Type": "application/json" 253 | } 254 | await asyncio.sleep(3) 255 | for attempt in range(retries): 256 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 257 | try: 258 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 259 | async with session.post(url=url, headers=headers, data=data, proxy=proxy, proxy_auth=proxy_auth) as response: 260 | response.raise_for_status() 261 | return await response.json() 262 | except (Exception, ClientResponseError) as e: 263 | if attempt < retries - 1: 264 | await asyncio.sleep(5) 265 | continue 266 | self.log( 267 | f"{Fore.CYAN+Style.BRIGHT}Status :{Style.RESET_ALL}" 268 | f"{Fore.RED+Style.BRIGHT} Login Failed {Style.RESET_ALL}" 269 | f"{Fore.MAGENTA+Style.BRIGHT}-{Style.RESET_ALL}" 270 | f"{Fore.YELLOW+Style.BRIGHT} {str(e)} {Style.RESET_ALL}" 271 | ) 272 | 273 | return None 274 | 275 | async def user_data(self, address: str, proxy_url=None, retries=5): 276 | url = f"{self.BASE_API}/users/me/" 277 | headers = { 278 | **self.headers, 279 | "Authorization": f"Bearer {self.access_tokens[address]}" 280 | } 281 | await asyncio.sleep(3) 282 | for attempt in range(retries): 283 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 284 | try: 285 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 286 | async with session.get(url=url, headers=headers, proxy=proxy, proxy_auth=proxy_auth) as response: 287 | response.raise_for_status() 288 | return await response.json() 289 | except (Exception, ClientResponseError) as e: 290 | if attempt < retries - 1: 291 | await asyncio.sleep(5) 292 | continue 293 | self.log( 294 | f"{Fore.CYAN+Style.BRIGHT}Balance :{Style.RESET_ALL}" 295 | f"{Fore.RED+Style.BRIGHT} GET $ASSR Failed {Style.RESET_ALL}" 296 | f"{Fore.MAGENTA+Style.BRIGHT}-{Style.RESET_ALL}" 297 | f"{Fore.YELLOW+Style.BRIGHT} {str(e)} {Style.RESET_ALL}" 298 | ) 299 | 300 | return None 301 | 302 | async def user_meta(self, address: str, proxy_url=None, retries=5): 303 | url = f"{self.BASE_API}/users/me/meta/" 304 | headers = { 305 | **self.headers, 306 | "Authorization": f"Bearer {self.access_tokens[address]}" 307 | } 308 | await asyncio.sleep(3) 309 | for attempt in range(retries): 310 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 311 | try: 312 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 313 | async with session.get(url=url, headers=headers, proxy=proxy, proxy_auth=proxy_auth) as response: 314 | response.raise_for_status() 315 | return await response.json() 316 | except (Exception, ClientResponseError) as e: 317 | if attempt < retries - 1: 318 | await asyncio.sleep(5) 319 | continue 320 | self.log( 321 | f"{Fore.CYAN+Style.BRIGHT}Check-In:{Style.RESET_ALL}" 322 | f"{Fore.RED+Style.BRIGHT} GET Status Failed {Style.RESET_ALL}" 323 | f"{Fore.MAGENTA+Style.BRIGHT}-{Style.RESET_ALL}" 324 | f"{Fore.YELLOW+Style.BRIGHT} {str(e)} {Style.RESET_ALL}" 325 | ) 326 | 327 | return None 328 | 329 | async def claim_daily(self, address: str, proxy_url=None, retries=5): 330 | url = f"{self.BASE_API}/users/me/daily_points/" 331 | headers = { 332 | **self.headers, 333 | "Connection": "keep-alive", 334 | "Authorization": f"Bearer {self.access_tokens[address]}", 335 | "Content-Length": "0", 336 | "Content-Type": "application/json" 337 | } 338 | await asyncio.sleep(3) 339 | for attempt in range(retries): 340 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 341 | try: 342 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 343 | async with session.post(url=url, headers=headers, proxy=proxy, proxy_auth=proxy_auth) as response: 344 | response.raise_for_status() 345 | return await response.json() 346 | except (Exception, ClientResponseError) as e: 347 | if attempt < retries - 1: 348 | await asyncio.sleep(5) 349 | continue 350 | self.log( 351 | f"{Fore.CYAN+Style.BRIGHT}Check-In:{Style.RESET_ALL}" 352 | f"{Fore.RED+Style.BRIGHT} Not Claimed {Style.RESET_ALL}" 353 | f"{Fore.MAGENTA+Style.BRIGHT}-{Style.RESET_ALL}" 354 | f"{Fore.YELLOW+Style.BRIGHT} {str(e)} {Style.RESET_ALL}" 355 | ) 356 | 357 | return None 358 | 359 | async def process_check_connection(self, address: str, use_proxy: bool, rotate_proxy: bool): 360 | while True: 361 | proxy = self.get_next_proxy_for_account(address) if use_proxy else None 362 | self.log( 363 | f"{Fore.CYAN+Style.BRIGHT}Proxy :{Style.RESET_ALL}" 364 | f"{Fore.WHITE+Style.BRIGHT} {proxy} {Style.RESET_ALL}" 365 | ) 366 | 367 | is_valid = await self.check_connection(proxy) 368 | if not is_valid: 369 | if rotate_proxy: 370 | proxy = self.rotate_proxy_for_account(address) 371 | 372 | continue 373 | 374 | return True 375 | 376 | async def process_get_message(self, address: str, use_proxy: bool, rotate_proxy: bool): 377 | is_valid = await self.process_check_connection(address, use_proxy, rotate_proxy) 378 | if is_valid: 379 | proxy = self.get_next_proxy_for_account(address) if use_proxy else None 380 | 381 | message = await self.get_message(proxy) 382 | if message: 383 | self.message_nonce[address] = message 384 | return True 385 | 386 | return False 387 | 388 | async def process_user_login(self, account: str, address: str, use_proxy: bool, rotate_proxy: bool): 389 | nonce = await self.process_get_message(address, use_proxy, rotate_proxy) 390 | if nonce: 391 | proxy = self.get_next_proxy_for_account(address) if use_proxy else None 392 | 393 | login = await self.user_login(account, address, proxy) 394 | if login: 395 | self.access_tokens[address] = login["access_token"] 396 | 397 | self.log( 398 | f"{Fore.CYAN+Style.BRIGHT}Status :{Style.RESET_ALL}" 399 | f"{Fore.GREEN+Style.BRIGHT} Login Success {Style.RESET_ALL}" 400 | ) 401 | return True 402 | 403 | return False 404 | 405 | async def process_accounts(self, account: str, address: str, use_proxy: bool, rotate_proxy: bool): 406 | logined = await self.process_user_login(account, address, use_proxy, rotate_proxy) 407 | if logined: 408 | proxy = self.get_next_proxy_for_account(address) if use_proxy else None 409 | 410 | user = await self.user_data(address, proxy) 411 | if user: 412 | balance = user.get("points", 0) / 100 413 | 414 | self.log( 415 | f"{Fore.CYAN+Style.BRIGHT}Balance :{Style.RESET_ALL}" 416 | f"{Fore.WHITE+Style.BRIGHT} {balance} $ASRR {Style.RESET_ALL}" 417 | ) 418 | 419 | metadata = await self.user_meta(address, proxy) 420 | if not metadata: 421 | return 422 | 423 | claim_time = metadata.get("daily_points_start_at", None) 424 | 425 | if claim_time is None: 426 | claim = await self.claim_daily(address, proxy) 427 | if not claim: 428 | return 429 | 430 | balance = claim.get("points", 0) / 100 431 | self.log( 432 | f"{Fore.CYAN+Style.BRIGHT}Check-In:{Style.RESET_ALL}" 433 | f"{Fore.GREEN+Style.BRIGHT} Claimed Successfully {Style.RESET_ALL}" 434 | f"{Fore.MAGENTA+Style.BRIGHT}-{Style.RESET_ALL}" 435 | f"{Fore.CYAN+Style.BRIGHT} Current Balance: {Style.RESET_ALL}" 436 | f"{Fore.WHITE+Style.BRIGHT}{balance} $ASRR{Style.RESET_ALL}" 437 | ) 438 | 439 | else: 440 | claim_utc = datetime.fromisoformat(claim_time).replace(tzinfo=timezone.utc) 441 | claim_wib = claim_utc.astimezone(wib).strftime('%x %X %Z') 442 | self.log( 443 | f"{Fore.CYAN+Style.BRIGHT}Check-In:{Style.RESET_ALL}" 444 | f"{Fore.YELLOW+Style.BRIGHT} Already Claimed {Style.RESET_ALL}" 445 | f"{Fore.MAGENTA+Style.BRIGHT}-{Style.RESET_ALL}" 446 | f"{Fore.CYAN+Style.BRIGHT} Next Claim at: {Style.RESET_ALL}" 447 | f"{Fore.WHITE+Style.BRIGHT}{claim_wib}{Style.RESET_ALL}" 448 | ) 449 | 450 | async def main(self): 451 | try: 452 | with open('accounts.txt', 'r') as file: 453 | accounts = [line.strip() for line in file if line.strip()] 454 | 455 | use_proxy_choice, rotate_proxy = self.print_question() 456 | 457 | while True: 458 | use_proxy = False 459 | if use_proxy_choice in [1, 2]: 460 | use_proxy = True 461 | 462 | self.clear_terminal() 463 | self.welcome() 464 | self.log( 465 | f"{Fore.GREEN + Style.BRIGHT}Account's Total: {Style.RESET_ALL}" 466 | f"{Fore.WHITE + Style.BRIGHT}{len(accounts)}{Style.RESET_ALL}" 467 | ) 468 | 469 | if use_proxy: 470 | await self.load_proxies(use_proxy_choice) 471 | 472 | separator = "=" * 23 473 | for account in accounts: 474 | if account: 475 | address = self.generate_address(account) 476 | self.log( 477 | f"{Fore.CYAN + Style.BRIGHT}{separator}[{Style.RESET_ALL}" 478 | f"{Fore.WHITE + Style.BRIGHT} {self.mask_account(address)} {Style.RESET_ALL}" 479 | f"{Fore.CYAN + Style.BRIGHT}]{separator}{Style.RESET_ALL}" 480 | ) 481 | 482 | if not address: 483 | self.log( 484 | f"{Fore.CYAN + Style.BRIGHT}Status :{Style.RESET_ALL}" 485 | f"{Fore.RED + Style.BRIGHT} Invalid Private Key or Library Version Not Supported {Style.RESET_ALL}" 486 | ) 487 | continue 488 | 489 | await self.process_accounts(account, address, use_proxy, rotate_proxy) 490 | await asyncio.sleep(3) 491 | 492 | self.log(f"{Fore.CYAN + Style.BRIGHT}={Style.RESET_ALL}"*68) 493 | seconds = 6 * 60 * 60 494 | while seconds > 0: 495 | formatted_time = self.format_seconds(seconds) 496 | print( 497 | f"{Fore.CYAN+Style.BRIGHT}[ Wait for{Style.RESET_ALL}" 498 | f"{Fore.WHITE+Style.BRIGHT} {formatted_time} {Style.RESET_ALL}" 499 | f"{Fore.CYAN+Style.BRIGHT}... ]{Style.RESET_ALL}" 500 | f"{Fore.WHITE+Style.BRIGHT} | {Style.RESET_ALL}" 501 | f"{Fore.BLUE+Style.BRIGHT}All Accounts Have Been Processed.{Style.RESET_ALL}", 502 | end="\r" 503 | ) 504 | await asyncio.sleep(1) 505 | seconds -= 1 506 | 507 | except FileNotFoundError: 508 | self.log(f"{Fore.RED}File 'accounts.txt' Not Found.{Style.RESET_ALL}") 509 | return 510 | except Exception as e: 511 | self.log(f"{Fore.RED+Style.BRIGHT}Error: {e}{Style.RESET_ALL}") 512 | 513 | if __name__ == "__main__": 514 | try: 515 | bot = Assisterr() 516 | asyncio.run(bot.main()) 517 | except KeyboardInterrupt: 518 | print( 519 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 520 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 521 | f"{Fore.RED + Style.BRIGHT}[ EXIT ] Assisterr - BOT{Style.RESET_ALL} " 522 | ) --------------------------------------------------------------------------------