From 5487e0f7f803bba4ecb6840d5b870b528e88017d Mon Sep 17 00:00:00 2001 From: Djeex Date: Thu, 30 Jan 2025 23:35:03 +0000 Subject: [PATCH] Fixed discord embed --- README.md | 2 +- nvidia-stock-bot.py | 56 ++++++++++++++++++++++----------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index fffba63..252a0da 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Vous trouverez-ci dessous les instructions pour configurer le conteneur avec not version: "3.8" services: nvidia-stock-bot: - image: git.djeex.fr/djeex/nvidia-stock-bot:7 + image: git.djeex.fr/djeex/nvidia-stock-bot:8 container_name: nvidia-stock-bot restart: always # Le conteneur redémarrera automatiquement en cas d'échec environment: diff --git a/nvidia-stock-bot.py b/nvidia-stock-bot.py index ea7dfde..d6a04fd 100644 --- a/nvidia-stock-bot.py +++ b/nvidia-stock-bot.py @@ -51,26 +51,37 @@ HEADERS = { "Sec-GPC": "1", } -# Dictionnaire stockant l'état de stock pour chaque GPU. +# Dictionnaire stockant l'état de stock stock_status = {gpu.upper(): False for gpu in GPU_TARGETS} session = requests.Session() - -def send_discord_notification(message: str): - """Envoie un message sur un salon Discord via un webhook.""" - payload = { - "content": message +def send_discord_notification(gpu_name: str, product_link: str): + """Envoie une notification Discord avec un embed via un webhook.""" + embed = { + "title": f"🚀 {gpu_name} en stock !", + "description": f":point_right: **[Achetez ici](https://marketplace.nvidia.com/fr-fr/consumer/graphics-cards/?locale=fr-fr&page=1&limit=12&gpu=RTX%205090,RTX%205080)**", + "color": 3066993, # Couleur verte + "timestamp": time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime()), + #"thumbnail": { + # "url": "https://www.nvidia.com/content/dam/en-zz/Solutions/geforce/graphic-cards/50-series/rtx-5090/geforce-rtx-5090-learn-more-og-1200x630.jpg" + #} } + + payload = { + "content": "@everyone", + "username": "Nvidia Bot", + "embeds": [embed] + } + try: response = requests.post(DISCORD_WEBHOOK_URL, json=payload) if response.status_code == 204: - logging.info("Notification envoyée sur Discord.") + logging.info("✅ Embed envoyé sur Discord.") else: - logging.error(f"Échec de l'envoi du webhook : {response.status_code} - {response.text}") + logging.error(f"❌ Erreur d'envoi du webhook : {response.status_code} - {response.text}") except Exception as e: - logging.error(f"Erreur lors de l'appel au webhook Discord : {e}") - + logging.error(f"🚨 Erreur lors de l'envoi du webhook : {e}") def check_rtx_50_founders(): """Vérifie l'état de stock des GPU Founders Edition et notifie Discord si un GPU repasse en stock.""" @@ -79,12 +90,8 @@ def check_rtx_50_founders(): logging.info(f"Réponse de l'API : {response.status_code}") response.raise_for_status() data = response.json() - - except requests.exceptions.ReadTimeout: - logging.info("Time-out lors de l'appel API.") - return - except Exception as e: - logging.info(f"Erreur lors de l'appel API : {e}") + except requests.exceptions.RequestException as e: + logging.error(f"Erreur lors de l'appel API : {e}") return products = data.get("searchedProducts", {}).get("productDetails", []) @@ -92,11 +99,11 @@ def check_rtx_50_founders(): for p in products: gpu_name = p.get("gpu", "").upper() - is_founder = p.get("isFounderEdition") is True - is_nvidia = (p.get("manufacturer") == "NVIDIA") + #is_founder = p.get("isFounderEdition") is True + #is_nvidia = (p.get("manufacturer") == "NVIDIA") is_buy_now = (p.get("prdStatus") != "out_of_stock") - if is_founder and is_nvidia and is_buy_now: + if is_buy_now: if any(target.upper() in gpu_name for target in GPU_TARGETS): found_in_stock.add(gpu_name) @@ -111,13 +118,7 @@ def check_rtx_50_founders(): if product_name == gpu_upper: real_gpu_name = product.get("gpu", "Inconnu") product_link = "https://marketplace.nvidia.com/fr-fr/consumer/graphics-cards/?locale=fr-fr&page=1&limit=12&gpu=RTX%205090,RTX%205080" - msg = ( - f"@everyone **En stock !**\n" - f"Carte : **{real_gpu_name}**\n " - f"Lien :point_right: {product_link}\n" - f"________\n" - ) - send_discord_notification(msg) + send_discord_notification(real_gpu_name, product_link) stock_status[gpu_upper] = True print(f"{gpu} est maintenant en stock!") @@ -126,11 +127,10 @@ def check_rtx_50_founders(): logging.info(f"{gpu} n'est plus en stock.") stock_status[gpu_upper] = False print(f"{gpu} est hors stock !") - + elif not currently_in_stock: print(f"{gpu} est actuellement hors stock.") - if __name__ == "__main__": while True: check_rtx_50_founders()