1
0
Fork 0

Merge pull request #345 from sudouser777/feature/delete_poe_account

Feature/delete poe account
This commit is contained in:
t.me/xtekky 2023-05-01 18:25:20 +01:00 committed by GitHub
commit 9c0b440b6c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 75 additions and 51 deletions

View file

@ -4,8 +4,8 @@ from gpt4free import cocalc
from gpt4free import forefront from gpt4free import forefront
from gpt4free import quora from gpt4free import quora
from gpt4free import theb from gpt4free import theb
from gpt4free import you
from gpt4free import usesless from gpt4free import usesless
from gpt4free import you
class Provider(Enum): class Provider(Enum):
@ -24,7 +24,6 @@ class Completion:
@staticmethod @staticmethod
def create(provider: Provider, prompt: str, **kwargs) -> str: def create(provider: Provider, prompt: str, **kwargs) -> str:
""" """
Invokes the given provider with given prompt and addition arguments and returns the string response Invokes the given provider with given prompt and addition arguments and returns the string response
@ -47,10 +46,10 @@ class Completion:
return Completion.__useless_service(prompt, **kwargs) return Completion.__useless_service(prompt, **kwargs)
else: else:
raise Exception('Provider not exist, Please try again') raise Exception('Provider not exist, Please try again')
@staticmethod @staticmethod
def __useless_service(prompt: str, **kwargs) -> str: def __useless_service(prompt: str, **kwargs) -> str:
return usesless.Completion.create(prompt = prompt, **kwargs) return usesless.Completion.create(prompt=prompt, **kwargs)
@staticmethod @staticmethod
def __you_service(prompt: str, **kwargs) -> str: def __you_service(prompt: str, **kwargs) -> str:

View file

@ -5,8 +5,8 @@ from typing import Generator, Optional
from uuid import uuid4 from uuid import uuid4
from fake_useragent import UserAgent from fake_useragent import UserAgent
from requests import post
from pymailtm import MailTm, Message from pymailtm import MailTm, Message
from requests import post
from tls_client import Session from tls_client import Session
from .typing import ForeFrontResponse from .typing import ForeFrontResponse
@ -43,10 +43,7 @@ class Account:
response = client.post( response = client.post(
f'https://clerk.forefront.ai/v1/client/sign_ups/{trace_token}/prepare_verification?_clerk_js_version=4.38.4', f'https://clerk.forefront.ai/v1/client/sign_ups/{trace_token}/prepare_verification?_clerk_js_version=4.38.4',
data={ data={'strategy': 'email_link', 'redirect_url': 'https://accounts.forefront.ai/sign-up/verify'},
'strategy': 'email_link',
'redirect_url': 'https://accounts.forefront.ai/sign-up/verify'
},
) )
if logging: if logging:
@ -93,14 +90,14 @@ class StreamingCompletion:
action_type='new', action_type='new',
default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default
model='gpt-4', model='gpt-4',
proxy=None proxy=None,
) -> Generator[ForeFrontResponse, None, None]: ) -> Generator[ForeFrontResponse, None, None]:
if not token: if not token:
raise Exception('Token is required!') raise Exception('Token is required!')
if not chat_id: if not chat_id:
chat_id = str(uuid4()) chat_id = str(uuid4())
proxies = { 'http': 'http://' + proxy, 'https': 'http://' + proxy } if proxy else None proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy} if proxy else None
headers = { headers = {
'authority': 'chat-server.tenant-forefront-default.knative.chi.coreweave.com', 'authority': 'chat-server.tenant-forefront-default.knative.chi.coreweave.com',
@ -168,7 +165,7 @@ class Completion:
action_type='new', action_type='new',
default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default default_persona='607e41fe-95be-497e-8e97-010a59b2e2c0', # default
model='gpt-4', model='gpt-4',
proxy=None proxy=None,
) -> ForeFrontResponse: ) -> ForeFrontResponse:
text = '' text = ''
final_response = None final_response = None
@ -179,7 +176,7 @@ class Completion:
action_type=action_type, action_type=action_type,
default_persona=default_persona, default_persona=default_persona,
model=model, model=model,
proxy=proxy proxy=proxy,
): ):
if response: if response:
final_response = response final_response = response
@ -191,4 +188,3 @@ class Completion:
raise Exception('Unable to get the response, Please try again') raise Exception('Unable to get the response, Please try again')
return final_response return final_response

View file

@ -1,4 +1,5 @@
from typing import Any, List from typing import Any, List
from pydantic import BaseModel from pydantic import BaseModel
@ -22,4 +23,4 @@ class ForeFrontResponse(BaseModel):
model: str model: str
choices: List[Choice] choices: List[Choice]
usage: Usage usage: Usage
text: str text: str

View file

@ -65,4 +65,13 @@ poe.chat('who won the football world cup most?')
# new bot creation # new bot creation
poe.create_bot('new_bot_name', prompt='You are new test bot', base_model='gpt-3.5-turbo') poe.create_bot('new_bot_name', prompt='You are new test bot', base_model='gpt-3.5-turbo')
# delete account
poe.delete_account()
```
### Deleting the Poe Account
```python
from gpt4free import quora
quora.Account.delete(token='')
``` ```

View file

@ -285,6 +285,11 @@ class Account:
cookies = open(Path(__file__).resolve().parent / 'cookies.txt', 'r').read().splitlines() cookies = open(Path(__file__).resolve().parent / 'cookies.txt', 'r').read().splitlines()
return choice(cookies) return choice(cookies)
@staticmethod
def delete(token: str, proxy: Optional[str] = None):
client = PoeClient(token, proxy=proxy)
client.delete_account()
class StreamingCompletion: class StreamingCompletion:
@staticmethod @staticmethod
@ -293,11 +298,11 @@ class StreamingCompletion:
custom_model: bool = None, custom_model: bool = None,
prompt: str = 'hello world', prompt: str = 'hello world',
token: str = '', token: str = '',
proxy: Optional[str] = None proxy: Optional[str] = None,
) -> Generator[PoeResponse, None, None]: ) -> Generator[PoeResponse, None, None]:
_model = MODELS[model] if not custom_model else custom_model _model = MODELS[model] if not custom_model else custom_model
proxies = { 'http': 'http://' + proxy, 'https': 'http://' + proxy } if proxy else False proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy} if proxy else False
client = PoeClient(token) client = PoeClient(token)
client.proxy = proxies client.proxy = proxies
@ -333,7 +338,7 @@ class Completion:
custom_model: str = None, custom_model: str = None,
prompt: str = 'hello world', prompt: str = 'hello world',
token: str = '', token: str = '',
proxy: Optional[str] = None proxy: Optional[str] = None,
) -> PoeResponse: ) -> PoeResponse:
_model = MODELS[model] if not custom_model else custom_model _model = MODELS[model] if not custom_model else custom_model
@ -454,14 +459,7 @@ class Poe:
response = chunk['text'] response = chunk['text']
return response return response
def create_bot( def create_bot(self, name: str, /, prompt: str = '', base_model: str = 'ChatGPT', description: str = '') -> None:
self,
name: str,
/,
prompt: str = '',
base_model: str = 'ChatGPT',
description: str = '',
) -> None:
if base_model not in MODELS: if base_model not in MODELS:
raise RuntimeError('Sorry, the base_model you provided does not exist. Please check and try again.') raise RuntimeError('Sorry, the base_model you provided does not exist. Please check and try again.')
@ -475,3 +473,6 @@ class Poe:
def list_bots(self) -> list: def list_bots(self) -> list:
return list(self.client.bot_names.values()) return list(self.client.bot_names.values())
def delete_account(self) -> None:
self.client.delete_account()

View file

@ -541,5 +541,11 @@ class Client:
self.get_bots() self.get_bots()
return data return data
def delete_account(self) -> None:
response = self.send_query('SettingsDeleteAccountButton_deleteAccountMutation_Mutation', {})
data = response['data']['deleteAccount']
if 'viewer' not in data:
raise RuntimeError(f'Error occurred while deleting the account, Please try again!')
load_queries() load_queries()

View file

@ -1,7 +1,10 @@
from requests import Session
from time import sleep
from json import loads from json import loads
from re import findall from re import findall
from time import sleep
from requests import Session
class Mail: class Mail:
def __init__(self) -> None: def __init__(self) -> None:
self.client = Session() self.client = Session()
@ -9,29 +12,34 @@ class Mail:
self.cookies = {'acceptcookie': 'true'} self.cookies = {'acceptcookie': 'true'}
self.cookies["ci_session"] = self.client.cookies.get_dict()["ci_session"] self.cookies["ci_session"] = self.client.cookies.get_dict()["ci_session"]
self.email = None self.email = None
def get_mail(self): def get_mail(self):
respone=self.client.post("https://etempmail.com/getEmailAddress") respone = self.client.post("https://etempmail.com/getEmailAddress")
#cookies # cookies
self.cookies["lisansimo"] = eval(respone.text)["recover_key"] self.cookies["lisansimo"] = eval(respone.text)["recover_key"]
self.email = eval(respone.text)["address"] self.email = eval(respone.text)["address"]
return self.email return self.email
def get_message(self): def get_message(self):
print("Waiting for message...") print("Waiting for message...")
while True: while True:
sleep(5) sleep(5)
respone=self.client.post("https://etempmail.com/getInbox") respone = self.client.post("https://etempmail.com/getInbox")
mail_token=loads(respone.text) mail_token = loads(respone.text)
print(self.client.cookies.get_dict()) print(self.client.cookies.get_dict())
if len(mail_token) == 1: if len(mail_token) == 1:
break break
params = {'id': '1',} params = {
self.mail_context = self.client.post("https://etempmail.com/getInbox",params=params) 'id': '1',
}
self.mail_context = self.client.post("https://etempmail.com/getInbox", params=params)
self.mail_context = eval(self.mail_context.text)[0]["body"] self.mail_context = eval(self.mail_context.text)[0]["body"]
return self.mail_context return self.mail_context
#,cookies=self.cookies
# ,cookies=self.cookies
def get_verification_code(self): def get_verification_code(self):
message = self.mail_context message = self.mail_context
code = findall(r';">(\d{6,7})</div>', message)[0] code = findall(r';">(\d{6,7})</div>', message)[0]
print(f"Verification code: {code}") print(f"Verification code: {code}")
return code return code

View file

@ -0,0 +1 @@
mutation SettingsDeleteAccountButton_deleteAccountMutation_Mutation{ deleteAccount { viewer { uid id } }}

View file

@ -20,7 +20,7 @@ class Completion:
last_msg_id = None last_msg_id = None
@staticmethod @staticmethod
def request(prompt: str, proxy: Optional[str]=None): def request(prompt: str, proxy: Optional[str] = None):
headers = { headers = {
'authority': 'chatbot.theb.ai', 'authority': 'chatbot.theb.ai',
'content-type': 'application/json', 'content-type': 'application/json',
@ -45,8 +45,10 @@ class Completion:
Completion.stream_completed = True Completion.stream_completed = True
@staticmethod @staticmethod
def create(prompt: str, proxy: Optional[str]=None) -> Generator[str, None, None]:
def create(prompt: str, proxy: Optional[str] = None) -> Generator[str, None, None]:
Completion.stream_completed = False Completion.stream_completed = False
Thread(target=Completion.request, args=[prompt, proxy]).start() Thread(target=Completion.request, args=[prompt, proxy]).start()
while not Completion.stream_completed or not Completion.message_queue.empty(): while not Completion.stream_completed or not Completion.message_queue.empty():

View file

@ -1,6 +1,7 @@
import requests
import json import json
import requests
class Completion: class Completion:
headers = { headers = {
@ -24,7 +25,7 @@ class Completion:
model: str = "gpt-3.5-turbo", model: str = "gpt-3.5-turbo",
): ):
print(parentMessageId, prompt) print(parentMessageId, prompt)
json_data = { json_data = {
"openaiKey": "", "openaiKey": "",
"prompt": prompt, "prompt": prompt,
@ -42,14 +43,14 @@ class Completion:
url = "https://ai.usesless.com/api/chat-process" url = "https://ai.usesless.com/api/chat-process"
request = requests.post(url, headers=Completion.headers, json=json_data) request = requests.post(url, headers=Completion.headers, json=json_data)
content = request.content content = request.content
response = Completion.__response_to_json(content) response = Completion.__response_to_json(content)
return response return response
@classmethod @classmethod
def __response_to_json(cls, text) -> dict: def __response_to_json(cls, text) -> dict:
text = str(text.decode("utf-8")) text = str(text.decode("utf-8"))
split_text = text.rsplit("\n", 1)[1] split_text = text.rsplit("\n", 1)[1]
to_json = json.loads(split_text) to_json = json.loads(split_text)
return to_json return to_json

View file

@ -30,12 +30,12 @@ class Completion:
include_links: bool = False, include_links: bool = False,
detailed: bool = False, detailed: bool = False,
debug: bool = False, debug: bool = False,
proxy: Optional[str] = None proxy: Optional[str] = None,
) -> PoeResponse: ) -> PoeResponse:
if chat is None: if chat is None:
chat = [] chat = []
proxies = { 'http': 'http://' + proxy, 'https': 'http://' + proxy } if proxy else {} proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy} if proxy else {}
client = Session(client_identifier='chrome_108') client = Session(client_identifier='chrome_108')
client.headers = Completion.__get_headers() client.headers = Completion.__get_headers()

View file

@ -1,6 +1,6 @@
from time import sleep from time import sleep
from gpt4free import quora from gpt4free import quora
token = quora.Account.create(proxy=None, logging=True) token = quora.Account.create(proxy=None, logging=True)
print('token', token) print('token', token)
@ -9,3 +9,5 @@ sleep(2)
for response in quora.StreamingCompletion.create(model='ChatGPT', prompt='hello world', token=token): for response in quora.StreamingCompletion.create(model='ChatGPT', prompt='hello world', token=token):
print(response.text, flush=True) print(response.text, flush=True)
quora.Account.delete(token)

View file

@ -2,4 +2,4 @@ from gpt4free import theb
for token in theb.Completion.create('hello world'): for token in theb.Completion.create('hello world'):
print(token, end='', flush=True) print(token, end='', flush=True)
print('asdsos') print('asdsos')

View file

@ -11,7 +11,6 @@ while True:
print(f"Answer: {req['text']}") print(f"Answer: {req['text']}")
message_id = req["id"] message_id = req["id"]
import gpt4free import gpt4free
message_id = "" message_id = ""
@ -20,8 +19,7 @@ while True:
if prompt == "!stop": if prompt == "!stop":
break break
req = gpt4free.Completion.create(provider = gpt4free.Provider.UseLess, req = gpt4free.Completion.create(provider=gpt4free.Provider.UseLess, prompt=prompt, parentMessageId=message_id)
prompt=prompt, parentMessageId=message_id)
print(f"Answer: {req['text']}") print(f"Answer: {req['text']}")
message_id = req["id"] message_id = req["id"]