├── LICENSE ├── README.md ├── accounts.yaml ├── config.yaml ├── main.py ├── proxy.yaml └── requirements.txt /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 recitativonika 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DAWN Validator Extension automatic claim 2 | Python version of Dawn Validator Bot 3 | 4 | ## What needed 5 | - Python 6 | 7 | ## Features 8 | 9 | - Automatically send keep-alive requests to claim points. 10 | - Multi-account. 11 | - Auto loop. 12 | - Proxy support. 13 | 14 | 15 | ## Installing and setup 16 | 17 | ### Install 18 | 1. Clone the project and go to project directory 19 | ``` 20 | git clone https://github.com/recitativonika/Dawn-Validator-bot-python.git 21 | ``` 22 | ``` 23 | cd Dawn-Validator-bot-python 24 | ``` 25 | 2. Install required package 26 | ``` 27 | pip install -r requirements.txt 28 | ``` 29 | ### Setup and run 30 | 31 | 1. Login/register Dawn Validator account and login, get the token in "getpoint?appid=" -> "authorization:" at network tab in inspect element in browser. 32 | 2. In `Dawn-Validator-bot-python` directory, Edit and adjust this line in `accounts.yaml` and save it 33 | ``` 34 | - email: "account1@example.com" # Replace with actual email 35 | token: "example_token_1" # Replace with actual token 36 | - email: "account2@example.com" 37 | token: "example_token_2" 38 | # Add more accounts as needed 39 | ``` 40 | 3. Edit and adjust the `config.yaml` for proxy and delay options. 41 | ``` 42 | useProxy: false # Set to true if you want to use proxies, false otherwise 43 | restartDelay: 241 # Delay in seconds for restarting the processing loop 44 | ``` 45 | 4. Edit the `proxy.yaml` if you want to use proxy 46 | 5. Run the script to start, use : 47 | ``` 48 | python main.py 49 | ``` 50 | 51 | 52 | 53 | Dawn Validator Extension : https://chromewebstore.google.com/detail/dawn-validator-chrome-ext/fpdkjdnhkakefebpekbdhillbhonfjjp?authuser=0&hl=en 54 | 55 | My reff code if you want :) : 9lv10g33 56 | -------------------------------------------------------------------------------- /accounts.yaml: -------------------------------------------------------------------------------- 1 | - email: "account1@example.com" # Replace with actual email 2 | token: "example_token_1" # Replace with actual token 3 | - email: "account2@example.com" 4 | token: "example_token_2" 5 | # Add more accounts as needed 6 | -------------------------------------------------------------------------------- /config.yaml: -------------------------------------------------------------------------------- 1 | useProxy: false # Set to true if you want to use proxies, false otherwise 2 | restartDelay: 241 # Delay in seconds for restarting the processing loop -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import yaml 3 | import time 4 | import random 5 | import ssl 6 | import asyncio 7 | import warnings 8 | from requests.packages.urllib3.exceptions import InsecureRequestWarning 9 | 10 | warnings.simplefilter('ignore', InsecureRequestWarning) 11 | 12 | with open('config.yaml') as config_file: 13 | config = yaml.safe_load(config_file) 14 | 15 | with open('accounts.yaml') as accounts_file: 16 | accounts_data = yaml.safe_load(accounts_file) 17 | 18 | with open('proxy.yaml') as proxy_file: 19 | proxy_data = yaml.safe_load(proxy_file) 20 | 21 | proxies = proxy_data.get('proxies', []) 22 | 23 | if not isinstance(proxies, list): 24 | raise ValueError("Proxies must be a list under the 'proxies' key") 25 | 26 | api_endpoints = { 27 | "keepalive": "https://www.aeropres.in/chromeapi/dawn/v1/userreward/keepalive", 28 | "getPoints": "https://www.aeropres.in/api/atom/v1/userreferral/getpoint" 29 | } 30 | 31 | ssl._create_default_https_context = ssl._create_unverified_context 32 | 33 | def random_delay(min_seconds, max_seconds): 34 | delay_time = random.randint(min_seconds, max_seconds) 35 | time.sleep(delay_time) 36 | 37 | def display_welcome(): 38 | print(""" 39 | \x1b[32m🌟 DAWN Validator Extension automatic claim 🌟\x1b[0m 40 | \x1b[36mGithub: recitativonika\x1b[0m 41 | \x1b[36mgithub.com/recitativonika\x1b[0m 42 | """) 43 | 44 | async def fetch_points(headers): 45 | try: 46 | response = requests.get(api_endpoints["getPoints"], headers=headers, verify=False) 47 | if response.status_code == 200 and response.json().get('status'): 48 | data = response.json().get('data', {}) 49 | reward_point = data.get('rewardPoint', {}) 50 | referral_point = data.get('referralPoint', {}) 51 | total_points = ( 52 | reward_point.get('points', 0) + 53 | reward_point.get('registerpoints', 0) + 54 | reward_point.get('signinpoints', 0) + 55 | reward_point.get('twitter_x_id_points', 0) + 56 | reward_point.get('discordid_points', 0) + 57 | reward_point.get('telegramid_points', 0) + 58 | reward_point.get('bonus_points', 0) + 59 | referral_point.get('commission', 0) 60 | ) 61 | return total_points 62 | else: 63 | pass 64 | except Exception as error: 65 | pass 66 | return 0 67 | 68 | async def keep_alive_request(headers, email): 69 | payload = { 70 | "username": email, 71 | "extensionid": "fpdkjdnhkakefebpekbdhillbhonfjjp", 72 | "numberoftabs": 0, 73 | "_v": "1.0.9" 74 | } 75 | 76 | try: 77 | response = requests.post(api_endpoints["keepalive"], json=payload, headers=headers, verify=False) 78 | if response.status_code == 200: 79 | return True 80 | else: 81 | if response.status_code == 502: 82 | print(f"\x1b[33m⚠️ Error during keep-alive request for {email}: will try again on the next restart...\x1b[0m") 83 | else: 84 | print(f"🚫 Keep-Alive Error for {email}: {response.status_code} - {response.json().get('message', 'Unknown error')}") 85 | except Exception as error: 86 | print(f"⚠️ Error during keep-alive request for {email}: will try again on the next restart...") 87 | return False 88 | 89 | 90 | async def process_account(account, proxy): 91 | email = account['email'] 92 | token = account['token'] 93 | 94 | headers = { 95 | "Accept": "*/*", 96 | "Authorization": f"Bearer {token}", 97 | "Content-Type": "application/json", 98 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36", 99 | } 100 | 101 | if proxy: 102 | headers['Proxy'] = proxy 103 | 104 | points = await fetch_points(headers) 105 | 106 | print(f"🔍 Processing: \x1b[36m{email}\x1b[0m, Proxy: \x1b[33m{proxy if proxy else 'No Proxy'}\x1b[0m, Points: \x1b[32m{points}\x1b[0m") 107 | 108 | success = await keep_alive_request(headers, email) 109 | if success: 110 | print(f"✅ Keep-Alive Success for: \x1b[36m{email}\x1b[0m") 111 | else: 112 | print(f"⚠️ Error during keep-alive request for \x1b[36m{email}\x1b[0m: Request failed with status code 502") 113 | print(f"❌ Keep-Alive Failed for: \x1b[36m{email}\x1b[0m") 114 | 115 | return points 116 | 117 | async def countdown(seconds): 118 | for i in range(seconds, 0, -1): 119 | print(f"⏳ Next process in: {i} seconds...", end='\r') 120 | await asyncio.sleep(1) 121 | print("\n🔄 Restarting...\n") 122 | 123 | async def process_accounts(): 124 | display_welcome() 125 | total_proxies = len(proxies) 126 | 127 | while True: 128 | account_promises = [] 129 | 130 | for index, account in enumerate(accounts_data): 131 | proxy = proxies[index % total_proxies] if config.get('useProxy') else None 132 | account_promises.append(process_account(account, proxy)) 133 | 134 | points_array = await asyncio.gather(*account_promises) 135 | total_points = sum(points_array) 136 | 137 | print(f"📋 All accounts processed. Total points: \x1b[32m{total_points}\x1b[0m") 138 | await countdown(config['restartDelay']) 139 | 140 | if __name__ == "__main__": 141 | try: 142 | asyncio.run(process_accounts()) 143 | except KeyboardInterrupt: 144 | print("\nProcess interrupted by user. Exiting gracefully.") 145 | -------------------------------------------------------------------------------- /proxy.yaml: -------------------------------------------------------------------------------- 1 | proxies: 2 | - "proxy1:port" # Replace with actual proxy 3 | - "proxy2:port" # Replace with actual proxy 4 | # Add more proxies as needed -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | pyyaml --------------------------------------------------------------------------------