diff options
Diffstat (limited to 'g4f/.v1/gpt4free/usesless/__init__.py')
-rw-r--r-- | g4f/.v1/gpt4free/usesless/__init__.py | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/g4f/.v1/gpt4free/usesless/__init__.py b/g4f/.v1/gpt4free/usesless/__init__.py new file mode 100644 index 00000000..00f7f75d --- /dev/null +++ b/g4f/.v1/gpt4free/usesless/__init__.py @@ -0,0 +1,158 @@ +import string +import time +import re +import json +import requests +import fake_useragent +import random +from password_generator import PasswordGenerator + +from .utils import create_email, check_email + + +class Account: + @staticmethod + def create(logging: bool = False): + is_custom_domain = input( + "Do you want to use your custom domain name for temporary email? [Y/n]: " + ).upper() + + if is_custom_domain == "Y": + mail_address = create_email(custom_domain=True, logging=logging) + elif is_custom_domain == "N": + mail_address = create_email(custom_domain=False, logging=logging) + else: + print("Please, enter either Y or N") + return + + name = string.ascii_lowercase + string.digits + username = "".join(random.choice(name) for i in range(20)) + + pwo = PasswordGenerator() + pwo.minlen = 8 + password = pwo.generate() + + session = requests.Session() + + register_url = "https://ai.usesless.com/api/cms/auth/local/register" + register_json = { + "username": username, + "password": password, + "email": mail_address, + } + headers = { + "authority": "ai.usesless.com", + "accept": "application/json, text/plain, */*", + "accept-language": "en-US,en;q=0.5", + "cache-control": "no-cache", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-origin", + "user-agent": fake_useragent.UserAgent().random, + } + register = session.post(register_url, json=register_json, headers=headers) + if logging: + if register.status_code == 200: + print("Registered successfully") + else: + print(register.status_code) + print(register.json()) + print("There was a problem with account registration, try again") + + if register.status_code != 200: + quit() + + while True: + time.sleep(5) + messages = check_email(mail=mail_address, logging=logging) + + # Check if method `message_list()` didn't return None or empty list. + if not messages or len(messages) == 0: + # If it returned None or empty list sleep for 5 seconds to wait for new message. + continue + + message_text = messages[0]["content"] + verification_url = re.findall( + r"http:\/\/ai\.usesless\.com\/api\/cms\/auth\/email-confirmation\?confirmation=\w.+\w\w", + message_text, + )[0] + if verification_url: + break + + session.get(verification_url) + login_json = {"identifier": mail_address, "password": password} + login_request = session.post( + url="https://ai.usesless.com/api/cms/auth/local", json=login_json + ) + + token = login_request.json()["jwt"] + if logging and token: + print(f"Token: {token}") + + with open("account.json", "w") as file: + json.dump({"email": mail_address, "token": token}, file) + if logging: + print( + "\nNew account credentials has been successfully saved in 'account.json' file" + ) + + return token + + +class Completion: + @staticmethod + def create( + token: str, + systemMessage: str = "You are a helpful assistant", + prompt: str = "", + parentMessageId: str = "", + presence_penalty: float = 1, + temperature: float = 1, + model: str = "gpt-3.5-turbo", + ): + headers = { + "authority": "ai.usesless.com", + "accept": "application/json, text/plain, */*", + "accept-language": "en-US,en;q=0.5", + "cache-control": "no-cache", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-origin", + "user-agent": fake_useragent.UserAgent().random, + "Authorization": f"Bearer {token}", + } + + json_data = { + "openaiKey": "", + "prompt": prompt, + "options": { + "parentMessageId": parentMessageId, + "systemMessage": systemMessage, + "completionParams": { + "presence_penalty": presence_penalty, + "temperature": temperature, + "model": model, + }, + }, + } + + url = "https://ai.usesless.com/api/chat-process" + request = requests.post(url, headers=headers, json=json_data) + request.encoding = request.apparent_encoding + content = request.content + + response = Completion.__response_to_json(content) + return response + + + @classmethod + def __response_to_json(cls, text) -> str: + text = str(text.decode("utf-8")) + + split_text = text.rsplit("\n", 1) + if len(split_text) > 1: + to_json = json.loads(split_text[1]) + return to_json + else: + return None + |