├── cookies.txt ├── image.png ├── proxy.txt ├── requirements.txt ├── README.md └── bot.py /cookies.txt: -------------------------------------------------------------------------------- 1 | your_cookie_1 2 | your_cookie_2 -------------------------------------------------------------------------------- /image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vonssy/GoblinMeme-BOT/HEAD/image.png -------------------------------------------------------------------------------- /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 | pytz==2024.1 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Goblin Meme BOT 2 | Goblin Meme BOT 3 | 4 | - Register Here : [Goblin Meme](https://goblin.meme?referral_code=1SOLX6) 5 | - Sign Up With X 6 | 7 | ## Features 8 | 9 | - Auto Get Account Information 10 | - Auto Run With [Proxyscrape Free Proxy](https://proxyscrape.com/free-proxy-list) - `Choose 1` 11 | - Auto Run With Private Proxy - `Choose 2` 12 | - Auto Run Without Proxy - `Choose 3` 13 | - Auto Rotate Invalid Proxies - `y` or `n` 14 | - Auto Mining n Open Box 15 | - Multi Accounts 16 | 17 | ## Requiremnets 18 | 19 | - Make sure you have Python3.9 or higher installed and pip. 20 | 21 | ## Instalation 22 | 23 | 1. **Clone The Repositories:** 24 | ```bash 25 | git clone https://github.com/vonssy/GoblinMeme-BOT.git 26 | ``` 27 | ```bash 28 | cd GoblinMeme-BOT 29 | ``` 30 | 31 | 2. **Install Requirements:** 32 | ```bash 33 | pip install -r requirements.txt #or pip3 install -r requirements.txt 34 | ``` 35 | 36 | ## Configuration 37 | 38 | ### Screenshots 39 | 40 |
41 | Image 42 |
43 | 44 | - **cookies.txt:** You will find the file `cookies.txt` inside the project directory. Make sure `cookies.txt` contains data that matches the format expected by the script. Here are examples of file formats: 45 | 46 | ```bash 47 | your_cookie_1 48 | your_cookie_2 49 | ``` 50 | - **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: 51 | ```bash 52 | ip:port # Default Protcol HTTP. 53 | protocol://ip:port 54 | protocol://user:pass@ip:port 55 | ``` 56 | 57 | ## Run 58 | 59 | ```bash 60 | python bot.py #or python3 bot.py 61 | ``` 62 | 63 | ## Buy Me a Coffee 64 | 65 | - **EVM:** 0xe3c9ef9a39e9eb0582e5b147026cae524338521a 66 | - **TON:** UQBEFv58DC4FUrGqinBB5PAQS7TzXSm5c1Fn6nkiet8kmehB 67 | - **SOL:** E1xkaJYmAFEj28NPHKhjbf7GcvfdjKdvXju8d8AeSunf 68 | - **SUI:** 0xa03726ecbbe00b31df6a61d7a59d02a7eedc39fe269532ceab97852a04cf3347 69 | 70 | Thank you for visiting this repository, don't forget to contribute in the form of follows and stars. 71 | 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. 72 | 73 | **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 datetime import datetime 10 | from colorama import * 11 | import asyncio, json, re, os, pytz 12 | 13 | wib = pytz.timezone('Asia/Jakarta') 14 | 15 | class Goblin: 16 | def __init__(self) -> None: 17 | self.headers = { 18 | "Accept": "application/json, text/plain, */*", 19 | "Accept-Language": "id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7", 20 | "Origin": "https://www.goblin.meme", 21 | "Referer": "https://www.goblin.meme/", 22 | "Sec-Fetch-Dest": "empty", 23 | "Sec-Fetch-Mode": "cors", 24 | "Sec-Fetch-Site": "same-origin", 25 | "User-Agent": FakeUserAgent().random 26 | } 27 | self.BASE_API = "https://www.goblin.meme/api" 28 | self.proxies = [] 29 | self.proxy_index = 0 30 | self.account_proxies = {} 31 | 32 | def clear_terminal(self): 33 | os.system('cls' if os.name == 'nt' else 'clear') 34 | 35 | def log(self, message): 36 | print( 37 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 38 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}{message}", 39 | flush=True 40 | ) 41 | 42 | def welcome(self): 43 | print( 44 | f""" 45 | {Fore.GREEN + Style.BRIGHT}Goblin Meme {Fore.BLUE + Style.BRIGHT}Auto BOT 46 | """ 47 | f""" 48 | {Fore.GREEN + Style.BRIGHT}Rey? {Fore.YELLOW + Style.BRIGHT} 49 | """ 50 | ) 51 | 52 | def format_seconds(self, seconds): 53 | hours, remainder = divmod(seconds, 3600) 54 | minutes, seconds = divmod(remainder, 60) 55 | return f"{int(hours):02}:{int(minutes):02}:{int(seconds):02}" 56 | 57 | async def load_proxies(self, use_proxy_choice: int): 58 | filename = "proxy.txt" 59 | try: 60 | if use_proxy_choice == 1: 61 | async with ClientSession(timeout=ClientTimeout(total=30)) as session: 62 | async with session.get("https://raw.githubusercontent.com/monosans/proxy-list/refs/heads/main/proxies/all.txt") as response: 63 | response.raise_for_status() 64 | content = await response.text() 65 | with open(filename, 'w') as f: 66 | f.write(content) 67 | self.proxies = [line.strip() for line in content.splitlines() if line.strip()] 68 | else: 69 | if not os.path.exists(filename): 70 | self.log(f"{Fore.RED + Style.BRIGHT}File {filename} Not Found.{Style.RESET_ALL}") 71 | return 72 | with open(filename, 'r') as f: 73 | self.proxies = [line.strip() for line in f.read().splitlines() if line.strip()] 74 | 75 | if not self.proxies: 76 | self.log(f"{Fore.RED + Style.BRIGHT}No Proxies Found.{Style.RESET_ALL}") 77 | return 78 | 79 | self.log( 80 | f"{Fore.GREEN + Style.BRIGHT}Proxies Total : {Style.RESET_ALL}" 81 | f"{Fore.WHITE + Style.BRIGHT}{len(self.proxies)}{Style.RESET_ALL}" 82 | ) 83 | 84 | except Exception as e: 85 | self.log(f"{Fore.RED + Style.BRIGHT}Failed To Load Proxies: {e}{Style.RESET_ALL}") 86 | self.proxies = [] 87 | 88 | def check_proxy_schemes(self, proxies): 89 | schemes = ["http://", "https://", "socks4://", "socks5://"] 90 | if any(proxies.startswith(scheme) for scheme in schemes): 91 | return proxies 92 | return f"http://{proxies}" 93 | 94 | def get_next_proxy_for_account(self, account): 95 | if account not in self.account_proxies: 96 | if not self.proxies: 97 | return None 98 | proxy = self.check_proxy_schemes(self.proxies[self.proxy_index]) 99 | self.account_proxies[account] = proxy 100 | self.proxy_index = (self.proxy_index + 1) % len(self.proxies) 101 | return self.account_proxies[account] 102 | 103 | def rotate_proxy_for_account(self, account): 104 | if not self.proxies: 105 | return None 106 | proxy = self.check_proxy_schemes(self.proxies[self.proxy_index]) 107 | self.account_proxies[account] = proxy 108 | self.proxy_index = (self.proxy_index + 1) % len(self.proxies) 109 | return proxy 110 | 111 | def build_proxy_config(self, proxy=None): 112 | if not proxy: 113 | return None, None, None 114 | 115 | if proxy.startswith("socks"): 116 | connector = ProxyConnector.from_url(proxy) 117 | return connector, None, None 118 | 119 | elif proxy.startswith("http"): 120 | match = re.match(r"http://(.*?):(.*?)@(.*)", proxy) 121 | if match: 122 | username, password, host_port = match.groups() 123 | clean_url = f"http://{host_port}" 124 | auth = BasicAuth(username, password) 125 | return None, clean_url, auth 126 | else: 127 | return None, proxy, None 128 | 129 | raise Exception("Unsupported Proxy Type.") 130 | 131 | def print_question(self): 132 | while True: 133 | try: 134 | print(f"{Fore.WHITE + Style.BRIGHT}1. Run With Free Proxyscrape Proxy{Style.RESET_ALL}") 135 | print(f"{Fore.WHITE + Style.BRIGHT}2. Run With Private Proxy{Style.RESET_ALL}") 136 | print(f"{Fore.WHITE + Style.BRIGHT}3. Run Without Proxy{Style.RESET_ALL}") 137 | choose = int(input(f"{Fore.BLUE + Style.BRIGHT}Choose [1/2/3] -> {Style.RESET_ALL}").strip()) 138 | 139 | if choose in [1, 2, 3]: 140 | proxy_type = ( 141 | "With Free Proxyscrape" if choose == 1 else 142 | "With Private" if choose == 2 else 143 | "Without" 144 | ) 145 | print(f"{Fore.GREEN + Style.BRIGHT}Run {proxy_type} Proxy Selected.{Style.RESET_ALL}") 146 | break 147 | else: 148 | print(f"{Fore.RED + Style.BRIGHT}Please enter either 1, 2 or 3.{Style.RESET_ALL}") 149 | except ValueError: 150 | print(f"{Fore.RED + Style.BRIGHT}Invalid input. Enter a number (1, 2 or 3).{Style.RESET_ALL}") 151 | 152 | rotate = False 153 | if choose in [1, 2]: 154 | while True: 155 | rotate = input(f"{Fore.BLUE + Style.BRIGHT}Rotate Invalid Proxy? [y/n] -> {Style.RESET_ALL}").strip() 156 | 157 | if rotate in ["y", "n"]: 158 | rotate = rotate == "y" 159 | break 160 | else: 161 | print(f"{Fore.RED + Style.BRIGHT}Invalid input. Enter 'y' or 'n'.{Style.RESET_ALL}") 162 | 163 | return choose, rotate 164 | 165 | async def check_connection(self, proxy_url=None): 166 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 167 | try: 168 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=30)) as session: 169 | async with session.get(url="https://api.ipify.org?format=json", proxy=proxy, proxy_auth=proxy_auth) as response: 170 | response.raise_for_status() 171 | return True 172 | except (Exception, ClientResponseError) as e: 173 | self.log( 174 | f"{Fore.CYAN+Style.BRIGHT}Status :{Style.RESET_ALL}" 175 | f"{Fore.RED+Style.BRIGHT} Connection Not 200 OK {Style.RESET_ALL}" 176 | f"{Fore.MAGENTA+Style.BRIGHT}-{Style.RESET_ALL}" 177 | f"{Fore.YELLOW+Style.BRIGHT} {str(e)} {Style.RESET_ALL}" 178 | ) 179 | 180 | return None 181 | 182 | async def auth_session(self, cookie: str, proxy_url=None, retries=5): 183 | url = f"{self.BASE_API}/auth/session" 184 | headers = { 185 | **self.headers, 186 | "Cookie": cookie 187 | } 188 | await asyncio.sleep(3) 189 | for attempt in range(retries): 190 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 191 | try: 192 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 193 | async with session.get(url=url, headers=headers, proxy=proxy, proxy_auth=proxy_auth) as response: 194 | response.raise_for_status() 195 | return await response.json() 196 | except (Exception, ClientResponseError) as e: 197 | if attempt < retries - 1: 198 | await asyncio.sleep(5) 199 | continue 200 | return None 201 | 202 | async def box_lists(self, cookie: str, proxy_url=None, retries=5): 203 | url = f"{self.BASE_API}/box" 204 | headers = { 205 | **self.headers, 206 | "Cookie": cookie 207 | } 208 | await asyncio.sleep(3) 209 | for attempt in range(retries): 210 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 211 | try: 212 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 213 | async with session.get(url=url, headers=headers, proxy=proxy, proxy_auth=proxy_auth) as response: 214 | response.raise_for_status() 215 | return await response.json() 216 | except (Exception, ClientResponseError) as e: 217 | if attempt < retries - 1: 218 | await asyncio.sleep(5) 219 | continue 220 | return None 221 | 222 | async def box_data(self, cookie: str, box_id: str, proxy_url=None, retries=5): 223 | url = f"{self.BASE_API}/box/{box_id}" 224 | headers = { 225 | **self.headers, 226 | "Cookie": cookie 227 | } 228 | await asyncio.sleep(3) 229 | for attempt in range(retries): 230 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 231 | try: 232 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 233 | async with session.get(url=url, headers=headers, proxy=proxy, proxy_auth=proxy_auth) as response: 234 | response.raise_for_status() 235 | return await response.json() 236 | except (Exception, ClientResponseError) as e: 237 | if attempt < retries - 1: 238 | await asyncio.sleep(5) 239 | continue 240 | return None 241 | 242 | async def start_mining(self, cookie: str, box_id: str, proxy_url=None, retries=5): 243 | url = f"{self.BASE_API}/box/{box_id}/start" 244 | headers = { 245 | **self.headers, 246 | "Content-Length": "2", 247 | "Content-Type": "application/json", 248 | "Cookie": cookie 249 | } 250 | await asyncio.sleep(3) 251 | for attempt in range(retries): 252 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 253 | try: 254 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 255 | async with session.post(url=url, headers=headers, json={}, proxy=proxy, proxy_auth=proxy_auth) as response: 256 | if response.status == 400: 257 | return None 258 | response.raise_for_status() 259 | return await response.json() 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 open_box(self, cookie: str, box_id: str, proxy_url=None, retries=5): 267 | url = f"{self.BASE_API}/box/{box_id}/claim" 268 | headers = { 269 | **self.headers, 270 | "Content-Length": "2", 271 | "Content-Type": "application/json", 272 | "Cookie": cookie 273 | } 274 | await asyncio.sleep(3) 275 | for attempt in range(retries): 276 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 277 | try: 278 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 279 | async with session.post(url=url, headers=headers, json={}, proxy=proxy, proxy_auth=proxy_auth) as response: 280 | response.raise_for_status() 281 | return await response.json() 282 | except (Exception, ClientResponseError) as e: 283 | if attempt < retries - 1: 284 | await asyncio.sleep(5) 285 | continue 286 | return None 287 | 288 | async def complete_mission(self, cookie: str, box_id: str, mission_url: str, proxy_url=None, retries=5): 289 | url = f"{self.BASE_API}/box/{box_id}/mission" 290 | data = json.dumps({"url":mission_url}) 291 | headers = { 292 | **self.headers, 293 | "Content-Length": str(len(data)), 294 | "Content-Type": "application/json", 295 | "Cookie": cookie 296 | } 297 | await asyncio.sleep(3) 298 | for attempt in range(retries): 299 | connector, proxy, proxy_auth = self.build_proxy_config(proxy_url) 300 | try: 301 | async with ClientSession(connector=connector, timeout=ClientTimeout(total=60)) as session: 302 | async with session.post(url=url, headers=headers, data=data, proxy=proxy, proxy_auth=proxy_auth) as response: 303 | response.raise_for_status() 304 | return await response.json() 305 | except (Exception, ClientResponseError) as e: 306 | if attempt < retries - 1: 307 | await asyncio.sleep(5) 308 | continue 309 | return None 310 | 311 | async def process_check_connection(self, cookie: str, use_proxy: bool, rotate_proxy: bool): 312 | while True: 313 | proxy = self.get_next_proxy_for_account(cookie) if use_proxy else None 314 | self.log( 315 | f"{Fore.CYAN + Style.BRIGHT}Proxy :{Style.RESET_ALL}" 316 | f"{Fore.WHITE + Style.BRIGHT} {proxy} {Style.RESET_ALL}" 317 | ) 318 | 319 | is_valid = await self.check_connection(proxy) 320 | if is_valid: 321 | return True 322 | 323 | if rotate_proxy: 324 | proxy = self.rotate_proxy_for_account(cookie) 325 | continue 326 | 327 | return False 328 | 329 | async def process_accounts(self, cookie: str, use_proxy: bool, rotate_proxy: bool): 330 | is_valid = await self.process_check_connection(cookie, use_proxy, rotate_proxy) 331 | if is_valid: 332 | proxy = self.get_next_proxy_for_account(cookie) if use_proxy else None 333 | 334 | username = "N/A" 335 | balance = "N/A" 336 | 337 | session = await self.auth_session(cookie, proxy) 338 | if session: 339 | username = session.get("user", {}).get("xUsername", "N/A") 340 | balance = session.get("user", {}).get("goblinPoints", 0) 341 | 342 | self.log( 343 | f"{Fore.CYAN + Style.BRIGHT}Handler:{Style.RESET_ALL}" 344 | f"{Fore.WHITE + Style.BRIGHT} {username} {Style.RESET_ALL}" 345 | ) 346 | self.log( 347 | f"{Fore.CYAN + Style.BRIGHT}Balance:{Style.RESET_ALL}" 348 | f"{Fore.WHITE + Style.BRIGHT} {balance} PTS {Style.RESET_ALL}" 349 | ) 350 | 351 | box_lists = await self.box_lists(cookie, proxy) 352 | if not box_lists: 353 | self.log( 354 | f"{Fore.CYAN + Style.BRIGHT}Boxes :{Style.RESET_ALL}" 355 | f"{Fore.RED + Style.BRIGHT} GET Available Box Failed {Style.RESET_ALL}" 356 | ) 357 | return 358 | 359 | boxes = box_lists["boxes"] 360 | 361 | self.log( 362 | f"{Fore.CYAN + Style.BRIGHT}Boxes :{Style.RESET_ALL}" 363 | f"{Fore.GREEN + Style.BRIGHT} Available {Style.RESET_ALL}" 364 | f"{Fore.WHITE + Style.BRIGHT}{len(boxes)}{Style.RESET_ALL}" 365 | ) 366 | 367 | for box in boxes: 368 | if box: 369 | box_id = box["_id"] 370 | box_name = box["name"] 371 | is_active = box["active"] 372 | 373 | if not is_active: 374 | self.log( 375 | f"{Fore.GREEN + Style.BRIGHT} ●{Style.RESET_ALL}" 376 | f"{Fore.BLUE + Style.BRIGHT} {box_name} {Style.RESET_ALL}" 377 | f"{Fore.YELLOW + Style.BRIGHT}Inactive{Style.RESET_ALL}" 378 | ) 379 | continue 380 | 381 | self.log( 382 | f"{Fore.GREEN + Style.BRIGHT} ●{Style.RESET_ALL}" 383 | f"{Fore.BLUE + Style.BRIGHT} {box_name} {Style.RESET_ALL}" 384 | f"{Fore.GREEN + Style.BRIGHT}Active{Style.RESET_ALL}" 385 | ) 386 | 387 | data = await self.box_data(cookie, box_id, proxy) 388 | if not data: 389 | self.log( 390 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 391 | f"{Fore.RED + Style.BRIGHT} GET Status Box Failed {Style.RESET_ALL}" 392 | ) 393 | continue 394 | 395 | mission_url = data["missionUrl"] 396 | mission_desc = data["missionDesc"] 397 | is_completed = data["missionCompleted"] 398 | is_hasbox = data["hasBox"] 399 | is_ready = data["isReady"] 400 | is_opened = data["opened"] 401 | 402 | if not is_hasbox: 403 | self.log( 404 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 405 | f"{Fore.CYAN + Style.BRIGHT} Has Box : {Style.RESET_ALL}" 406 | f"{Fore.RED + Style.BRIGHT}False{Style.RESET_ALL}" 407 | f"{Fore.MAGENTA + Style.BRIGHT} - {Style.RESET_ALL}" 408 | f"{Fore.YELLOW + Style.BRIGHT}Starting Mining...{Style.RESET_ALL}" 409 | ) 410 | 411 | start = await self.start_mining(cookie, box_id, proxy) 412 | if start and start.get("message") == "Box mining started": 413 | self.log( 414 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 415 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 416 | f"{Fore.GREEN + Style.BRIGHT}Success{Style.RESET_ALL}" 417 | ) 418 | else: 419 | self.log( 420 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 421 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 422 | f"{Fore.RED + Style.BRIGHT}Failed or Already Have an Active Box Mining{Style.RESET_ALL}" 423 | ) 424 | continue 425 | 426 | self.log( 427 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 428 | f"{Fore.CYAN + Style.BRIGHT} Has Box : {Style.RESET_ALL}" 429 | f"{Fore.GREEN + Style.BRIGHT}True{Style.RESET_ALL}" 430 | ) 431 | 432 | if not is_ready: 433 | self.log( 434 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 435 | f"{Fore.CYAN + Style.BRIGHT} Is Ready: {Style.RESET_ALL}" 436 | f"{Fore.YELLOW + Style.BRIGHT}Not Yet{Style.RESET_ALL}" 437 | ) 438 | continue 439 | 440 | self.log( 441 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 442 | f"{Fore.CYAN + Style.BRIGHT} Is Ready: {Style.RESET_ALL}" 443 | f"{Fore.GREEN + Style.BRIGHT}True{Style.RESET_ALL}" 444 | ) 445 | 446 | if not is_completed: 447 | self.log( 448 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 449 | f"{Fore.CYAN + Style.BRIGHT} Mission : {Style.RESET_ALL}" 450 | f"{Fore.WHITE + Style.BRIGHT}{mission_desc}{Style.RESET_ALL}" 451 | f"{Fore.RED + Style.BRIGHT} Uncomplete {Style.RESET_ALL}" 452 | f"{Fore.MAGENTA + Style.BRIGHT}-{Style.RESET_ALL}" 453 | f"{Fore.YELLOW + Style.BRIGHT} Completing Mission... {Style.RESET_ALL}" 454 | ) 455 | 456 | complete = await self.complete_mission(cookie, box_id, mission_url, proxy) 457 | if complete: 458 | self.log( 459 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 460 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 461 | f"{Fore.GREEN + Style.BRIGHT}Completed{Style.RESET_ALL}" 462 | ) 463 | 464 | self.log( 465 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 466 | f"{Fore.YELLOW + Style.BRIGHT} Opening Box... {Style.RESET_ALL}" 467 | ) 468 | 469 | open = await self.open_box(cookie, box_id, proxy) 470 | if open and open.get("message") == "Box opened! Prize credited.": 471 | reward = open["prizeAmount"] 472 | 473 | self.log( 474 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 475 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 476 | f"{Fore.GREEN + Style.BRIGHT}Success{Style.RESET_ALL}" 477 | ) 478 | self.log( 479 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 480 | f"{Fore.CYAN + Style.BRIGHT} Reward : {Style.RESET_ALL}" 481 | f"{Fore.WHITE + Style.BRIGHT}{reward} PTS{Style.RESET_ALL}" 482 | ) 483 | 484 | self.log( 485 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 486 | f"{Fore.YELLOW + Style.BRIGHT} Starting Mining... {Style.RESET_ALL}" 487 | ) 488 | 489 | start = await self.start_mining(cookie, box_id, proxy) 490 | if start and start.get("message") == "Box mining started": 491 | self.log( 492 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 493 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 494 | f"{Fore.GREEN + Style.BRIGHT}Success{Style.RESET_ALL}" 495 | ) 496 | else: 497 | self.log( 498 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 499 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 500 | f"{Fore.RED + Style.BRIGHT}Failed or Already Have an Active Box Mining{Style.RESET_ALL}" 501 | ) 502 | 503 | else: 504 | self.log( 505 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 506 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 507 | f"{Fore.RED + Style.BRIGHT}Failed{Style.RESET_ALL}" 508 | ) 509 | 510 | else: 511 | self.log( 512 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 513 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 514 | f"{Fore.RED + Style.BRIGHT}Not Complete{Style.RESET_ALL}" 515 | ) 516 | continue 517 | 518 | self.log( 519 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 520 | f"{Fore.CYAN + Style.BRIGHT} Mission : {Style.RESET_ALL}" 521 | f"{Fore.WHITE + Style.BRIGHT}{mission_desc}{Style.RESET_ALL}" 522 | f"{Fore.RED + Style.BRIGHT} Completed {Style.RESET_ALL}" 523 | ) 524 | 525 | if not is_opened: 526 | self.log( 527 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 528 | f"{Fore.CYAN + Style.BRIGHT} Opened : {Style.RESET_ALL}" 529 | f"{Fore.RED + Style.BRIGHT}False{Style.RESET_ALL}" 530 | f"{Fore.MAGENTA + Style.BRIGHT} - {Style.RESET_ALL}" 531 | f"{Fore.YELLOW + Style.BRIGHT}Opening Box...{Style.RESET_ALL}" 532 | ) 533 | 534 | open = await self.open_box(cookie, box_id, proxy) 535 | if open and open.get("message") == "Box opened! Prize credited.": 536 | reward = open["prizeAmount"] 537 | 538 | self.log( 539 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 540 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 541 | f"{Fore.GREEN + Style.BRIGHT}Success{Style.RESET_ALL}" 542 | ) 543 | self.log( 544 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 545 | f"{Fore.CYAN + Style.BRIGHT} Reward : {Style.RESET_ALL}" 546 | f"{Fore.WHITE + Style.BRIGHT}{reward} PTS{Style.RESET_ALL}" 547 | ) 548 | 549 | self.log( 550 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 551 | f"{Fore.YELLOW + Style.BRIGHT} Starting Mining... {Style.RESET_ALL}" 552 | ) 553 | 554 | start = await self.start_mining(cookie, box_id, proxy) 555 | if start and start.get("message") == "Box mining started": 556 | self.log( 557 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 558 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 559 | f"{Fore.GREEN + Style.BRIGHT}Success{Style.RESET_ALL}" 560 | ) 561 | else: 562 | self.log( 563 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 564 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 565 | f"{Fore.RED + Style.BRIGHT}Failed{Style.RESET_ALL}" 566 | ) 567 | 568 | else: 569 | self.log( 570 | f"{Fore.MAGENTA + Style.BRIGHT} >{Style.RESET_ALL}" 571 | f"{Fore.CYAN + Style.BRIGHT} Status : {Style.RESET_ALL}" 572 | f"{Fore.RED + Style.BRIGHT}Failed{Style.RESET_ALL}" 573 | ) 574 | 575 | async def main(self): 576 | try: 577 | with open('cookies.txt', 'r') as file: 578 | cookies = [line.strip() for line in file if line.strip()] 579 | 580 | use_proxy_choice, rotate_proxy = self.print_question() 581 | 582 | use_proxy = False 583 | if use_proxy_choice in [1, 2]: 584 | use_proxy = True 585 | 586 | while True: 587 | self.clear_terminal() 588 | self.welcome() 589 | self.log( 590 | f"{Fore.GREEN + Style.BRIGHT}Account's Total: {Style.RESET_ALL}" 591 | f"{Fore.WHITE + Style.BRIGHT}{len(cookies)}{Style.RESET_ALL}" 592 | ) 593 | 594 | if use_proxy: 595 | await self.load_proxies(use_proxy_choice) 596 | 597 | separator = "=" * 25 598 | for idx, cookie in enumerate(cookies, start=1): 599 | if cookie: 600 | self.log( 601 | f"{Fore.CYAN + Style.BRIGHT}{separator}[{Style.RESET_ALL}" 602 | f"{Fore.WHITE + Style.BRIGHT} {idx} {Style.RESET_ALL}" 603 | f"{Fore.CYAN + Style.BRIGHT}Of{Style.RESET_ALL}" 604 | f"{Fore.WHITE + Style.BRIGHT} {len(cookies)} {Style.RESET_ALL}" 605 | f"{Fore.CYAN + Style.BRIGHT}]{separator}{Style.RESET_ALL}" 606 | ) 607 | 608 | await self.process_accounts(cookie, use_proxy, rotate_proxy) 609 | await asyncio.sleep(3) 610 | 611 | self.log(f"{Fore.CYAN + Style.BRIGHT}={Style.RESET_ALL}"*60) 612 | 613 | delay = 24 * 60 * 60 614 | while delay > 0: 615 | formatted_time = self.format_seconds(delay) 616 | print( 617 | f"{Fore.CYAN+Style.BRIGHT}[ Wait for{Style.RESET_ALL}" 618 | f"{Fore.WHITE+Style.BRIGHT} {formatted_time} {Style.RESET_ALL}" 619 | f"{Fore.CYAN+Style.BRIGHT}... ]{Style.RESET_ALL}" 620 | f"{Fore.WHITE+Style.BRIGHT} | {Style.RESET_ALL}" 621 | f"{Fore.BLUE+Style.BRIGHT}All Accounts Have Been Processed...{Style.RESET_ALL}", 622 | end="\r", 623 | flush=True 624 | ) 625 | await asyncio.sleep(1) 626 | delay -= 1 627 | 628 | except FileNotFoundError: 629 | self.log(f"{Fore.RED}File 'accounts.txt' Not Found.{Style.RESET_ALL}") 630 | return 631 | except Exception as e: 632 | self.log(f"{Fore.RED+Style.BRIGHT}Error: {e}{Style.RESET_ALL}") 633 | raise 634 | 635 | if __name__ == "__main__": 636 | try: 637 | bot = Goblin() 638 | asyncio.run(bot.main()) 639 | except KeyboardInterrupt: 640 | print( 641 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 642 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 643 | f"{Fore.RED + Style.BRIGHT}[ EXIT ] Goblin Meme - BOT{Style.RESET_ALL} " 644 | ) --------------------------------------------------------------------------------