Spaces:
Runtime error
Runtime error
import discord | |
import logging | |
import os | |
from io import BytesIO | |
from gradio_client import Client | |
import subprocess | |
# λ‘κΉ μ€μ | |
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(name)s: %(message)s', handlers=[logging.StreamHandler()]) | |
# μΈν νΈ μ€μ | |
intents = discord.Intents.default() | |
intents.message_content = True | |
# API ν΄λΌμ΄μΈνΈ μ€μ | |
api_client = Client("http://211.233.58.202:7960/") | |
# λμ€μ½λ λ΄ ν΄λμ€ | |
class MyClient(discord.Client): | |
def __init__(self, *args, **kwargs): | |
super().__init__(*args, **kwargs) | |
self.is_processing = False | |
async def on_ready(self): | |
logging.info(f'{self.user}λ‘ λ‘κ·ΈμΈλμμ΅λλ€!') | |
# web.py μ€ν | |
try: | |
subprocess.Popen(["python", "web.py"]) | |
logging.info("web.py μλ²κ° μμλμμ΅λλ€.") | |
except Exception as e: | |
logging.error(f"web.py μ€ν μ€ μ€λ₯ λ°μ: {e}") | |
# μνΈ λν κΈ°λ₯ μλ¦Ό | |
channel = self.get_channel(int(os.getenv("DISCORD_CHANNEL_ID", "123456789012345678"))) | |
await channel.send("μ λ μ΄λ―Έμ§ μμ±μ μνν μ μμΌλ©°, μμ±λ μ΄λ―Έμ§μ λν μ€λͺ μ νκΈλ‘ μ 곡νκ³ μνΈ λνλ₯Ό ν μ μμ΅λλ€. '!image <ν둬ννΈ>'λ₯Ό μ¬μ©νμ¬ μ΄λ―Έμ§λ₯Ό μμ²νμΈμ.") | |
async def on_message(self, message): | |
if message.author == self.user: | |
return | |
if message.content.startswith('!image '): | |
if self.is_processing: | |
await message.channel.send("μ΄λ―Έμ§ μμ±μ΄ μ΄λ―Έ μ§ν μ€μ λλ€. μ μλ§ κΈ°λ€λ € μ£ΌμΈμ.") | |
return | |
self.is_processing = True | |
try: | |
prompt = message.content[len('!image '):] | |
image_path, used_seed, translated_prompt = await self.generate_image(prompt) | |
user_id = message.author.id | |
await message.channel.send( | |
f"<@{user_id}> λμ΄ μμ²νμ μ΄λ―Έμ§μ λλ€.\n" | |
f"μ¬μ©λ μλ: {used_seed}\n" | |
f"λ²μλ ν둬ννΈ: {translated_prompt}", | |
file=discord.File(image_path) | |
) | |
# μ΄λ―Έμ§ μμ± ν μ€λͺ μ 곡 λ° λν | |
await initiate_conversation(prompt, message) | |
except Exception as e: | |
logging.error(f'μ΄λ―Έμ§ μμ± μ€ μ€λ₯ λ°μ: {e}') | |
await message.channel.send("μ¬μ© μμ: !image κ³ μμ΄κ° 'HAPPY WORLD'λΌκ³ μ°μ¬μ§ νμ§νμ λ€κ³ μλ€. ") | |
finally: | |
self.is_processing = False | |
async def generate_image(self, prompt): | |
if not prompt: | |
raise ValueError("Prompt is empty or None") | |
logging.debug(f"Sending request to API with prompt: {prompt}") | |
try: | |
result = api_client.predict( | |
prompt=prompt, | |
seed=123, | |
randomize_seed=False, | |
width=1024, | |
height=576, | |
guidance_scale=5, | |
num_inference_steps=28, | |
api_name="/infer_t2i" | |
) | |
logging.debug(f"API response received: {result}") | |
if isinstance(result, tuple) and len(result) == 3: | |
image_path, used_seed, translated_prompt = result | |
logging.info(f"Image generated at: {image_path}") | |
logging.info(f"Used seed: {used_seed}") | |
logging.info(f"Translated prompt: {translated_prompt}") | |
return image_path, used_seed, translated_prompt | |
else: | |
raise ValueError("Unexpected API response format") | |
except gradio_client.exceptions.AppError as e: | |
logging.error(f"Gradio App Error: {e}") | |
raise RuntimeError(f"API μλ² μ€λ₯: {str(e)}. μλ² κ΄λ¦¬μμκ² λ¬ΈμνμΈμ.") | |
except Exception as e: | |
logging.error(f'API μμ² μ€ μ€λ₯ λ°μ: {e}', exc_info=True) | |
raise RuntimeError(f"API μμ² μ€ μ€λ₯ λ°μ: {str(e)}") | |
async def initiate_conversation(prompt, message): | |
logging.debug(f'λν μμ μ€: {prompt}') | |
# μ΄λ―Έμ§ μ€λͺ μ νκΈλ‘ μμ± | |
description = "μμ±λ μ΄λ―Έμ§μ λλ€." | |
logging.debug(f'μ΄λ―Έμ§ μ€λͺ : {description}') | |
await message.channel.send(f"μ΄λ―Έμ§ μ€λͺ : {description}") | |
await continue_conversation(prompt, message) | |
async def continue_conversation(prompt, message): | |
# λν μ§μ κΈ°λ₯ | |
logging.debug(f'λν μ§μ μ€: {prompt}') | |
# κ³μ λν λ΄μ©μ λ°μ μνΈμμ©νλλ‘ κ΅¬ν | |
# λμ€μ½λ ν ν° λ° λ΄ μ€ν | |
if __name__ == "__main__": | |
discord_token = os.getenv('DISCORD_TOKEN') | |
discord_client = MyClient(intents=intents) | |
discord_client.run(discord_token) |