switched to atiohttp #13

Merged
wirehack7 merged 5 commits from dev into main 2025-05-01 15:56:11 +02:00
Showing only changes of commit 3fbc996de1 - Show all commits

View File

@ -12,6 +12,7 @@ import zipfile
import discord import discord
import requests import requests
import aiohttp
from discord import app_commands from discord import app_commands
from discord.ext import commands from discord.ext import commands
@ -30,7 +31,7 @@ logger = logging.getLogger(__name__)
if not all([NOVELAI_API_TOKEN, BOT_TOKEN, ALLOWED_CHANNEL_ID]): if not all([NOVELAI_API_TOKEN, BOT_TOKEN, ALLOWED_CHANNEL_ID]):
raise ValueError( raise ValueError(
"NOVELAI_API_TOKEN, DISCORD_BOT_TOKEN und DISCORD_CHANNEL_ID müssen gesetzt sein." "NOVELAI_API_TOKEN, DISCORD_BOT_TOKEN and DISCORD_CHANNEL_ID have to be set."
) )
intents = discord.Intents.default() intents = discord.Intents.default()
@ -43,9 +44,9 @@ async def on_ready():
print(f"Bot gestartet als {bot.user}") print(f"Bot gestartet als {bot.user}")
try: try:
synced = await bot.tree.sync() synced = await bot.tree.sync()
logger.info("%d Slash-Commands synchronisiert.", len(synced)) logger.info("%d Slash-Commands synchronized.", len(synced))
except Exception as err: # pylint: disable=W0718 except Exception as err: # pylint: disable=W0718
logger.error("Fehler beim Synchronisieren der Commands: %s", err) logger.error("error while syncing the command: %s", err)
activity = discord.Game(name="generating juicy NovelAI images 🥵") activity = discord.Game(name="generating juicy NovelAI images 🥵")
await bot.change_presence(status=discord.Status.online, activity=activity) await bot.change_presence(status=discord.Status.online, activity=activity)
@ -165,11 +166,21 @@ async def generate(
headers=headers, headers=headers,
timeout=120, timeout=120,
) )
async with aiohttp.ClientSession() as session:
async with session.post(
"https://image.novelai.net/ai/generate-image",
json=payload,
headers=headers,
timeout=aiohttp.ClientTimeout(total=120),
) as response:
response_bytes = await response.read()
status_code = response.status
duration = time.monotonic() - start_time duration = time.monotonic() - start_time
logger.info("Image creation took %.2f seconds", duration) logger.info("Image creation took %.2f seconds", duration)
if response.status_code == 200: if status_code == 200:
response_bytes = response.content
param_text = ( param_text = (
f"```Prompt: {prompt}\n" f"```Prompt: {prompt}\n"
f"Undesired prompt: {negative_prompt}\n" f"Undesired prompt: {negative_prompt}\n"
@ -206,13 +217,14 @@ async def generate(
return return
try: try:
error_data = response.json() error_data = response_bytes.decode("utf-8")
except Exception: # pylint: disable=W0718 except Exception: # pylint: disable=W0718
error_data = {"error": response.text} error_data = "error message unreadable"
error_message = f"Error {response.status_code} at API-request.\n" error_message = (
for key, value in error_data.items(): f"Error {status_code} at API-request.\n"
error_message += f"**{key}**: {value}\n" f"Answer: {error_data}\n"
)
await interaction.followup.send(error_message) await interaction.followup.send(error_message)