Spaces:
Sleeping
Sleeping
File size: 3,595 Bytes
700b1d7 c01a950 dda26c7 c139e5d 700b1d7 c139e5d 700b1d7 c139e5d 700b1d7 c139e5d 700b1d7 c01a950 c139e5d 700b1d7 c01a950 c139e5d dda26c7 c139e5d dda26c7 c139e5d 700b1d7 c139e5d 700b1d7 c139e5d 700b1d7 c139e5d 700b1d7 dda26c7 c139e5d 700b1d7 c139e5d 700b1d7 c139e5d c01a950 c139e5d |
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 |
import discord
from discord import app_commands
import os
import requests
import asyncio
from threading import Thread
# NOTE: This example requires the "intents" extra to be installed.
# By default, discord.py does not install it.
# To install it, run the following command in your terminal:
# python -m pip install -U discord.py[intents]
# --- Environment Variables & Setup ---
DISCORD_BOT_TOKEN = os.getenv("DISCORD_BOT_TOKEN")
GLIF_API_TOKEN = os.getenv("GLIF_API_TOKEN")
GLIF_API_URL = "https://simple-api.glif.app"
# Check if tokens are set
if not DISCORD_BOT_TOKEN or not GLIF_API_TOKEN:
raise ValueError(
"Both DISCORD_BOT_TOKEN and GLIF_API_TOKEN must be set as environment variables."
)
# --- Discord Bot Setup ---
intents = discord.Intents.default()
# intents.message_content = True # If you need message content intent in the future
client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)
# --- GLIF API Interaction ---
def generate_image(prompt, aspect_ratio):
payload = {
"id": "cm3ugmzv2002gnckiosrwk6xi", # Your GLIF model ID
"inputs": [prompt, aspect_ratio],
}
headers = {"Authorization": f"Bearer {GLIF_API_TOKEN}"}
response = requests.post(GLIF_API_URL, json=payload, headers=headers)
if response.status_code == 200:
response_data = response.json()
if "output" in response_data:
return response_data["output"]
elif "error" in response_data:
return f"Error: {response_data['error']}"
else:
return f"API request failed with status code: {response.status_code}"
# --- Discord Slash Commands ---
@tree.command(
name="generate", description="Generates an image based on a text prompt"
)
@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="4:5 (Portrait)", value="4:5"),
app_commands.Choice(name="5:4 (Landscape)", value="5:4"),
app_commands.Choice(name="3:4 (Portrait)", value="3:4"),
app_commands.Choice(name="4:3 (Landscape)", value="4:3"),
]
)
async def generate_command(
interaction: discord.Interaction,
prompt: str,
aspect_ratio: app_commands.Choice[str],
):
"""Generates an image based on the user's prompt and aspect ratio."""
await interaction.response.defer()
try:
image_url = generate_image(prompt, aspect_ratio.value)
if image_url.startswith("http"):
await interaction.followup.send(
f"Here's your generated image based on the prompt '{prompt}' with aspect ratio {aspect_ratio.name}:\n{image_url}"
)
else:
await interaction.followup.send(
f"Sorry, I couldn't generate an image. {image_url}"
)
except Exception as e:
await interaction.followup.send(f"An error occurred: {e}")
@tree.command(name="hello", description="Says hello!")
async def hello_command(interaction):
await interaction.response.send_message("Hello there!")
# --- Bot Initialization and Event Loop ---
async def start_bot():
await client.start(DISCORD_BOT_TOKEN)
async def on_ready():
await tree.sync()
print("Bot is ready!")
client.event(on_ready)
def run_bot():
asyncio.run(start_bot())
if __name__ == "__main__":
# Run the bot in a separate thread
bot_thread = Thread(target=run_bot)
bot_thread.start() |