diff --git a/sparkytron3000.py b/sparkytron3000.py
index bcfefc0..04a8df6 100644
--- a/sparkytron3000.py
+++ b/sparkytron3000.py
@@ -875,26 +875,218 @@ async def website_experimental(ctx):
@bot.command()
async def website(ctx):
- def website_uploader():
- response = subprocess.run(["python", "website_image_gen.py"], capture_output=True, check=True)
+ async def delete_local_pngs(local_folder):
+ for filename in os.listdir(local_folder):
+ if ".png" in filename:
+ os.remove(local_folder + filename)
+
+ async def delete_ftp_pngs(server_folder):
+ with FTP(ftp_server) as ftp:
+ ftp.login(ftp_username, ftp_password)
+ ftp.cwd(server_folder)
+ file_list = ftp.nlst()
+ for filename in file_list:
+ if ".png" in filename:
+ print("Deleting", filename)
+ ftp.delete(filename)
+
+ async def extract_image_tags(code):
+ count = code.count("") + index1 + 1
+ img_tag = code[index1:index2]
+ tags.append(img_tag)
+ code = code[index2:]
+ return tags
+
+ async def extract_image_alt_text(tags):
+ alt_texts = []
+ for tag in tags:
+ index1 = tag.find("alt") + 5
+ index2 = tag[index1:].find("\"") + index1
+ alt_text = tag[index1:index2]
+ alt_texts.append(alt_text)
+ return alt_texts
+
+ async def generate_images(local_folder, image_list):
+ file_list = []
+ for image in image_list:
+ filename = image.replace(" ", "").lower() + ".png"
+ url = STABLE_DIFFUSION_URL
+ payload = {"prompt": image,"steps": 25}
+ response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload)
+ r = response.json()
+ for i in r['images']:
+ image = Image.open(io.BytesIO(base64.b64decode(i.split(",",1)[0])))
+ png_payload = {"image": "data:image/png;base64," + i}
+ response2 = requests.post(url=f'{url}/sdapi/v1/png-info', json=png_payload)
+ pnginfo = PngImagePlugin.PngInfo()
+ pnginfo.add_text("parameters", response2.json().get("info"))
+ image.save(local_folder + filename, pnginfo=pnginfo)
+ file_list.append(filename)
+ return file_list
+
+ async def add_image_filenames(code, file_list):
+ for filename in file_list:
+ code = code.replace("src=\"\"", "src=\""+ filename + "\"", 1)
+ return code
+
+ async def upload_html_and_imgs(local_folder, server_folder):
+ with FTP(ftp_server) as ftp:
+ ftp.login(ftp_username, ftp_password)
+ ftp.cwd(server_folder)
+ for filename in os.listdir(local_folder):
+ if ".png" in filename:
+ ftp.storbinary("STOR " + filename, open(local_folder + filename, "rb"))
+ #explicitly upload html files last!
+ for filename in os.listdir(local_folder):
+ if ".html" in filename:
+ ftp.storbinary("STOR " + filename, open(local_folder + filename, "rb"))
+
+ async def upload_archived_website(server_archive_folder, local_archive_folder):
+ with FTP(ftp_server) as ftp:
+ ftp.login(ftp_username, ftp_password)
+ for foldername in os.listdir(local_archive_folder):
+ ftp.cwd(server_archive_folder)
+ if "archived.txt" not in os.listdir(local_archive_folder +foldername):
+ ftp.mkd(foldername)
+ ftp.cwd(server_archive_folder + foldername)
+ for filename in os.listdir(local_archive_folder +foldername):
+ if ".png" in filename:
+ ftp.storbinary("STOR " + filename, open(local_archive_folder + foldername + "/" + filename, "rb"))
+ print("Uploaded " + local_archive_folder + foldername + "/" + filename)
+ #explicitly upload html files last!
+ for filename in os.listdir(local_archive_folder +foldername):
+ if ".html" in filename:
+ ftp.storbinary("STOR " + filename, open(local_archive_folder + foldername + "/" + filename, "rb"))
+ print("Uploaded " + local_archive_folder + foldername + "/" + filename)
+ with open(local_archive_folder + foldername + "/" + "archived.txt","w") as f:
+ f.write("True")
+ f.close()
+
+ async def generate_website_archive_html(server_archive_folder):
+ html1 = '''
+
+
+
This is a list of saved websites that AI generated.
+This webpage is currently being generated. The page will refresh once it is complete. Please be patient.
") - await upload_ftp(filename, server_folder, "index.html") + await upload_ftp(working_file, server_folder, "index.html") topic = ctx.message.content.split(" ", maxsplit=1)[1] prompt = "Generate a webpage using html and inline css. The webpage topic should be " + topic + ". Feel free to add image tags with alt text. Leave the image source blank. The images will be added later." - answer = await answer_question(prompt) - with open(filename, "w") as f: - f.write(answer) - uploader_thread = threading.Thread(target=website_uploader, daemon=True) - uploader_thread.start() - print("Started Uploader Thread") - await ctx.send("Generating images and uploading website, this will take some time! https://phixxy.com/ai-webpage/") + code = await answer_question(prompt) + + + await delete_local_pngs(local_folder) + await delete_ftp_pngs(server_folder) + + tags = await extract_image_tags(code) + alt_texts = await extract_image_alt_text(tags) + file_list = await generate_images(local_folder, alt_texts) + code = await add_image_filenames(code, file_list) + + with open(working_file, 'w') as f: + f.write(code) + f.close() + + await upload_html_and_imgs(local_folder, server_folder) + await upload_archived_website(server_archive_folder, local_archive_folder) + await generate_website_archive_html(server_archive_folder) + + + + await ctx.send("Finished https://phixxy.com/ai-webpage/") except openai.error.APIConnectionError as error: print(error) await ctx.send("Failed, Try again.") @@ -941,7 +1133,6 @@ async def draw(ctx): try: response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload) r = response.json() - print('images') for i in r['images']: image = Image.open(io.BytesIO(base64.b64decode(i.split(",",1)[0]))) png_payload = {"image": "data:image/png;base64," + i}