File size: 4,825 Bytes
700b1d7
 
c01a950
c18c359
6fb9e78
c18c359
 
6ffb5a2
6fb9e78
 
e7bfcfa
6fb9e78
dae578e
 
865b85e
6fb9e78
baaab55
c139e5d
6fb9e78
700b1d7
 
 
c01a950
c18c359
5e54fe4
af9bb44
 
b025069
35c3d12
3f11bbc
baaab55
5e54fe4
3f11bbc
6fb9e78
3f11bbc
4f29568
 
 
 
baaab55
4f29568
 
dae578e
 
 
d0756ed
35c3d12
d0756ed
3686e02
dae578e
9272e30
dae578e
2d8e4e0
3c42294
24f0d39
4f29568
2f46363
4f29568
 
2f46363
4f29568
 
4def46e
904fccb
6fb9e78
c18c359
baaab55
6fb9e78
 
 
 
 
a291ed6
 
 
 
6fb9e78
 
 
 
 
 
5e54fe4
6fb9e78
c3bfb7c
baaab55
 
5e54fe4
b0d3fa7
 
 
 
 
 
 
 
 
 
 
d3c6432
b0d3fa7
 
c0bb1cd
700b1d7
c18c359
7011453
 
c18c359
dda26c7
7011453
700b1d7
 
c18c359
7011453
 
c18c359
baaab55
 
 
 
c18c359
baaab55
 
 
 
 
 
 
 
 
c18c359
baaab55
6fb9e78
baaab55
 
 
 
7011453
c18c359
6fb9e78
c0bb1cd
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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

# --- Environment Variables & Setup ---
DISCORD_BOT_TOKEN = os.getenv("DISCORD_BOT_TOKEN")
GLIF_API_TOKEN = os.getenv("GLIF_API_TOKEN0")
GLIF_API_URL = "https://simple-api.glif.app"
glif_token_id = 0
glif_tokens_tried = 0
no_of_accounts = 11
if not DISCORD_BOT_TOKEN or not GLIF_API_TOKEN:
    raise ValueError("Both DISCORD_BOT_TOKEN and GLIF_API_TOKEN must be set.")

# --- Discord Bot Setup ---
intents = discord.Intents.default()
client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)


async def generate_image_async(prompt, aspect_ratio, realism):
    global glif_token_id
    global GLIF_API_TOKEN
    global glif_tokens_tried
    global no_of_accounts
    payload = {
        "id": "cm3ugmzv2002gnckiosrwk6xi",
        "inputs": [prompt, aspect_ratio, str(realism).lower()],
    }
    headers = {"Authorization": f"Bearer {GLIF_API_TOKEN}"}

    async with aiohttp.ClientSession() as session:
        try:
            async with session.post(
                GLIF_API_URL, json=payload, headers=headers, timeout=15
            ) as response:
                response.raise_for_status()
                response_data = await response.json()
                if "error" in response_data:
                    if 'error 429' in response_data['error']:
                        if glif_tokens_tried<no_of_accounts:
                            glif_token_id = (glif_token_id+1)%no_of_accounts
                            glif_tokens_tried+=1
                            GLIF_API_TOKEN = os.getenv(f"GLIF_API_TOKEN{glif_token_id}")
                            response_data = await generate_image_async(prompt, aspect_ratio, realism)
                            glif_tokens_tried = 0
                            return response_data
                        response_data = "No credits available"
                    return response_data
                elif "output" in response_data:
                    return f"prompt:{response_data['inputs']['Prompt']}\noutput:{response_data['output']}"
                else:
                    return "Error: Unexpected response from server"

        except asyncio.TimeoutError:
            return "Error: API request timed out."
        except aiohttp.ClientError as e:
            return f"API request failed: {e}"
        except Exception as e:
            return f"Exception:{e}" 


@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="3:4", value="3:4"),
        app_commands.Choice(name="4:3", value="4:3"),
        app_commands.Choice(name="9:21", value="9:21"),
        app_commands.Choice(name="21:9", value="21:9"),
    ]
)
async def generate_command(
    interaction: discord.Interaction,
    prompt: str,
    aspect_ratio: app_commands.Choice[str],
    realism:bool,
):
    try:
        await interaction.response.defer()

        image_url_or_error = await generate_image_async(prompt, aspect_ratio.value, realism)
        # await interaction.response.send_message(f"Error:{image_url_or_error}")
        if image_url_or_error:
        # if image_url_or_error.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_or_error}"
                f"{image_url_or_error}"
            )
        else:
            await interaction.followup.send(
                f"Sorry, I couldn't generate an image"
            )
    except Exception as e:
        await interaction.followup.send(f"Error")


@tree.command(name="hello", description="Says hello!")
async def hello_command(interaction):
    await interaction.response.send_message("Hello there!")


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)


# --- Main ---
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())