# -*- coding: utf-8 -*- import sys import os import time from httpx import Client from concurrent.futures import ThreadPoolExecutor, as_completed sys.path.append(os.path.join(os.path.abspath(__file__).split('auto')[0] + 'auto')) from utils.utils_send_gotify import * from utils.utils_daily_task_scheduler import * from utils.utils_get_public_ip import get_public_ip def daily_claim_3dos(email, password): # client = Client(proxy="http://127.0.0.1:7890") client = Client() login_url = "https://api.dashboard.3dos.io/api/auth/login" login_headers = { "Accept": "application/json, text/plain, */*", "Accept-Encoding": "gzip, deflate, br, zstd", "Accept-Language": "zh-CN,zh;q=0.9", "Content-Type": "application/json", "Origin": "https://dashboard.3dos.io", "Priority": "u=1, i", "Referer": "https://dashboard.3dos.io/", "Sec-CH-UA": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', "Sec-CH-UA-Mobile": "?0", "Sec-CH-UA-Platform": '"Windows"', "Sec-Fetch-Dest": "empty", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Site": "same-site", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" } login_payload = { "email": email, "password": password } try: login_response = client.post(login_url, json=login_payload, headers=login_headers) except Exception as e: print(f"登录请求失败:{e}") return False if login_response.status_code == 200: # print(f"{email}: 登录成功!") login_data = login_response.json() # print("登录响应内容:", login_data) data = login_data.get("data") token = data.get("access_token") or data.get("token") token_type = data.get("token_type") if not token or not token_type: print("登录响应中未找到 Token 或 Token 类型!") return False authorization_header = f"{token_type} {token}" else: print("登录失败!") print("登录响应状态码:", login_response.status_code) exit(1) options_url = "https://api.dashboard.3dos.io/api/claim-reward" options_headers = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br, zstd", "Accept-Language": "zh-CN,zh;q=0.9", "Access-Control-Request-Headers": "authorization,cache-control,content-type,expires,pragma", "Access-Control-Request-Method": "POST", "Origin": "https://dashboard.3dos.io", "Priority": "u=1, i", "Referer": "https://dashboard.3dos.io/", "Sec-Fetch-Dest": "empty", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Site": "same-site", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" } try: options_response = client.options(options_url, headers=options_headers) except Exception as e: print(f"OPTIONS 请求失败:{e}") exit(1) # print("OPTIONS 请求响应状态码:", options_response.status_code) claim_url = "https://api.dashboard.3dos.io/api/claim-reward" claim_headers = { "Accept": "application/json, text/plain, */*", "Authorization": authorization_header, "Cache-Control": "no-cache", "Content-Type": "application/json", "Expires": "0", "Origin": "https://dashboard.3dos.io", "Pragma": "no-cache", "Priority": "u=1, i", "Referer": "https://dashboard.3dos.io/", "Sec-CH-UA": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', "Sec-CH-UA-Mobile": "?0", "Sec-CH-UA-Platform": '"Windows"', "Sec-Fetch-Dest": "empty", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Site": "same-site", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" } claim_payload = { "id": "daily-reward-api" } try: claim_response = client.post(claim_url, json=claim_payload, headers=claim_headers) except Exception as e: print(f"{email} claim-reward 请求失败:{e}") exit(1) json_response = claim_response.json() if json_response: message = json_response.get("message") if claim_response.status_code not in [200, 429]: print(f"{email} claim 报错: {message}, 状态码{claim_response.status_code}") exit(1) result = f"{email}: {message}" return result def main(): print("开始执行...") account_list = [ "jack0210_@hotmail.com|||aaaAAA111!!!", "yujieccyj01@hotmail.com|||aaaAAA111!!!", "yujieccyj02@hotmail.com|||aaaAAA111!!!", "yujieccyj03@hotmail.com|||aaaAAA111!!!", "yujieccyj04@hotmail.com|||aaaAAA111!!!", "yujieccyj05@hotmail.com|||aaaaAA111!!!", "yujieccyj06@hotmail.com|||aaaAAA111!!!", "yujieccyj07@hotmail.com|||aaaAAA111!!!", "yujieccyj08@hotmail.com|||aaaAAA111!!!", "yujieccyj09@hotmail.com|||aaaAAA111!!!", "yujieccyj10@hotmail.com|||aaaAAA111!!!", ] send_str = '' with ThreadPoolExecutor(max_workers=len(account_list)) as executor: futures = [] for account in account_list: email, password = account.split("|||") futures.append(executor.submit(daily_claim_3dos, email, password)) for future in as_completed(futures): result = future.result() if result: send_str += result + '\n' print(result) time.sleep(1) if send_str: gotify_notifier = GotifyNotifier(title='3dos daily', message=send_str, token_name='CheckAndRemind') gotify_notifier.send_message() print(result) else: print("No news found.") if __name__ == "__main__": print('开始 3dos 每日签到') if get_public_ip != '154.21.201.205': file_path = os.path.join(os.getcwd(), "daily_3dos.txt") else: file_path = os.path.join(os.getcwd(), "auto", "daily", "daily_3dos.txt") T = TaskScheduler(file_path) # 执行前读取执行时间, 判断是否到执行时间 if not T.load_start_time(): print('3dos 任务未到执行时间') exit(1) # 开始执行 main() # 执行完成后, 将执行时间 + 24 小时写入文件 T.save_start_time()