Spaces:
Running
Running
import discord | |
from discord import app_commands | |
import os | |
import requests | |
import asyncio | |
import aiohttp # Use aiohttp for asynchronous HTTP requests | |
import gradio as gr # Import Gradio | |
import google.generativeai as genai | |
from io import BytesIO | |
# --- Environment Variables & Setup --- | |
DISCORD_BOT_TOKEN = os.getenv("DISCORD_BOT_TOKEN") | |
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY") | |
# --- Discord Bot Setup --- | |
intents = discord.Intents.default() | |
client = discord.Client(intents=intents) | |
tree = app_commands.CommandTree(client) | |
if not DISCORD_BOT_TOKEN or not GEMINI_API_KEY: | |
raise ValueError("Both DISCORD_BOT_TOKEN and GEMINI_API_KEY must be set.") | |
async def generate_command( | |
interaction: discord.Interaction, | |
prompt: str, | |
img_count:int, | |
aspect_ratio: app_commands.Choice[str], | |
): | |
genai.configure(api_key=GEMINI_API_KEY) | |
imagen = genai.ImageGenerationModel("imagen-3.0-generate-001") | |
result = imagen.generate_images( | |
prompt=prompt, | |
number_of_images=img_count, | |
safety_filter_level="block_only_high", | |
person_generation="allow_adult", | |
aspect_ratio=aspect_ratio, | |
) | |
files = [] | |
for i, image in enumerate(result.generated_images): | |
# Assuming `image` is a byte array or binary stream of the image | |
image_file = BytesIO(image) # Convert to BytesIO | |
files.append(discord.File(fp=image_file, filename=f"image_{i+1}.png")) | |
# Send images to Discord | |
await interaction.followup.send(content=f"Here are your {img_count} images for prompt: `{prompt}`", files=files) | |
async def on_ready(): | |
await tree.sync() | |
print("Bot is ready!") | |
client.event(on_ready) | |
# --- Gradio Interface --- | |
def echo_text(text): | |
return text | |
def run_gradio(): | |
gr.Interface( | |
fn=echo_text, | |
inputs="text", | |
outputs="text", | |
live=False, | |
title="Minimal Gradio Interface", | |
).launch(server_name="0.0.0.0", server_port=7860, share=False, show_error=True) | |
async def main(): | |
bot_task = asyncio.create_task(client.start(DISCORD_BOT_TOKEN)) | |
gradio_task = asyncio.to_thread(run_gradio) | |
await asyncio.gather(bot_task, gradio_task) | |
if __name__ == "__main__": | |
asyncio.run(main()) | |