Spaces:
Running
Running
File size: 3,687 Bytes
e0fa04b bb04558 5bd4d70 e0fa04b bb04558 e0fa04b bb04558 778ded8 bb04558 f7da1a2 bb04558 f7da1a2 bb04558 f51f1c6 f7da1a2 1ce3dab 8ad5407 c5802f0 a8c126e c57b527 c5802f0 a8c126e c5802f0 8ad5407 a8c126e 8ad5407 a8c126e 8ad5407 a8c126e 8ad5407 c5802f0 8ad5407 a063c0b 15d0115 f7da1a2 d7eef58 e0fa04b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
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
import PIL.Image
# --- 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.")
@tree.command(name="hello", description="Says hello!")
async def hello_command(interaction):
await interaction.response.send_message("Hello there!")
@tree.command(name="gemini", description="chat with gemini")
# @app_commands.choices(
# aspect_ratio=[
# app_commands.Choice(name="1:1 (Square)", value="1:1"),
# app_commands.Choice(name="9:16 (Vertical)", value="9:16"),
# app_commands.Choice(name="16:9 (Horizontal)", value="16:9"),
# app_commands.Choice(name="3:4", value="3:4"),
# app_commands.Choice(name="4:3", value="4:3"),
# ]
# )
async def generate_command(
interaction: discord.Interaction,
prompt: str,
# img_count: int,
# aspect_ratio: app_commands.Choice[str],
):
try:
await interaction.response.defer() # Defer the interaction
genai.configure(api_key=GEMINI_API_KEY)
model = genai.GenerativeModel("gemini-2.0-flash-exp")
response = model.generate_content(prompt, stream=True)
current_message = None # Initialize outside the loop to keep track of current message
current_message_content = ""
for part in response:
text_chunk = part.text
if len(current_message_content) + len(text_chunk) <= 2000:
current_message_content += text_chunk
if current_message:
await current_message.edit(content=current_message_content)
else:
current_message = await interaction.followup.send(content=current_message_content)
else:
# Send the current message
if current_message:
await current_message.edit(content=current_message_content)
else:
await interaction.followup.send(content=current_message_content)
current_message_content = text_chunk # Start new message with the current chunk
current_message = await interaction.followup.send(content=current_message_content)
# Send any remaining content
if current_message_content:
if current_message:
await current_message.edit(content=current_message_content)
else:
await interaction.followup.send(content=current_message_content)
except Exception as e:
print(e)
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())
|