From 412267a1eaa6566b04ed31d9bc3c6c67b18a3577 Mon Sep 17 00:00:00 2001 From: snipe_blaze <72265661+notsniped@users.noreply.github.com> Date: Sun, 28 May 2023 12:56:42 +0530 Subject: [PATCH 1/4] Add `/generate_image` command to let users generate images using DALL-E modal --- cogs/utils.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/cogs/utils.py b/cogs/utils.py index fa4365eb..3feeef6e 100644 --- a/cogs/utils.py +++ b/cogs/utils.py @@ -143,6 +143,34 @@ async def chatgpt(self, ctx: ApplicationContext, message: str): localembed.set_author(name="ChatGPT", icon_url="https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/ChatGPT_logo.svg/1200px-ChatGPT_logo.svg.png") localembed.set_footer(text="Powered by OpenAI") await ctx.respond(embed=localembed) + + @commands.slash_command( + name="generate_image", + description="Generate an image of your choice using the DALL-E modal." + ) + @option(name="prompt", description="What image do you want the bot to generate?", type=str) + @commands.cooldown(1, 10, commands.BucketType.user) + async def generate_image(self, ctx: ApplicationContext, prompt: str): + await ctx.defer() + try: + response = openai.Completion.create( + engine="davinci", + prompt=prompt, + max_tokens=1024, + n=1, + stop=None, + temperature=0.5, + ) + generated_image_url = response.choices[0].text + except openai.error.RateLimitError: return await ctx.respond("The OpenAI API is currently being rate-limited. Try again after some time.", ephemeral=True) + except openai.error.ServiceUnavailableError: return await ctx.respond("The ChatGPT service is currently unavailable.\nTry again after some time, or check it's status at https://status.openai.com", ephemeral=True) + except openai.error.APIError: return await ctx.respond("ChatGPT encountered an internal error. Please try again.", ephemeral=True) + except openai.error.Timeout: return await ctx.respond("Your request timed out. Please try again, or wait for a while.", ephemeral=True) + localembed = discord.Embed(title="Here's an image generated using your prompt.", color=discord.Color.random()) + localembed.set_image(url=generated_image_url) + localembed.set_author(name="DALL-E", icon_url="https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/ChatGPT_logo.svg/1200px-ChatGPT_logo.svg.png") + localembed.set_footer(text="Powered by OpenAI") + await ctx.respond(embed=localembed) # Cog Initialization def setup(bot): bot.add_cog(Utils(bot)) From d0a99294fdcf455230b846d868b5002a9e9edf75 Mon Sep 17 00:00:00 2001 From: snipe_blaze <72265661+notsniped@users.noreply.github.com> Date: Sun, 28 May 2023 12:58:31 +0530 Subject: [PATCH 2/4] Add `/generate_image` command to commands db --- config/commands.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/config/commands.json b/config/commands.json index ee50592c..ab086432 100644 --- a/config/commands.json +++ b/config/commands.json @@ -698,5 +698,15 @@ "usable_by": "everyone", "disabled": false, "bugged": false + }, + "generate_image": { + "name": "Image Generation", + "description": "Generate an image of your choice using the DALL-E modal.", + "type": "general utilities", + "cooldown": 10, + "args": ["prompt"], + "usable_by": "everyone", + "disabled": false, + "bugged": false } } From a2e8b120cd2d1a82e33d9b99032717fc8604170a Mon Sep 17 00:00:00 2001 From: snipe_blaze <72265661+notsniped@users.noreply.github.com> Date: Sun, 28 May 2023 15:48:51 +0530 Subject: [PATCH 3/4] Replace Davinci AI modal with actual DALL-E modal So basically when I tested it, instead of providing me with the generated image link of a banana, it provided me with extremely detailed information on the Linux kernel --- cogs/utils.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/cogs/utils.py b/cogs/utils.py index 3feeef6e..469b2d73 100644 --- a/cogs/utils.py +++ b/cogs/utils.py @@ -153,15 +153,13 @@ async def chatgpt(self, ctx: ApplicationContext, message: str): async def generate_image(self, ctx: ApplicationContext, prompt: str): await ctx.defer() try: - response = openai.Completion.create( - engine="davinci", + response = openai.Image.create( prompt=prompt, - max_tokens=1024, n=1, - stop=None, - temperature=0.5, + size="512x512" ) - generated_image_url = response.choices[0].text + generated_image_url = response['data'][0]['url'] + print(generated_image_url) except openai.error.RateLimitError: return await ctx.respond("The OpenAI API is currently being rate-limited. Try again after some time.", ephemeral=True) except openai.error.ServiceUnavailableError: return await ctx.respond("The ChatGPT service is currently unavailable.\nTry again after some time, or check it's status at https://status.openai.com", ephemeral=True) except openai.error.APIError: return await ctx.respond("ChatGPT encountered an internal error. Please try again.", ephemeral=True) From 9d3ba4fc16b84d66041c87ac104c30c03f3abde6 Mon Sep 17 00:00:00 2001 From: snipe_blaze <72265661+notsniped@users.noreply.github.com> Date: Sun, 28 May 2023 18:22:18 +0530 Subject: [PATCH 4/4] Remove generated image url logging The logging was initially added for testing purposes. Now it has been removed, as it is not needed. --- cogs/utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cogs/utils.py b/cogs/utils.py index 469b2d73..f34ef640 100644 --- a/cogs/utils.py +++ b/cogs/utils.py @@ -159,7 +159,6 @@ async def generate_image(self, ctx: ApplicationContext, prompt: str): size="512x512" ) generated_image_url = response['data'][0]['url'] - print(generated_image_url) except openai.error.RateLimitError: return await ctx.respond("The OpenAI API is currently being rate-limited. Try again after some time.", ephemeral=True) except openai.error.ServiceUnavailableError: return await ctx.respond("The ChatGPT service is currently unavailable.\nTry again after some time, or check it's status at https://status.openai.com", ephemeral=True) except openai.error.APIError: return await ctx.respond("ChatGPT encountered an internal error. Please try again.", ephemeral=True)