Spaces:
Runtime error
Runtime error
# img_bot.py | |
import discord, os, io, asyncio, logging, requests, replicate | |
# ββ νμ νκ²½ λ³μ ββββββββββββββββββββββββββββββββββββββββ | |
TOKEN = os.getenv("DISCORD_TOKEN") # λμ€μ½λ λ΄ ν ν° | |
CHANNEL_ID = int(os.getenv("DISCORD_CHANNEL_ID")) # λ£κ³ μλ΅ν μ±λ | |
REPL_TOKEN = (os.getenv("OPENAI_API_KEY") or "").strip()# Replicate ν ν° (κ°μ λ³μ μ¬μ©) | |
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
MODEL = ( | |
"bytedance/sdxl-lightning-4step:" | |
"6f7a773af6fc3e8de9d5a3c00be77c17308914bf67772726aff83496ba1e3bbe" | |
) | |
logging.basicConfig(level=logging.INFO, | |
format="%(asctime)s [%(levelname)s] %(message)s") | |
intents = discord.Intents.default() | |
intents.message_content = True | |
class ImageBot(discord.Client): | |
async def on_ready(self): | |
logging.info(f"Logged in as {self.user} (id={self.user.id})") | |
async def on_message(self, message: discord.Message): | |
# λ΄ μμ Β·λ€λ₯Έ μ±λ λ©μμ§ λ¬΄μ | |
if message.author.id == self.user.id or message.channel.id != CHANNEL_ID: | |
return | |
prompt = message.content.strip() | |
if not prompt: | |
return | |
await message.channel.typing() | |
# Replicate νΈμΆ(κΈ°λ³Έκ°: promptλ§ μ λ¬) | |
def run_replicate(): | |
return list(replicate.run(MODEL, input={"prompt": prompt})) | |
try: | |
loop = asyncio.get_running_loop() | |
images = await loop.run_in_executor(None, run_replicate) | |
except Exception as e: | |
logging.error(f"Replicate error: {e}") | |
await message.reply("β οΈ μ΄λ―Έμ§ μμ± μ€ν¨!") | |
return | |
files = [] | |
for idx, item in enumerate(images): | |
try: | |
data = item.read() if hasattr(item, "read") else requests.get(item).content | |
files.append(discord.File(io.BytesIO(data), filename=f"img_{idx}.png")) | |
except Exception as e: | |
logging.warning(f"IMG {idx} μ²λ¦¬ μ€ν¨: {e}") | |
await message.reply(files=files if files else None, | |
content=None if files else "β οΈ μ΄λ―Έμ§λ₯Ό μ μ‘ν μ μμ΅λλ€.") | |
if __name__ == "__main__": | |
replicate.Client(api_token=REPL_TOKEN) # OPENAI_API_KEY κ·Έλλ‘ μ¬μ© | |
ImageBot(intents=intents).run(TOKEN) | |