diff --git a/.gitea/workflows/check-code_quality.yaml b/.gitea/workflows/check-code_quality.yaml index 9962c55..d5c9f05 100644 --- a/.gitea/workflows/check-code_quality.yaml +++ b/.gitea/workflows/check-code_quality.yaml @@ -20,7 +20,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: '3.13' - name: Install dependencies run: | diff --git a/src/main.py b/src/main.py index 8749a1b..ec7718d 100644 --- a/src/main.py +++ b/src/main.py @@ -10,8 +10,8 @@ import sys import time import zipfile +import aiohttp import discord -import requests from discord import app_commands from discord.ext import commands @@ -30,7 +30,7 @@ logger = logging.getLogger(__name__) if not all([NOVELAI_API_TOKEN, BOT_TOKEN, ALLOWED_CHANNEL_ID]): 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() @@ -43,9 +43,9 @@ async def on_ready(): print(f"Bot gestartet als {bot.user}") try: 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 - 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 🥵") await bot.change_presence(status=discord.Status.online, activity=activity) @@ -159,17 +159,21 @@ async def generate( } start_time = time.monotonic() - response = requests.post( - "https://image.novelai.net/ai/generate-image", - json=payload, - headers=headers, - 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 logger.info("Image creation took %.2f seconds", duration) - if response.status_code == 200: - response_bytes = response.content + if status_code == 200: param_text = ( f"```Prompt: {prompt}\n" f"Undesired prompt: {negative_prompt}\n" @@ -206,13 +210,11 @@ async def generate( return try: - error_data = response.json() + error_data = response_bytes.decode("utf-8") 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" - for key, value in error_data.items(): - error_message += f"**{key}**: {value}\n" + error_message = f"Error {status_code} at API-request.\n" f"Answer: {error_data}\n" await interaction.followup.send(error_message) diff --git a/src/requirements.txt b/src/requirements.txt index a19c97b..f0264e6 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -1,2 +1,2 @@ discord -requests \ No newline at end of file +aiohttp \ No newline at end of file