diff --git a/chatgpt/ChatService.py b/chatgpt/ChatService.py index cd3f23b..c022d9e 100644 --- a/chatgpt/ChatService.py +++ b/chatgpt/ChatService.py @@ -10,7 +10,7 @@ from starlette.concurrency import run_in_threadpool from api.files import get_image_size, get_file_extension, determine_file_use_case from api.models import model_proxy from chatgpt.chatFormat import api_messages_to_chat, stream_response, wss_stream_response, format_not_stream_response -from chatgpt.proofofWork import calc_proof_token, chat_requirements_body +from chatgpt.proofofWork import calc_proof_token, chat_requirements_body, get_config from utils.Client import Client from utils.Logger import Logger from utils.config import proxy_url_list, chatgpt_base_url_list, arkose_token_url_list, history_disabled @@ -64,7 +64,8 @@ class ChatService: if self.access_token: headers['Authorization'] = f'Bearer {self.access_token}' try: - data = chat_requirements_body(self.user_agent) + config = get_config(self.user_agent) + data = chat_requirements_body(config) r = await self.s.post(url, headers=headers, json=data) if r.status_code == 200: resp = r.json() @@ -103,7 +104,7 @@ class ChatService: if proofofwork_required: proofofwork_seed = proofofwork.get("seed") proofofwork_diff = proofofwork.get("difficulty") - self.proof_token = await run_in_threadpool(calc_proof_token, proofofwork_seed, proofofwork_diff, self.user_agent) + self.proof_token = await run_in_threadpool(calc_proof_token, proofofwork_seed, proofofwork_diff, config) turnstile_required = turnstile.get('required') if turnstile_required: diff --git a/chatgpt/proofofWork.py b/chatgpt/proofofWork.py index b932532..d7d4caf 100644 --- a/chatgpt/proofofWork.py +++ b/chatgpt/proofofWork.py @@ -20,41 +20,34 @@ def get_config(user_agent): random.seed(int(time.time() * 1e9)) core = random.choice(cores) screen = random.choice(screens) - return [core + screen, get_parse_time(), 4294705152, 2, user_agent] + config = [core + screen, get_parse_time(), 4294705152, 0, user_agent] + config += [ + "https://cdn.oaistatic.com/_next/static/chunks/pages/_app-6179027f2701f350.js?dpl=61795df7b34494cdf55bd45e3973183b0a174e5b", + "dpl=61795df7b34494cdf55bd45e3973183b0a174e5b", + ] + config += ["en-US", "en-US,en"] + return config -def calc_proof_token(seed, diff, user_agent): - if seed in answers: - return answers[seed] - - config = get_config(user_agent) - diffLen = len(diff) // 2 - +def calc_proof_token(seed, diff, config): + diff_len = len(diff) // 2 for i in range(1000000): config[3] = i - json_data = json.dumps(config).encode() - base = base64.b64encode(json_data).decode() + json_data = json.dumps(config, separators=(',', ':'), ensure_ascii=False) + base = base64.b64encode(json_data.encode()).decode() hasher = hashlib.sha3_512() hasher.update((seed + base).encode()) hash_value = hasher.digest() - if hash_value[:diffLen].hex() <= diff: + if hash_value[:diff_len].hex() <= diff: result = "gAAAAAB" + base - answers[seed] = result return result return "gAAAAABwQ8Lk5FbGpA2NcR9dShT6gYjU7VxZ4D" + base64.b64encode(f'"{seed}"'.encode()).decode() -def chat_requirements_body(user_agent): - item_list = get_config(user_agent) - item_list += [ - "https://cdn.oaistatic.com/_next/static/MukSHk9CtBFQqnH15__S9/_ssgManifest.js?dpl=6e44e4574f20cd7debafd92d9cf530cfaeb484b0", - "dpl=6e44e4574f20cd7debafd92d9cf530cfaeb484b0", - "en-US", - "en-US,en" - ] - json_data = json.dumps(item_list).encode() +def chat_requirements_body(config): + json_data = json.dumps(config).encode() base = base64.b64encode(json_data).decode() retObj = {'p': 'gAAAAAC' + base} return retObj