├── requirements.txt ├── README.md ├── query.txt └── bot.py /requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | colorama 3 | pytz -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dotcoin BOT 2 | Dotcoin BOT 3 | 4 | Register Here : [Dotcoin](https://t.me/dotcoin_bot?start=r_1493482017) 5 | 6 | ## Fitur 7 | 8 | - Auto Get Account Information 9 | - Auto Play Game Spinner [y/n] 10 | - Auto Play Game X2 11 | - Auto Play Game Tap Tap 12 | - Auto Upgarde Booster Multitap [y/n] 13 | - Auto Upgarde Booster Attempt [y/n] 14 | - Auto Upgarde Booster Dtc Mining [y/n] 15 | - Auto Complete Task [y/n] 16 | - Multi Account 17 | 18 | ## Prasyarat 19 | 20 | Pastikan Anda telah menginstal Python3.9 dan PIP. 21 | 22 | ## Instalasi 23 | 24 | 1. **Kloning repositori:** 25 | ```bash 26 | git clone https://github.com/vonssy/Dotcoin-BOT.git 27 | ``` 28 | ```bash 29 | cd Dotcoin-BOT 30 | ``` 31 | 32 | 2. **Instal Requirements:** 33 | ```bash 34 | pip install -r requirements.txt #or pip3 install -r requirements.txt 35 | ``` 36 | 37 | ## Konfigurasi 38 | 39 | - **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: 40 | 41 | ```bash 42 | query_id= 43 | user= 44 | ``` 45 | 46 | ## Jalankan 47 | 48 | ```bash 49 | python bot.py #or python3 bot.py 50 | ``` 51 | 52 | ## Penutup 53 | 54 | Terima kasih telah mengunjungi repository ini, jangan lupa untuk memberikan kontribusi berupa follow dan stars. 55 | Jika Anda memiliki pertanyaan, menemukan masalah, atau memiliki saran untuk perbaikan, jangan ragu untuk menghubungi saya atau membuka *issue* di repositori GitHub ini. 56 | 57 | **vonssy** -------------------------------------------------------------------------------- /query.txt: -------------------------------------------------------------------------------- 1 | query_id=AAFOWv9jAAAAAE5a_2NKCuqz&user=%7B%22id%22%3A1677679182%2C%22first_name%22%3A%22dadang%22%2C%22last_name%22%3A%22yanuar%20%F0%9F%8D%85%20%F0%9F%90%88%E2%80%8D%E2%AC%9B%20%F0%9F%8C%B1%22%2C%22username%22%3A%22SiDung0%22%2C%22language_code%22%3A%22id%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728987299&hash=5a295d2e98b0e6133525c74c3867506f39f4d25fb6eef9ba58f3aa422692a8d8 2 | query_id=AAHShXVWAAAAANKFdVaM_Du4&user=%7B%22id%22%3A1450542546%2C%22first_name%22%3A%22zeetrow%C2%A0%F0%9F%90%88%E2%80%8D%E2%AC%9B%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22zeetrow%22%2C%22language_code%22%3A%22id%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728987258&hash=25cc8aa0e07e103561682ed44674e6e8c2881e54296df6e2e80047c178f0e10b 3 | query_id=AAGA28UpAwAAAIDbxSlnDseM&user=%7B%22id%22%3A7143283584%2C%22first_name%22%3A%22Vv%22%2C%22last_name%22%3A%22%F0%9F%8C%B1SEED%22%2C%22username%22%3A%22Anoraks_uneducate%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728987704&hash=3833f5d915402b693b35fe486041c7fde8ffa856a41eb90821970043d4f3b826 4 | query_id=AAGvFIkhAwAAAK8UiSFeKbfB&user=%7B%22id%22%3A7005082799%2C%22first_name%22%3A%22Labreejayozup%22%2C%22last_name%22%3A%22%F0%9F%8C%B1SEED%22%2C%22username%22%3A%22MastoidBluefin%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728987854&hash=7320678a986a4959b2711a9119b3a96f0e9683ac1d9fa72b338db883d6abdc49 5 | query_id=AAEpCRI-AwAAACkJEj7KhczU&user=%7B%22id%22%3A7483820329%2C%22first_name%22%3A%22Irvineji%22%2C%22last_name%22%3A%22%F0%9F%8C%B1SEED%22%2C%22username%22%3A%22qkMUSi%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728987962&hash=d47c9310f1f6a620b70a91aa2220e14cb74f5ab2b4f84b594ad1cee5eaf73fb6 6 | query_id=AAH-9U49AwAAAP71Tj0DdEDl&user=%7B%22id%22%3A7471035902%2C%22first_name%22%3A%22Muggleyqagiyit%22%2C%22last_name%22%3A%22%F0%9F%8C%B1SEED%22%2C%22username%22%3A%22gAFPca%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728988088&hash=55773a3dca63e39c893002ee27202ab4772104a54eee86e4841891bd822e1039 7 | query_id=AAHs4RhBAwAAAOzhGEFA8lQK&user=%7B%22id%22%3A7534600684%2C%22first_name%22%3A%22Natashia%22%2C%22last_name%22%3A%22%F0%9F%8C%B1SEED%22%2C%22username%22%3A%22addendumboarding%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728988195&hash=3d2c0b4d86a71eb8f92dc30c931551694eed8c4be9efb0a09895cfac629d60b2 8 | query_id=AAGV3jswAwAAAJXeOzAy7A3o&user=%7B%22id%22%3A7251680917%2C%22first_name%22%3A%22Florenexunukuju%22%2C%22last_name%22%3A%22%F0%9F%8C%B1SEED%22%2C%22username%22%3A%22sigmodont_Choctaw%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728988294&hash=cc2683594bb9871a5dce6b7ba5024eb96c09f3048d1778148f6a96c3753b3c4b 9 | query_id=AAFF84RgAwAAAEXzhGA-XH7e&user=%7B%22id%22%3A8061776709%2C%22first_name%22%3A%22Angelo%20Wilson%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22gikin89563%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728988396&hash=60c9bd2e2c8cba6810d9abfe35518ed2e36cae923c9cf96f28dcc9344b616fc3 10 | query_id=AAFBl6BQAwAAAEGXoFCkw7-X&user=%7B%22id%22%3A7795152705%2C%22first_name%22%3A%22Jace%20Lang%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22lopocok77319%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728988535&hash=cc8abb8d9db92dd165ce7001e1ff60b90436fdc43065a537dfa6ddcd916df1fd 11 | query_id=AAG1-tRIAwAAALX61EibDbTo&user=%7B%22id%22%3A7664368309%2C%22first_name%22%3A%22Destinee%20Barrera%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22jebel87031%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728988651&hash=bdea81c1d81b32cd89eae4de931805fbfbe17bb5aea03b1e70aa57a6d729e129 12 | query_id=AAG1a-NTAwAAALVr41O3ntqG&user=%7B%22id%22%3A7849864117%2C%22first_name%22%3A%22Brooklynn%20Knapp%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22pimid35946%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728988750&hash=1129aa3551d1945b1e333eaa33c0b57a84c82dd30098b9f9eb4594874233118f 13 | query_id=AAFefPRNAwAAAF589E1PW3R4&user=%7B%22id%22%3A7750319198%2C%22first_name%22%3A%22Davion%20Lawrence%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22nemereb3715%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728988861&hash=6b285584a55b0a88fe4c21fd2c66a2fc1a5a3f368b4f1e2796226b83cfc1cf97 14 | query_id=AAF8AhRXAwAAAHwCFFd0QLss&user=%7B%22id%22%3A7903380092%2C%22first_name%22%3A%22Julius%20Berg%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22pikinid18685%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728988980&hash=a0c4fdc078049c71a6b2e308509a183fc0e817514787c9b72a61a97b4e467271 15 | query_id=AAG5svVVAwAAALmy9VXx-Jvx&user=%7B%22id%22%3A7884616377%2C%22first_name%22%3A%22Edwin%20Paul%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22kopomos28158%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728989097&hash=1c206e46d55e8340ce03f81cb5823fede47164d1b6c5fb4ac0f80b188a8e72ab 16 | query_id=AAFRVNROAwAAAFFU1E6rIYz8&user=%7B%22id%22%3A7764989009%2C%22first_name%22%3A%22Helen%20Nixon%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22cofor72951%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728989187&hash=d8798d35b3188db50a2200d5d5d7b0258e7a28cc4fbf0c89ce5edab42d654181 17 | query_id=AAF93npJAwAAAH3eekkrCMiq&user=%7B%22id%22%3A7675240061%2C%22first_name%22%3A%22Audrina%20Gross%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22jetepeb11219%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728989271&hash=814edbaeb7e7defbd8050098bf09c33cd94a0d28210195c108f69d2d381d5ec0 18 | query_id=AAFMTMpEAwAAAExMykRu0GkX&user=%7B%22id%22%3A7596559436%2C%22first_name%22%3A%22America%20Reyes%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22wukusup7428%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728989373&hash=c9a24171e793cb013b5227b8f9703d1eaa96874ca65eebd0669310e123c09cf5 19 | query_id=AAH9W2xZAwAAAP1bbFk7kdQq&user=%7B%22id%22%3A7942724605%2C%22first_name%22%3A%22Aiden%20Thompson%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22domog72428%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728989732&hash=9e71e7f2a3e323d35756bf1720f04ff04ac0e4a29cb31a9312b0a93a5940a61c 20 | query_id=AAFeRDZYAwAAAF5ENlhW07xR&user=%7B%22id%22%3A7922402398%2C%22first_name%22%3A%22James%20Moore%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22wugurup2712%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728989824&hash=fa1a946d4c2e873d77c70fc48889573758fc53e5ae2fb7d5e9fbe675adbe3771 21 | query_id=AAFvgZJYAwAAAG-Bklg5x9Fp&user=%7B%22id%22%3A7928447343%2C%22first_name%22%3A%22Benjamin%20Wilson%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22telejen76580%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728989919&hash=034b66d540a7f80cf6d9768ac5e81c65e9fbd329e4fd11c24a3a8c8af45b836f 22 | query_id=AAHlb7ZNAwAAAOVvtk12sFAb&user=%7B%22id%22%3A7746252773%2C%22first_name%22%3A%22Amelia%20Harris%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22pukuhuc13011%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728990007&hash=b7d46d076ba126a026ce9bdb5db3268affbbd70bdb5cca48a03c48ee1435bc6f 23 | query_id=AAHJnIxkAwAAAMmcjGSQO6ro&user=%7B%22id%22%3A8129387721%2C%22first_name%22%3A%22Lucas%20Hernandez%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22kenecer7736%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728990096&hash=2c812bbd8a75e0a611f3e1e3806f20b48e121e73db6c6a19d865860a3eaa7f30 24 | query_id=AAGiYmtHAwAAAKJia0d8l_Hd&user=%7B%22id%22%3A7640670882%2C%22first_name%22%3A%22Ella%20Harris%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22managaw82127%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728990184&hash=98fccd62dcbfc6cf597987362611d9de9c802b8173b12c46069c3437d6c6b74c 25 | query_id=AAGk2FBnAwAAAKTYUGciaKPG&user=%7B%22id%22%3A8175802532%2C%22first_name%22%3A%22Amelia%20Wilson%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22ludub18774%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728990294&hash=1493d2989d8066ec63f4a9956eeb8ec550b7b1e266bdea2b68c5c519a4774637 26 | query_id=AAHof7lTAwAAAOh_uVMhj_h6&user=%7B%22id%22%3A7847116776%2C%22first_name%22%3A%22Liam%20White%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22heged82976%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728990421&hash=f64190f7b4427c7a9be5ce7620aecf5c883c569c6048ae78724fea5b00c12396 27 | query_id=AAHOycZKAwAAAM7JxkqRqwRF&user=%7B%22id%22%3A7696992718%2C%22first_name%22%3A%22Liam%20Harris%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22higirik48709%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728990565&hash=8efbbe7a11e4763ca607dbea08dabf29326c3af3d577cdb32609de42138345a3 28 | query_id=AAHVk7NZAwAAANWTs1laH3IY&user=%7B%22id%22%3A7947391957%2C%22first_name%22%3A%22Ethan%20Martin%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22tofod59936%22%2C%22language_code%22%3A%22en%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728990737&hash=184aaac21a9b32586c70caa27b366ce8468402626c8d28672d38878d46086dd9 29 | query_id=AAEhugRZAAAAACG6BFliOFcP&user=%7B%22id%22%3A1493482017%2C%22first_name%22%3A%22Re%F0%9F%8D%85%F0%9F%90%88%E2%80%8D%E2%AC%9B%F0%9F%8C%B1SEED%22%2C%22last_name%22%3A%22%22%2C%22username%22%3A%22rey_re%22%2C%22language_code%22%3A%22id%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=1728987327&hash=8c29a5700ad04d56d829f5dc183c0d2f19346db8e5bcd36082358774ee6d483f -------------------------------------------------------------------------------- /bot.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import os 4 | from colorama import * 5 | from datetime import datetime, timedelta 6 | from dateutil import parser 7 | import time 8 | import pytz 9 | 10 | wib = pytz.timezone('Asia/Jakarta') 11 | 12 | class Dotcoin: 13 | def __init__(self) -> None: 14 | self.session = requests.Session() 15 | self.headers = { 16 | 'Accept': '*/*', 17 | 'Accept-Language': 'en-US,en;q=0.9', 18 | 'Accept-Profile': 'public', 19 | 'Apikey': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Impqdm5tb3luY21jZXdudXlreWlkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MDg3MDE5ODIsImV4cCI6MjAyNDI3Nzk4Mn0.oZh_ECA6fA2NlwoUamf1TqF45lrMC0uIdJXvVitDbZ8', 20 | 'Cache-Control': 'no-cache', 21 | 'Host': 'api.dotcoin.bot', 22 | 'Origin': 'https://app.dotcoin.bot', 23 | 'Pragma': 'no-cache', 24 | 'Referer': 'https://app.dotcoin.bot/', 25 | 'Sec-Fetch-Dest': 'empty', 26 | 'Sec-Fetch-Mode': 'cors', 27 | 'Sec-Fetch-Site': 'same-site', 28 | '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' 29 | } 30 | 31 | def clear_terminal(self): 32 | os.system('cls' if os.name == 'nt' else 'clear') 33 | 34 | def log(self, message): 35 | print( 36 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 37 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}{message}", 38 | flush=True 39 | ) 40 | 41 | def welcome(self): 42 | print( 43 | f""" 44 | {Fore.GREEN + Style.BRIGHT}Auto Claim {Fore.BLUE + Style.BRIGHT}Dotcoin - BOT 45 | """ 46 | f""" 47 | {Fore.GREEN + Style.BRIGHT}Rey? {Fore.YELLOW + Style.BRIGHT} 48 | """ 49 | ) 50 | 51 | def format_seconds(self, seconds): 52 | hours, remainder = divmod(seconds, 3600) 53 | minutes, seconds = divmod(remainder, 60) 54 | return f"{int(hours):02}:{int(minutes):02}:{int(seconds):02}" 55 | 56 | def get_token(self, query: str, retries=3, delay=2): 57 | url = 'https://api.dotcoin.bot/functions/v1/getToken' 58 | data = json.dumps({'initData': query}) 59 | self.headers.update({ 60 | 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Impqdm5tb3luY21jZXdudXlreWlkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MDg3MDE5ODIsImV4cCI6MjAyNDI3Nzk4Mn0.oZh_ECA6fA2NlwoUamf1TqF45lrMC0uIdJXvVitDbZ8', 61 | 'Content-Type': 'application/json' 62 | }) 63 | 64 | for attempt in range(retries): 65 | try: 66 | response = self.session.post(url, headers=self.headers, data=data) 67 | response.raise_for_status() 68 | result = response.json() 69 | if response.status_code == 200: 70 | return result['token'] 71 | else: 72 | return None 73 | except (requests.RequestException, ValueError) as e: 74 | if attempt < retries - 1: 75 | print( 76 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 77 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 78 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 79 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 80 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 81 | end="\r", 82 | flush=True 83 | ) 84 | time.sleep(delay) 85 | else: 86 | return None 87 | 88 | def user_info(self, token: str, retries=3, delay=2): 89 | url = 'https://api.dotcoin.bot/rest/v1/rpc/get_user_info' 90 | self.headers.update({ 91 | 'Authorization': f'Bearer {token}', 92 | 'Content-Type': 'application/json' 93 | }) 94 | 95 | for attempt in range(retries): 96 | try: 97 | response = self.session.get(url, headers=self.headers) 98 | response.raise_for_status() 99 | result = response.json() 100 | if response.status_code == 200: 101 | return result 102 | else: 103 | return None 104 | except (requests.RequestException, ValueError) as e: 105 | if attempt < retries - 1: 106 | print( 107 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 108 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 109 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 110 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 111 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 112 | end="\r", 113 | flush=True 114 | ) 115 | time.sleep(delay) 116 | else: 117 | return None 118 | 119 | def assets_info(self, token: str, retries=3, delay=2): 120 | url = 'https://api.dotcoin.bot/rest/v1/rpc/get_assets' 121 | self.headers.update({ 122 | 'Authorization': f'Bearer {token}', 123 | 'Content-Type': 'application/json' 124 | }) 125 | 126 | for attempt in range(retries): 127 | try: 128 | response = self.session.get(url, headers=self.headers) 129 | response.raise_for_status() 130 | result = response.json() 131 | if response.status_code == 200: 132 | return result 133 | else: 134 | return None 135 | except (requests.RequestException, ValueError) as e: 136 | if attempt < retries - 1: 137 | print( 138 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 139 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 140 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 141 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 142 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 143 | end="\r", 144 | flush=True 145 | ) 146 | time.sleep(delay) 147 | else: 148 | return None 149 | 150 | def spinner(self, token: str, retries=3, delay=2): 151 | url = 'https://api.dotcoin.bot/rest/v1/rpc/spin' 152 | data = json.dumps({}) 153 | self.headers.update({ 154 | 'Authorization': f'Bearer {token}', 155 | 'Content-Type': 'application/json' 156 | }) 157 | 158 | for attempt in range(retries): 159 | try: 160 | response = self.session.post(url, headers=self.headers, data=data) 161 | response.raise_for_status() 162 | result = response.json() 163 | if response.status_code == 200: 164 | return result 165 | else: 166 | return None 167 | except (requests.RequestException, ValueError) as e: 168 | if attempt < retries - 1: 169 | print( 170 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 171 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 172 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 173 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 174 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 175 | end="\r", 176 | flush=True 177 | ) 178 | time.sleep(delay) 179 | else: 180 | return None 181 | 182 | def double_coins(self, token: str, coins: int, retries=3, delay=2): 183 | url = 'https://api.dotcoin.bot/rest/v1/rpc/try_your_luck' 184 | data = json.dumps({'coins': coins}) 185 | self.headers.update({ 186 | 'Authorization': f'Bearer {token}', 187 | 'Content-Type': 'application/json' 188 | }) 189 | 190 | for attempt in range(retries): 191 | try: 192 | response = self.session.post(url, headers=self.headers, data=data) 193 | response.raise_for_status() 194 | result = response.json() 195 | if response.status_code == 200: 196 | return result 197 | else: 198 | return None 199 | except (requests.RequestException, ValueError) as e: 200 | if attempt < retries - 1: 201 | print( 202 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 203 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 204 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 205 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 206 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 207 | end="\r", 208 | flush=True 209 | ) 210 | time.sleep(delay) 211 | else: 212 | return None 213 | 214 | def save_coins(self, token: str, taps: int, retries=3, delay=2): 215 | url = 'https://api.dotcoin.bot/rest/v1/rpc/save_coins' 216 | data = json.dumps({'coins': taps}) 217 | self.headers.update({ 218 | 'Authorization': f'Bearer {token}', 219 | 'Content-Type': 'application/json' 220 | }) 221 | 222 | for attempt in range(retries): 223 | try: 224 | response = self.session.post(url, headers=self.headers, data=data) 225 | response.raise_for_status() 226 | result = response.json() 227 | if response.status_code == 200: 228 | return result 229 | else: 230 | return None 231 | except (requests.RequestException, ValueError) as e: 232 | if attempt < retries - 1: 233 | print( 234 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 235 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 236 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 237 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 238 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 239 | end="\r", 240 | flush=True 241 | ) 242 | time.sleep(delay) 243 | else: 244 | return None 245 | 246 | def restore_attempts(self, token: str, retries=3, delay=2): 247 | url = 'https://api.dotcoin.bot/rest/v1/rpc/restore_attempt' 248 | data = json.dumps({}) 249 | self.headers.update({ 250 | 'Authorization': f'Bearer {token}', 251 | 'Content-Type': 'application/json' 252 | }) 253 | 254 | for attempt in range(retries): 255 | try: 256 | response = self.session.post(url, headers=self.headers, data=data) 257 | response.raise_for_status() 258 | result = response.json() 259 | if response.status_code == 200: 260 | return result 261 | else: 262 | return None 263 | except (requests.RequestException, ValueError) as e: 264 | if attempt < retries - 1: 265 | print( 266 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 267 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 268 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 269 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 270 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 271 | end="\r", 272 | flush=True 273 | ) 274 | time.sleep(delay) 275 | else: 276 | return None 277 | 278 | def upgrade_multitap(self, token: str, level: int, retries=3, delay=2): 279 | url = 'https://api.dotcoin.bot/rest/v1/rpc/add_multitap' 280 | data = json.dumps({'lvl': level}) 281 | self.headers.update({ 282 | 'Authorization': f'Bearer {token}', 283 | 'Content-Type': 'application/json' 284 | }) 285 | 286 | for attempt in range(retries): 287 | try: 288 | response = self.session.post(url, headers=self.headers, data=data) 289 | response.raise_for_status() 290 | result = response.json() 291 | if response.status_code == 200: 292 | return result 293 | else: 294 | return None 295 | except (requests.RequestException, ValueError) as e: 296 | if attempt < retries - 1: 297 | print( 298 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 299 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 300 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 301 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 302 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 303 | end="\r", 304 | flush=True 305 | ) 306 | time.sleep(delay) 307 | else: 308 | return None 309 | 310 | def upgrade_attempts(self, token: str, level: int, retries=3, delay=2): 311 | url = 'https://api.dotcoin.bot/rest/v1/rpc/add_attempts' 312 | data = json.dumps({'lvl': level}) 313 | self.headers.update({ 314 | 'Authorization': f'Bearer {token}', 315 | 'Content-Type': 'application/json' 316 | }) 317 | 318 | for attempt in range(retries): 319 | try: 320 | response = self.session.post(url, headers=self.headers, data=data) 321 | response.raise_for_status() 322 | result = response.json() 323 | if response.status_code == 200: 324 | return result 325 | else: 326 | return None 327 | except (requests.RequestException, ValueError) as e: 328 | if attempt < retries - 1: 329 | print( 330 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 331 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 332 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 333 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 334 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 335 | end="\r", 336 | flush=True 337 | ) 338 | time.sleep(delay) 339 | else: 340 | return None 341 | 342 | def upgrade_dtc_miner(self, token: str, user_id: int, retries=3, delay=2): 343 | url = 'https://api.dotcoin.bot/functions/v1/upgradeMiner/web2' 344 | self.headers.update({ 345 | 'Authorization': f'Bearer {token}', 346 | 'Content-Length': '0', 347 | 'Content-Type': 'application/json', 348 | 'X-Telegram-User-Id': str(user_id) 349 | }) 350 | 351 | for attempt in range(retries): 352 | try: 353 | response = self.session.post(url, headers=self.headers) 354 | if response.status_code in [400, 402, 405]: 355 | return response.json() 356 | 357 | response.raise_for_status() 358 | return response.json() 359 | except (requests.RequestException, ValueError) as e: 360 | if attempt < retries - 1: 361 | print( 362 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 363 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 364 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 365 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 366 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 367 | end="\r", 368 | flush=True 369 | ) 370 | time.sleep(delay) 371 | else: 372 | return None 373 | 374 | def dtc_miner_rate(self, miner_level: int) -> str: 375 | if miner_level == 0: 376 | return 0 377 | return 2 ** miner_level 378 | 379 | def tasks(self, token: str, retries=3, delay=2): 380 | url = 'https://api.dotcoin.bot/rest/v1/rpc/get_filtered_tasks' 381 | data = json.dumps({"platform":"tdesktop","locale":"en","is_premium":False}) 382 | self.headers.update({ 383 | 'Authorization': f'Bearer {token}', 384 | 'Content-Type': 'application/json' 385 | }) 386 | 387 | for attempt in range(retries): 388 | try: 389 | response = self.session.post(url, headers=self.headers, data=data) 390 | response.raise_for_status() 391 | result = response.json() 392 | if response.status_code == 200: 393 | return result 394 | else: 395 | return None 396 | except (requests.RequestException, ValueError) as e: 397 | if attempt < retries - 1: 398 | print( 399 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 400 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 401 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 402 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 403 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 404 | end="\r", 405 | flush=True 406 | ) 407 | time.sleep(delay) 408 | else: 409 | return None 410 | 411 | def complete_tasks(self, token: str, task_id: int, retries=3, delay=2): 412 | url = 'https://api.dotcoin.bot/rest/v1/rpc/complete_task' 413 | data = json.dumps({'oid': task_id}) 414 | self.headers.update({ 415 | 'Authorization': f'Bearer {token}', 416 | 'Content-Type': 'application/json' 417 | }) 418 | 419 | for attempt in range(retries): 420 | try: 421 | response = self.session.post(url, headers=self.headers, data=data) 422 | response.raise_for_status() 423 | result = response.json() 424 | if response.status_code == 200: 425 | return result 426 | else: 427 | return None 428 | except (requests.RequestException, ValueError) as e: 429 | if attempt < retries - 1: 430 | print( 431 | f"{Fore.CYAN + Style.BRIGHT}[ {datetime.now().astimezone(wib).strftime('%x %X %Z')} ]{Style.RESET_ALL}" 432 | f"{Fore.WHITE + Style.BRIGHT} | {Style.RESET_ALL}" 433 | f"{Fore.RED + Style.BRIGHT}[ HTTP ERROR ]{Style.RESET_ALL}" 434 | f"{Fore.YELLOW + Style.BRIGHT} Retrying... {Style.RESET_ALL}" 435 | f"{Fore.WHITE + Style.BRIGHT}[{attempt + 1}/{retries}]{Style.RESET_ALL}", 436 | end="\r", 437 | flush=True 438 | ) 439 | time.sleep(delay) 440 | else: 441 | return None 442 | 443 | def question(self): 444 | while True: 445 | multitap_upgrade = input("Upgrade Multitap Level? [y/n] -> ").strip().lower() 446 | if multitap_upgrade in ["y", "n"]: 447 | multitap_upgrade = multitap_upgrade == "y" 448 | break 449 | else: 450 | print(f"{Fore.RED+Style.BRIGHT}Invalid Input.{Fore.WHITE+Style.BRIGHT} Choose 'y' to upgrade or 'n' to skip.{Style.RESET_ALL}") 451 | multitap_count = 0 452 | if multitap_upgrade: 453 | while True: 454 | try: 455 | multitap_count = int(input("How many times? -> ")) 456 | if multitap_count > 0: 457 | break 458 | else: 459 | print(f"{Fore.RED+Style.BRIGHT}Please enter a positive number.{Style.RESET_ALL}") 460 | except ValueError: 461 | print(f"{Fore.RED+Style.BRIGHT}Invalid input. Enter a number.{Style.RESET_ALL}") 462 | 463 | while True: 464 | attempts_upgrade = input("Upgrade Limit Attempts? [y/n] -> ").strip().lower() 465 | if attempts_upgrade in ["y", "n"]: 466 | attempts_upgrade = attempts_upgrade == "y" 467 | break 468 | else: 469 | print(f"{Fore.RED+Style.BRIGHT}Invalid Input.{Fore.WHITE+Style.BRIGHT} Choose 'y' to upgrade or 'n' to skip.{Style.RESET_ALL}") 470 | attempts_count = 0 471 | if attempts_upgrade: 472 | while True: 473 | try: 474 | attempts_count = int(input("How many times? -> ")) 475 | if attempts_count > 0: 476 | break 477 | else: 478 | print(f"{Fore.RED+Style.BRIGHT}Please enter a positive number.{Style.RESET_ALL}") 479 | except ValueError: 480 | print(f"{Fore.RED+Style.BRIGHT}Invalid input. Enter a number.{Style.RESET_ALL}") 481 | 482 | while True: 483 | miner_upgrade = input("Upgarde DTC Mining Level? [y/n] -> ").strip().lower() 484 | if miner_upgrade in ["y", "n"]: 485 | miner_upgrade = miner_upgrade == "y" 486 | break 487 | else: 488 | print(f"{Fore.RED+Style.BRIGHT}Invalid Input.{Fore.WHITE+Style.BRIGHT} Choose 'y' to upgrade or 'n' to skip.{Style.RESET_ALL}") 489 | 490 | while True: 491 | go_spin = input("Play Game Spinner? [y/n] -> ").strip().lower() 492 | if go_spin in ["y", "n"]: 493 | go_spin = go_spin == "y" 494 | break 495 | else: 496 | print(f"{Fore.RED+Style.BRIGHT}Invalid Input.{Fore.WHITE+Style.BRIGHT} Choose 'y' to play or 'n' to skip.{Style.RESET_ALL}") 497 | 498 | while True: 499 | go_task = input("Check Available Tasks? [y/n] -> ").strip().lower() 500 | if go_task in ["y", "n"]: 501 | go_task = go_task == "y" 502 | break 503 | else: 504 | print(f"{Fore.RED+Style.BRIGHT}Invalid Input.{Fore.WHITE+Style.BRIGHT} Choose 'y' to check or 'n' to skip.{Style.RESET_ALL}") 505 | 506 | return multitap_upgrade, multitap_count, attempts_upgrade, attempts_count, miner_upgrade, go_spin, go_task 507 | 508 | def process_query(self, query: str, add_multitap: bool, multitap_count: int, add_attempts: bool, attempts_count: int, dtc_miner: bool, spinner: bool, check_task: bool): 509 | 510 | token = self.get_token(query) 511 | 512 | if token: 513 | user = self.user_info(token) 514 | if user: 515 | self.log( 516 | f"{Fore.MAGENTA+Style.BRIGHT}[ Account{Style.RESET_ALL}" 517 | f"{Fore.WHITE+Style.BRIGHT} {user['first_name']} {Style.RESET_ALL}" 518 | f"{Fore.MAGENTA+Style.BRIGHT}] [ Balance{Style.RESET_ALL}" 519 | f"{Fore.WHITE+Style.BRIGHT} {user['balance']} {Style.RESET_ALL}" 520 | f"{Fore.MAGENTA+Style.BRIGHT}Point ] [ Level{Style.RESET_ALL}" 521 | f"{Fore.WHITE+Style.BRIGHT} {user['level']} {Style.RESET_ALL}" 522 | f"{Fore.MAGENTA+Style.BRIGHT}]{Style.RESET_ALL}" 523 | ) 524 | time.sleep(1) 525 | 526 | self.log(f"{Fore.CYAN+Style.BRIGHT}[ Booster Info ]{Style.RESET_ALL}") 527 | time.sleep(1) 528 | miner_level = user['dtc_level'] 529 | dtc_rate = self.dtc_miner_rate(miner_level) 530 | self.log( 531 | f"{Fore.MAGENTA+Style.BRIGHT} -> Multitap Level : {Style.RESET_ALL}" 532 | f"{Fore.WHITE+Style.BRIGHT}{user['multiple_clicks']}{Style.RESET_ALL}" 533 | ) 534 | self.log( 535 | f"{Fore.MAGENTA+Style.BRIGHT} -> Daily Attempts : {Style.RESET_ALL}" 536 | f"{Fore.WHITE+Style.BRIGHT}{user['limit_attempts']}{Style.RESET_ALL}" 537 | ) 538 | self.log( 539 | f"{Fore.MAGENTA+Style.BRIGHT} -> DTC Mining Level : {Style.RESET_ALL}" 540 | f"{Fore.WHITE+Style.BRIGHT}{miner_level}{Style.RESET_ALL}" 541 | ) 542 | self.log( 543 | f"{Fore.MAGENTA+Style.BRIGHT} -> DTC Mining Rate : {Style.RESET_ALL}" 544 | f"{Fore.WHITE+Style.BRIGHT}{dtc_rate} $DTC/Day{Style.RESET_ALL}" 545 | ) 546 | time.sleep(1) 547 | 548 | self.log(f"{Fore.CYAN+Style.BRIGHT}[ Assets Info ]{Style.RESET_ALL}") 549 | time.sleep(1) 550 | assets = self.assets_info(token) 551 | if assets: 552 | for asset in assets: 553 | 554 | if asset['symbol'] == 'VENOM': 555 | self.log( 556 | f"{Fore.MAGENTA+Style.BRIGHT} -> Venom Amount : {Style.RESET_ALL}" 557 | f"{Fore.WHITE+Style.BRIGHT}{asset['amount']} ${asset['symbol']}{Style.RESET_ALL}" 558 | ) 559 | else: 560 | self.log( 561 | f"{Fore.MAGENTA+Style.BRIGHT} -> Dotcoin Amount : {Style.RESET_ALL}" 562 | f"{Fore.WHITE+Style.BRIGHT}{asset['amount']} ${asset['symbol']}{Style.RESET_ALL}" 563 | ) 564 | else: 565 | self.log(f"{Fore.RED+Style.BRIGHT}[ Assets Info ] None{Style.RESET_ALL}") 566 | time.sleep(1) 567 | 568 | self.log(f"{Fore.CYAN+Style.BRIGHT}[ Upgrade Boost ]{Style.RESET_ALL}") 569 | time.sleep(1) 570 | if add_multitap: 571 | for i in range(multitap_count): 572 | user = self.user_info(token) 573 | multitap_level = user['multiple_clicks'] 574 | upgrade = self.upgrade_multitap(token, multitap_level) 575 | if upgrade['success']: 576 | self.log( 577 | f"{Fore.MAGENTA+Style.BRIGHT} -> Multitap : {Style.RESET_ALL}" 578 | f"{Fore.GREEN+Style.BRIGHT}Upgrade Success{Style.RESET_ALL}" 579 | f"{Fore.WHITE+Style.BRIGHT} - {Style.RESET_ALL}" 580 | f"{Fore.MAGENTA+Style.BRIGHT}Level {Style.RESET_ALL}" 581 | f"{Fore.WHITE+Style.BRIGHT}{multitap_level + 1}{Style.RESET_ALL}" 582 | ) 583 | else: 584 | self.log( 585 | f"{Fore.MAGENTA+Style.BRIGHT} -> Multitap : {Style.RESET_ALL}" 586 | f"{Fore.RED+Style.BRIGHT}Not Enough Balance{Style.RESET_ALL}" 587 | ) 588 | break 589 | time.sleep(1) 590 | else: 591 | self.log( 592 | f"{Fore.MAGENTA+Style.BRIGHT} -> Multitap : {Style.RESET_ALL}" 593 | f"{Fore.YELLOW+Style.BRIGHT}Skipped{Style.RESET_ALL}" 594 | ) 595 | time.sleep(1) 596 | 597 | self.log(f"{Fore.CYAN+Style.BRIGHT}[ Upgrade Boost ]{Style.RESET_ALL}") 598 | time.sleep(1) 599 | if add_attempts: 600 | for i in range(attempts_count): 601 | user = self.user_info(token) 602 | attempts_level = user['limit_attempts'] - 9 603 | upgrade = self.upgrade_attempts(token, attempts_level) 604 | if upgrade['success']: 605 | self.log( 606 | f"{Fore.MAGENTA+Style.BRIGHT} -> Limit Attempts : {Style.RESET_ALL}" 607 | f"{Fore.GREEN+Style.BRIGHT}Upgrade Success{Style.RESET_ALL}" 608 | f"{Fore.WHITE+Style.BRIGHT} - {Style.RESET_ALL}" 609 | f"{Fore.MAGENTA+Style.BRIGHT}Level {Style.RESET_ALL}" 610 | f"{Fore.WHITE+Style.BRIGHT}{attempts_level + 1}{Style.RESET_ALL}" 611 | ) 612 | else: 613 | self.log( 614 | f"{Fore.MAGENTA+Style.BRIGHT} -> Limit Attempts : {Style.RESET_ALL}" 615 | f"{Fore.RED+Style.BRIGHT}Not Enough Balance{Style.RESET_ALL}" 616 | ) 617 | break 618 | time.sleep(1) 619 | else: 620 | self.log( 621 | f"{Fore.MAGENTA+Style.BRIGHT} -> Limit Attempts : {Style.RESET_ALL}" 622 | f"{Fore.YELLOW+Style.BRIGHT}Skipped{Style.RESET_ALL}" 623 | ) 624 | time.sleep(1) 625 | 626 | self.log(f"{Fore.CYAN+Style.BRIGHT}[ Upgrade Boost ]{Style.RESET_ALL}") 627 | time.sleep(1) 628 | if dtc_miner: 629 | user = self.user_info(token) 630 | user_id = user['id'] 631 | miner_level = user['dtc_level'] 632 | upgrade = self.upgrade_dtc_miner(token, user_id) 633 | if upgrade and upgrade['success']: 634 | self.log( 635 | f"{Fore.MAGENTA+Style.BRIGHT} -> DTC Mining : {Style.RESET_ALL}" 636 | f"{Fore.GREEN+Style.BRIGHT}Upgrade Success{Style.RESET_ALL}" 637 | f"{Fore.WHITE+Style.BRIGHT} - {Style.RESET_ALL}" 638 | f"{Fore.MAGENTA+Style.BRIGHT}Level {Style.RESET_ALL}" 639 | f"{Fore.WHITE+Style.BRIGHT}{miner_level + 1}{Style.RESET_ALL}" 640 | ) 641 | else: 642 | msg = upgrade.get('message', 'Unknown Error') 643 | self.log( 644 | f"{Fore.MAGENTA+Style.BRIGHT} -> DTC Mining : {Style.RESET_ALL}" 645 | f"{Fore.YELLOW+Style.BRIGHT}{msg}{Style.RESET_ALL}" 646 | ) 647 | else: 648 | self.log( 649 | f"{Fore.MAGENTA+Style.BRIGHT} -> DTC Mining : {Style.RESET_ALL}" 650 | f"{Fore.YELLOW+Style.BRIGHT}Skipped{Style.RESET_ALL}" 651 | ) 652 | time.sleep(1) 653 | 654 | if spinner: 655 | self.log( 656 | f"{Fore.CYAN+Style.BRIGHT}[ Play Game ] {Style.RESET_ALL}" 657 | f"{Fore.WHITE+Style.BRIGHT}Spinner{Style.RESET_ALL}" 658 | ) 659 | time.sleep(1) 660 | 661 | assets = self.assets_info(token) 662 | for asset in assets: 663 | if asset['symbol'] == 'DTC': 664 | dtc_amount = asset['amount'] 665 | 666 | if dtc_amount >= 5: 667 | 668 | spinner_update = user['spin_updated_at'] 669 | if spinner_update is not None: 670 | spinner_time = parser.isoparse(spinner_update) 671 | spinner_time_wib = spinner_time.astimezone(wib) 672 | spinner_ready = (spinner_time_wib + timedelta(hours=8)).strftime('%x %X %Z') 673 | else: 674 | spinner_ready = "N/A" 675 | 676 | spin = self.spinner(token) 677 | if spin['success']: 678 | if spin['symbol'] == 'VENOM': 679 | self.log( 680 | f"{Fore.MAGENTA+Style.BRIGHT} -> Spinner : {Style.RESET_ALL}" 681 | f"{Fore.GREEN+Style.BRIGHT}Success{Style.RESET_ALL}" 682 | f"{Fore.WHITE+Style.BRIGHT} - {Style.RESET_ALL}" 683 | f"{Fore.MAGENTA+Style.BRIGHT}Reward {Style.RESET_ALL}" 684 | f"{Fore.WHITE+Style.BRIGHT}{spin['amount']} $VENOM{Style.RESET_ALL}" 685 | ) 686 | else: 687 | self.log( 688 | f"{Fore.MAGENTA+Style.BRIGHT} -> Spinner : {Style.RESET_ALL}" 689 | f"{Fore.GREEN+Style.BRIGHT}Success{Style.RESET_ALL}" 690 | f"{Fore.WHITE+Style.BRIGHT} - {Style.RESET_ALL}" 691 | f"{Fore.MAGENTA+Style.BRIGHT}Reward {Style.RESET_ALL}" 692 | f"{Fore.WHITE+Style.BRIGHT}{spin['amount']} $DTC{Style.RESET_ALL}" 693 | ) 694 | else: 695 | self.log( 696 | f"{Fore.MAGENTA+Style.BRIGHT} -> Spinner : {Style.RESET_ALL}" 697 | f"{Fore.YELLOW+Style.BRIGHT}Already Play Spinner{Style.RESET_ALL}" 698 | ) 699 | self.log( 700 | f"{Fore.MAGENTA+Style.BRIGHT} -> Spinner : {Style.RESET_ALL}" 701 | f"{Fore.YELLOW+Style.BRIGHT}Comeback at {Style.RESET_ALL}" 702 | f"{Fore.WHITE+Style.BRIGHT}{spinner_ready}{Style.RESET_ALL}" 703 | ) 704 | time.sleep(1) 705 | else: 706 | self.log( 707 | f"{Fore.MAGENTA+Style.BRIGHT} -> Spinner : {Style.RESET_ALL}" 708 | f"{Fore.YELLOW+Style.BRIGHT}Not Enough DTC{Style.RESET_ALL}" 709 | ) 710 | self.log( 711 | f"{Fore.MAGENTA+Style.BRIGHT} -> Amount : {Style.RESET_ALL}" 712 | f"{Fore.WHITE+Style.BRIGHT}{dtc_amount} $DTC{Style.RESET_ALL}" 713 | ) 714 | else: 715 | self.log( 716 | f"{Fore.CYAN+Style.BRIGHT}[ Play Game ] {Style.RESET_ALL}" 717 | f"{Fore.YELLOW+Style.BRIGHT}Spinner Skipped{Style.RESET_ALL}" 718 | ) 719 | time.sleep(1) 720 | 721 | self.log( 722 | f"{Fore.CYAN+Style.BRIGHT}[ Play Game ] {Style.RESET_ALL}" 723 | f"{Fore.WHITE+Style.BRIGHT}Double Coins{Style.RESET_ALL}" 724 | ) 725 | time.sleep(1) 726 | if user['gamex2_times'] != 0: 727 | coins = 150000 728 | gacha = self.double_coins(token, coins) 729 | if gacha['success']: 730 | self.log( 731 | f"{Fore.MAGENTA+Style.BRIGHT} -> Gacha : {Style.RESET_ALL}" 732 | f"{Fore.GREEN+Style.BRIGHT}WIN{Style.RESET_ALL}" 733 | f"{Fore.WHITE+Style.BRIGHT} - {Style.RESET_ALL}" 734 | f"{Fore.MAGENTA+Style.BRIGHT}Reward {Style.RESET_ALL}" 735 | f"{Fore.WHITE+Style.BRIGHT}{coins}{Style.RESET_ALL}" 736 | ) 737 | else: 738 | self.log( 739 | f"{Fore.MAGENTA+Style.BRIGHT} -> Gacha : {Style.RESET_ALL}" 740 | f"{Fore.RED+Style.BRIGHT}LOSE{Style.RESET_ALL}" 741 | ) 742 | else: 743 | self.log( 744 | f"{Fore.MAGENTA+Style.BRIGHT} -> Gacha : {Style.RESET_ALL}" 745 | f"{Fore.YELLOW+Style.BRIGHT}Already Gacha Today{Style.RESET_ALL}" 746 | ) 747 | time.sleep(1) 748 | 749 | self.log( 750 | f"{Fore.CYAN+Style.BRIGHT}[ Play Game ] {Style.RESET_ALL}" 751 | f"{Fore.WHITE+Style.BRIGHT}Tap Tap{Style.RESET_ALL}" 752 | ) 753 | time.sleep(1) 754 | energy = user['daily_attempts'] 755 | self.log( 756 | f"{Fore.MAGENTA+Style.BRIGHT} -> Tap Tap : {Style.RESET_ALL}" 757 | f"{Fore.WHITE+Style.BRIGHT}Energy {energy}{Style.RESET_ALL}" 758 | ) 759 | time.sleep(1) 760 | while energy > 0: 761 | for _ in range(energy): 762 | time.sleep(3) 763 | taps = self.save_coins(token, 20000) 764 | if taps['success']: 765 | self.log( 766 | f"{Fore.MAGENTA+Style.BRIGHT} -> Tap Tap : {Style.RESET_ALL}" 767 | f"{Fore.GREEN+Style.BRIGHT}Success{Style.RESET_ALL}" 768 | ) 769 | else: 770 | self.log( 771 | f"{Fore.MAGENTA+Style.BRIGHT} -> Tap Tap : {Style.RESET_ALL}" 772 | f"{Fore.RED+Style.BRIGHT}Failed{Style.RESET_ALL}" 773 | ) 774 | user = self.user_info(token) 775 | energy = user['daily_attempts'] 776 | if energy == 0: 777 | count = 0 778 | while count < 1: 779 | restore = self.restore_attempts(token) 780 | if restore['success'] and restore: 781 | self.log( 782 | f"{Fore.MAGENTA+Style.BRIGHT} -> Tap Tap : {Style.RESET_ALL}" 783 | f"{Fore.GREEN+Style.BRIGHT}Restore Energy Success{Style.RESET_ALL}" 784 | ) 785 | else: 786 | self.log( 787 | f"{Fore.MAGENTA+Style.BRIGHT} -> Tap Tap : {Style.RESET_ALL}" 788 | f"{Fore.YELLOW+Style.BRIGHT}Restore Energy Reached Limit{Style.RESET_ALL}" 789 | ) 790 | count += 1 791 | time.sleep(1) 792 | user = self.user_info(token) 793 | energy = user['daily_attempts'] 794 | else: 795 | self.log( 796 | f"{Fore.MAGENTA+Style.BRIGHT} -> Tap Tap : {Style.RESET_ALL}" 797 | f"{Fore.YELLOW+Style.BRIGHT}Energy has Run Out{Style.RESET_ALL}" 798 | ) 799 | time.sleep(1) 800 | 801 | if check_task: 802 | self.log( 803 | f"{Fore.CYAN+Style.BRIGHT}[ Check Task ] {Style.RESET_ALL}" 804 | f"{Fore.GREEN+Style.BRIGHT}Checked{Style.RESET_ALL}" 805 | ) 806 | tasks = self.tasks(token) 807 | if tasks: 808 | for task in tasks: 809 | task_id = task['id'] 810 | 811 | if task['is_completed'] is None: 812 | 813 | complete = self.complete_tasks(token, task_id) 814 | if complete['success']: 815 | self.log( 816 | f"{Fore.MAGENTA+Style.BRIGHT} -> Task{Style.RESET_ALL}" 817 | f"{Fore.WHITE+Style.BRIGHT} {task['title']} {Style.RESET_ALL}" 818 | f"{Fore.GREEN+Style.BRIGHT}Completed{Style.RESET_ALL}" 819 | f"{Fore.WHITE+Style.BRIGHT} - {Style.RESET_ALL}" 820 | f"{Fore.MAGENTA+Style.BRIGHT}Reward {Style.RESET_ALL}" 821 | f"{Fore.WHITE+Style.BRIGHT}{task['reward']}{Style.RESET_ALL}" 822 | ) 823 | else: 824 | self.log( 825 | f"{Fore.MAGENTA+Style.BRIGHT} -> Task{Style.RESET_ALL}" 826 | f"{Fore.WHITE+Style.BRIGHT} {task['title']} {Style.RESET_ALL}" 827 | f"{Fore.RED+Style.BRIGHT}Not Completed{Style.RESET_ALL}" 828 | ) 829 | time.sleep(1) 830 | else: 831 | self.log( 832 | f"{Fore.MAGENTA+Style.BRIGHT} -> Task{Style.RESET_ALL}" 833 | f"{Fore.RED+Style.BRIGHT}Failed to Checked Tasks{Style.RESET_ALL}" 834 | ) 835 | time.sleep(1) 836 | else: 837 | self.log( 838 | f"{Fore.CYAN+Style.BRIGHT}[ Check Task ] {Style.RESET_ALL}" 839 | f"{Fore.YELLOW+Style.BRIGHT}Skipped{Style.RESET_ALL}" 840 | ) 841 | time.sleep(1) 842 | 843 | else: 844 | self.log(f"{Fore.RED+Style.BRIGHT}[ Account None ]{Style.RESET_ALL}") 845 | time.sleep(1) 846 | 847 | else: 848 | self.log(f"{Fore.RED+Style.BRIGHT}[ Token None ]{Style.RESET_ALL}") 849 | time.sleep(1) 850 | 851 | def main(self): 852 | try: 853 | with open('query.txt', 'r') as file: 854 | queries = [line.strip() for line in file if line.strip()] 855 | 856 | add_multitap, multitap_count, add_attempts, attempts_count, dtc_miner, spinner, check_task = self.question() 857 | 858 | while True: 859 | self.clear_terminal() 860 | self.welcome() 861 | self.log( 862 | f"{Fore.GREEN + Style.BRIGHT}Account's Total: {Style.RESET_ALL}" 863 | f"{Fore.WHITE + Style.BRIGHT}{len(queries)}{Style.RESET_ALL}" 864 | ) 865 | self.log(f"{Fore.CYAN + Style.BRIGHT}-{Style.RESET_ALL}" * 75) 866 | 867 | for query in queries: 868 | query = query.strip() 869 | if query: 870 | self.process_query(query, add_multitap, multitap_count, add_attempts, attempts_count, dtc_miner, spinner, check_task) 871 | self.log(f"{Fore.CYAN + Style.BRIGHT}-{Style.RESET_ALL}" * 75) 872 | 873 | seconds = 1800 874 | while seconds > 0: 875 | formatted_time = self.format_seconds(seconds) 876 | print( 877 | f"{Fore.CYAN+Style.BRIGHT}[ Wait for{Style.RESET_ALL}" 878 | f"{Fore.WHITE+Style.BRIGHT} {formatted_time} {Style.RESET_ALL}" 879 | f"{Fore.CYAN+Style.BRIGHT}... ]{Style.RESET_ALL}", 880 | end="\r" 881 | ) 882 | time.sleep(1) 883 | seconds -= 1 884 | 885 | except KeyboardInterrupt: 886 | self.log(f"{Fore.RED + Style.BRIGHT}[ EXIT ] Dotcoin - BOT{Style.RESET_ALL}") 887 | except Exception as e: 888 | self.log(f"{Fore.RED + Style.BRIGHT}An error occurred: {e}{Style.RESET_ALL}") 889 | 890 | if __name__ == "__main__": 891 | dotcoin = Dotcoin() 892 | dotcoin.main() --------------------------------------------------------------------------------