File size: 3,287 Bytes
e0fa04b
 
 
 
 
 
 
bb04558
 
5bd4d70
5633cd6
cbec1bb
e0fa04b
 
bb04558
e0fa04b
 
 
 
 
15d0115
 
 
bb04558
 
 
778ded8
 
 
bb04558
 
 
 
 
f51f1c6
1ce3dab
 
 
8ad5407
 
 
c5802f0
a8c126e
c57b527
c5802f0
 
 
 
a8c126e
 
 
 
c5802f0
8ad5407
a8c126e
8ad5407
a8c126e
8ad5407
 
a8c126e
 
8ad5407
 
c5802f0
8ad5407
 
 
 
02f58c6
a063c0b
 
15d0115
1ce3dab
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
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
import base64
from typing import List
# --- 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)

genai.configure(api_key=GEMINI_API_KEY)
model = genai.GenerativeModel("gemini-2.0-flash-exp")

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!")

async def generate_command(
    interaction: discord.Interaction,
    prompt: str,
):
    try:
        await interaction.response.defer()
        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())