-
-
Notifications
You must be signed in to change notification settings - Fork 108
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
18 changed files
with
355 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
to do: | ||
- code refractoring |
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
to do: | ||
- code refractoring |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
https://chat.gpt.bz | ||
|
||
to do: | ||
- code refractoring |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import asyncio | ||
import websockets | ||
|
||
from json import dumps, loads | ||
|
||
async def test(): | ||
async with websockets.connect('wss://chatgpt.func.icu/conversation+ws') as wss: | ||
|
||
await wss.send(dumps(separators=(',', ':'), obj = { | ||
'content_type':'text', | ||
'engine':'chat-gpt', | ||
'parts':['hello world'], | ||
'options':{} | ||
} | ||
)) | ||
|
||
ended = None | ||
|
||
while not ended: | ||
try: | ||
response = await wss.recv() | ||
json_response = loads(response) | ||
ended = json_response.get('eof') | ||
|
||
if not ended: | ||
print(json_response['content']['parts'][0]) | ||
|
||
except websockets.ConnectionClosed: | ||
break | ||
|
||
asyncio.run(test()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
to do: | ||
- code refractoring |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
https://openprompt.co/ | ||
|
||
to do: | ||
- finish integrating email client | ||
- code refractoring |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
from requests import post, get | ||
from json import dumps | ||
#from mail import MailClient | ||
from time import sleep | ||
from re import findall | ||
|
||
html = get('https://developermail.com/mail/') | ||
print(html.cookies.get('mailboxId')) | ||
email = findall(r'mailto:(.*)">', html.text)[0] | ||
|
||
headers = { | ||
'apikey': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InVzanNtdWZ1emRjcnJjZXVobnlqIiwicm9sZSI6ImFub24iLCJpYXQiOjE2NzgyODYyMzYsImV4cCI6MTk5Mzg2MjIzNn0.2MQ9Lkh-gPqQwV08inIgqozfbYm5jdYWtf-rn-wfQ7U', | ||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', | ||
'x-client-info': '@supabase/[email protected]', | ||
} | ||
|
||
json_data = { | ||
'email' : email, | ||
'password': 'T4xyt4Yn6WWQ4NC', | ||
'data' : {}, | ||
'gotrue_meta_security': {}, | ||
} | ||
|
||
response = post('https://usjsmufuzdcrrceuhnyj.supabase.co/auth/v1/signup', headers=headers, json=json_data) | ||
print(response.json()) | ||
|
||
# email_link = None | ||
# while not email_link: | ||
# sleep(1) | ||
|
||
# mails = mailbox.getmails() | ||
# print(mails) | ||
|
||
|
||
quit() | ||
|
||
url = input("Enter the url: ") | ||
response = get(url, allow_redirects=False) | ||
|
||
# https://openprompt.co/#access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjgyMjk0ODcxLCJzdWIiOiI4NWNkNTNiNC1lZTUwLTRiMDQtOGJhNS0wNTUyNjk4ODliZDIiLCJlbWFpbCI6ImNsc2J5emdqcGhiQGJ1Z2Zvby5jb20iLCJwaG9uZSI6IiIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6ImVtYWlsIiwicHJvdmlkZXJzIjpbImVtYWlsIl19LCJ1c2VyX21ldGFkYXRhIjp7fSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJvdHAiLCJ0aW1lc3RhbXAiOjE2ODE2OTAwNzF9XSwic2Vzc2lvbl9pZCI6ImY4MTg1YTM5LTkxYzgtNGFmMy1iNzAxLTdhY2MwY2MwMGNlNSJ9.UvcTfpyIM1TdzM8ZV6UAPWfa0rgNq4AiqeD0INy6zV8&expires_in=604800&refresh_token=_Zp8uXIA2InTDKYgo8TCqA&token_type=bearer&type=signup | ||
|
||
redirect = response.headers.get('location') | ||
access_token = redirect.split('&')[0].split('=')[1] | ||
refresh_token = redirect.split('&')[2].split('=')[1] | ||
|
||
supabase_auth_token = dumps([access_token, refresh_token, None, None, None], separators=(',', ':')) | ||
print(supabase_auth_token) | ||
|
||
cookies = { | ||
'supabase-auth-token': supabase_auth_token | ||
} | ||
|
||
json_data = { | ||
'messages': [ | ||
{ | ||
'role': 'user', | ||
'content': 'how do I reverse a string in python?' | ||
} | ||
] | ||
} | ||
|
||
response = post('https://openprompt.co/api/chat2', cookies=cookies, json=json_data, stream=True) | ||
for chunk in response.iter_content(chunk_size=1024): | ||
print(chunk) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
import requests | ||
import email | ||
|
||
class MailClient: | ||
|
||
def __init__(self): | ||
self.username = None | ||
self.token = None | ||
self.raw = None | ||
self.mailids = None | ||
self.mails = None | ||
self.mail = None | ||
|
||
def create(self, force=False): | ||
headers = { | ||
'accept': 'application/json', | ||
} | ||
|
||
if self.username: | ||
pass | ||
else: | ||
self.response = requests.put( | ||
'https://www.developermail.com/api/v1/mailbox', headers=headers) | ||
self.response = self.response.json() | ||
self.username = self.response['result']['name'] | ||
self.token = self.response['result']['token'] | ||
|
||
return {'username': self.username, 'token': self.token} | ||
|
||
def destroy(self): | ||
headers = { | ||
'accept': 'application/json', | ||
'X-MailboxToken': self.token, | ||
} | ||
self.response = requests.delete( | ||
f'https://www.developermail.com/api/v1/mailbox/{self.username}', headers=headers) | ||
self.response = self.response.json() | ||
self.username = None | ||
self.token = None | ||
return self.response | ||
|
||
def newtoken(self): | ||
headers = { | ||
'accept': 'application/json', | ||
'X-MailboxToken': self.token, | ||
} | ||
self.response = requests.put( | ||
f'https://www.developermail.com/api/v1/mailbox/{self.username}/token', headers=headers) | ||
self.response = self.response.json() | ||
self.token = self.response['result']['token'] | ||
return {'username': self.username, 'token': self.token} | ||
|
||
def getmailids(self): | ||
headers = { | ||
'accept': 'application/json', | ||
'X-MailboxToken': self.token, | ||
} | ||
|
||
self.response = requests.get( | ||
f'https://www.developermail.com/api/v1/mailbox/{self.username}', headers=headers) | ||
self.response = self.response.json() | ||
self.mailids = self.response['result'] | ||
return self.mailids | ||
|
||
def getmails(self, mailids: list = None): | ||
headers = { | ||
'accept': 'application/json', | ||
'X-MailboxToken': self.token, | ||
'Content-Type': 'application/json', | ||
} | ||
|
||
if mailids is None: | ||
mailids = self.mailids | ||
|
||
data = str(mailids) | ||
|
||
self.response = requests.post( | ||
f'https://www.developermail.com/api/v1/mailbox/{self.username}/messages', headers=headers, data=data) | ||
self.response = self.response.json() | ||
self.mails = self.response['result'] | ||
return self.mails | ||
|
||
def getmail(self, mailid: str, raw=False): | ||
headers = { | ||
'accept': 'application/json', | ||
'X-MailboxToken': self.token, | ||
} | ||
self.response = requests.get( | ||
f'https://www.developermail.com/api/v1/mailbox/{self.username}/messages/{mailid}', headers=headers) | ||
self.response = self.response.json() | ||
self.mail = self.response['result'] | ||
if raw is False: | ||
self.mail = email.message_from_string(self.mail) | ||
return self.mail | ||
|
||
def delmail(self, mailid: str): | ||
headers = { | ||
'accept': 'application/json', | ||
'X-MailboxToken': self.token, | ||
} | ||
self.response = requests.delete( | ||
f'https://www.developermail.com/api/v1/mailbox/{self.username}/messages/{mailid}', headers=headers) | ||
self.response = self.response.json() | ||
return self.response | ||
|
||
|
||
client = MailClient() | ||
client.newtoken() | ||
print(client.getmails()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
import requests | ||
|
||
cookies = { | ||
'supabase-auth-token': '["eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjgyMjk1NzQyLCJzdWIiOiJlOGExOTdiNS03YTAxLTQ3MmEtODQ5My1mNGUzNTNjMzIwNWUiLCJlbWFpbCI6InFlY3RncHZhamlibGNjQGJ1Z2Zvby5jb20iLCJwaG9uZSI6IiIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6ImVtYWlsIiwicHJvdmlkZXJzIjpbImVtYWlsIl19LCJ1c2VyX21ldGFkYXRhIjp7fSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJvdHAiLCJ0aW1lc3RhbXAiOjE2ODE2OTA5NDJ9XSwic2Vzc2lvbl9pZCI6IjIwNTg5MmE5LWU5YTAtNDk2Yi1hN2FjLWEyMWVkMTkwZDA4NCJ9.o7UgHpiJMfa6W-UKCSCnAncIfeOeiHz-51sBmokg0MA","RtPKeb7KMMC9Dn2fZOfiHA",null,null,null]', | ||
} | ||
|
||
headers = { | ||
'authority': 'openprompt.co', | ||
'accept': '*/*', | ||
'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3', | ||
'content-type': 'application/json', | ||
# 'cookie': 'supabase-auth-token=%5B%22eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjgyMjkzMjQ4LCJzdWIiOiJlODQwNTZkNC0xZWJhLTQwZDktOWU1Mi1jMTc4MTUwN2VmNzgiLCJlbWFpbCI6InNia2didGJnZHB2bHB0ZUBidWdmb28uY29tIiwicGhvbmUiOiIiLCJhcHBfbWV0YWRhdGEiOnsicHJvdmlkZXIiOiJlbWFpbCIsInByb3ZpZGVycyI6WyJlbWFpbCJdfSwidXNlcl9tZXRhZGF0YSI6e30sInJvbGUiOiJhdXRoZW50aWNhdGVkIiwiYWFsIjoiYWFsMSIsImFtciI6W3sibWV0aG9kIjoib3RwIiwidGltZXN0YW1wIjoxNjgxNjg4NDQ4fV0sInNlc3Npb25faWQiOiJiNDhlMmU3NS04NzlhLTQxZmEtYjQ4MS01OWY0OTgxMzg3YWQifQ.5-3E7WvMMVkXewD1qA26Rv4OFSTT82wYUBXNGcYaYfQ%22%2C%22u5TGGMMeT3zZA0agm5HGuA%22%2Cnull%2Cnull%2Cnull%5D', | ||
'origin': 'https://openprompt.co', | ||
'referer': 'https://openprompt.co/ChatGPT', | ||
'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"', | ||
'sec-ch-ua-mobile': '?0', | ||
'sec-ch-ua-platform': '"macOS"', | ||
'sec-fetch-dest': 'empty', | ||
'sec-fetch-mode': 'cors', | ||
'sec-fetch-site': 'same-origin', | ||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', | ||
} | ||
|
||
json_data = { | ||
'messages': [ | ||
{ | ||
'role': 'user', | ||
'content': 'hello world', | ||
}, | ||
], | ||
} | ||
|
||
response = requests.post('https://openprompt.co/api/chat2', cookies=cookies, headers=headers, json=json_data, stream=True) | ||
for chunk in response.iter_content(chunk_size=1024): | ||
print(chunk) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
access_token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjgyMjk0ODcxLCJzdWIiOiI4NWNkNTNiNC1lZTUwLTRiMDQtOGJhNS0wNTUyNjk4ODliZDIiLCJlbWFpbCI6ImNsc2J5emdqcGhiQGJ1Z2Zvby5jb20iLCJwaG9uZSI6IiIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6ImVtYWlsIiwicHJvdmlkZXJzIjpbImVtYWlsIl19LCJ1c2VyX21ldGFkYXRhIjp7fSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJvdHAiLCJ0aW1lc3RhbXAiOjE2ODE2OTAwNzF9XSwic2Vzc2lvbl9pZCI6ImY4MTg1YTM5LTkxYzgtNGFmMy1iNzAxLTdhY2MwY2MwMGNlNSJ9.UvcTfpyIM1TdzM8ZV6UAPWfa0rgNq4AiqeD0INy6zV' | ||
supabase_auth_token= '%5B%22eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjgyMjk0ODcxLCJzdWIiOiI4NWNkNTNiNC1lZTUwLTRiMDQtOGJhNS0wNTUyNjk4ODliZDIiLCJlbWFpbCI6ImNsc2J5emdqcGhiQGJ1Z2Zvby5jb20iLCJwaG9uZSI6IiIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6ImVtYWlsIiwicHJvdmlkZXJzIjpbImVtYWlsIl19LCJ1c2VyX21ldGFkYXRhIjp7fSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJvdHAiLCJ0aW1lc3RhbXAiOjE2ODE2OTAwNzF9XSwic2Vzc2lvbl9pZCI6ImY4MTg1YTM5LTkxYzgtNGFmMy1iNzAxLTdhY2MwY2MwMGNlNSJ9.UvcTfpyIM1TdzM8ZV6UAPWfa0rgNq4AiqeD0INy6zV8%22%2C%22_Zp8uXIA2InTDKYgo8TCqA%22%2Cnull%2Cnull%2Cnull%5D' | ||
|
||
|
||
idk = [ | ||
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNjgyMjk0ODcxLCJzdWIiOiI4NWNkNTNiNC1lZTUwLTRiMDQtOGJhNS0wNTUyNjk4ODliZDIiLCJlbWFpbCI6ImNsc2J5emdqcGhiQGJ1Z2Zvby5jb20iLCJwaG9uZSI6IiIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6ImVtYWlsIiwicHJvdmlkZXJzIjpbImVtYWlsIl19LCJ1c2VyX21ldGFkYXRhIjp7fSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJvdHAiLCJ0aW1lc3RhbXAiOjE2ODE2OTAwNzF9XSwic2Vzc2lvbl9pZCI6ImY4MTg1YTM5LTkxYzgtNGFmMy1iNzAxLTdhY2MwY2MwMGNlNSJ9.UvcTfpyIM1TdzM8ZV6UAPWfa0rgNq4AiqeD0INy6zV8", | ||
"_Zp8uXIA2InTDKYgo8TCqA",None,None,None] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
https://www.sqlchat.ai/ | ||
to do: | ||
- code refractoring |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
import requests | ||
|
||
headers = { | ||
'authority': 'www.sqlchat.ai', | ||
'accept': '*/*', | ||
'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3', | ||
'content-type': 'text/plain;charset=UTF-8', | ||
'origin': 'https://www.sqlchat.ai', | ||
'referer': 'https://www.sqlchat.ai/', | ||
'sec-fetch-dest': 'empty', | ||
'sec-fetch-mode': 'cors', | ||
'sec-fetch-site': 'same-origin', | ||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', | ||
} | ||
|
||
data = { | ||
'messages':[ | ||
{'role':'system','content':''}, | ||
{'role':'user','content':'hello world'}, | ||
], | ||
'openAIApiConfig':{ | ||
'key':'', | ||
'endpoint':'' | ||
} | ||
} | ||
|
||
response = requests.post('https://www.sqlchat.ai/api/chat', headers=headers, json=data, stream=True) | ||
for message in response.iter_content(chunk_size=1024): | ||
print(message) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
https://chatbot.theb.ai/ | ||
to do: | ||
- code refractoring |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
from curl_cffi import requests | ||
from json import loads | ||
from re import findall | ||
from threading import Thread | ||
from queue import Queue, Empty | ||
|
||
class Completion: | ||
# experimental | ||
part1 = '{"role":"assistant","id":"chatcmpl' | ||
part2 = '"},"index":0,"finish_reason":null}]}}' | ||
regex = rf'{part1}(.*){part2}' | ||
|
||
timer = None | ||
message_queue = Queue() | ||
stream_completed = False | ||
|
||
def request(): | ||
headers = { | ||
'authority' : 'chatbot.theb.ai', | ||
'content-type': 'application/json', | ||
'origin' : 'https://chatbot.theb.ai', | ||
'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', | ||
} | ||
|
||
requests.post('https://chatbot.theb.ai/api/chat-process', headers=headers, content_callback=Completion.handle_stream_response, | ||
json = { | ||
'prompt' : 'hello world', | ||
'options': {} | ||
} | ||
) | ||
|
||
Completion.stream_completed = True | ||
|
||
@staticmethod | ||
def create(): | ||
Thread(target=Completion.request).start() | ||
|
||
while Completion.stream_completed != True or not Completion.message_queue.empty(): | ||
try: | ||
message = Completion.message_queue.get(timeout=0.01) | ||
for message in findall(Completion.regex, message): | ||
yield loads(Completion.part1 + message + Completion.part2) | ||
|
||
except Empty: | ||
pass | ||
|
||
@staticmethod | ||
def handle_stream_response(response): | ||
Completion.message_queue.put(response.decode()) | ||
|
||
def start(): | ||
for message in Completion.create(): | ||
yield message['delta'] | ||
|
||
if __name__ == '__main__': | ||
for message in start(): | ||
print(message) |