Compare commits

..

4 Commits
v2.5 ... main

4 changed files with 22 additions and 20 deletions

View File

@ -16,7 +16,7 @@ RUN pip install --no-cache-dir -r requirements.txt
# Définir les variables d'environnement par défaut (modifiable lors du lancement du conteneur) # Définir les variables d'environnement par défaut (modifiable lors du lancement du conteneur)
ENV DISCORD_WEBHOOK_URL="https://example.com/webhook" \ ENV DISCORD_WEBHOOK_URL="https://example.com/webhook" \
REFRESH_TIME="60" REFRESH_TIME="30"
# Exposer un point de commande pour exécuter le script # Exposer un point de commande pour exécuter le script
CMD ["python", "nvidia-stock-bot.py"] CMD ["python", "nvidia-stock-bot.py"]

View File

@ -11,20 +11,20 @@
<img src="https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/nvidia-stock-bot-logo.png" alt="Nvidia Stock Bot" width="300"> <img src="https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/nvidia-stock-bot-logo.png" alt="Nvidia Stock Bot" width="300">
</div> </div>
**Nvidia Stock Bot** - Un robot qui permet d'être alerté en temps réel des stocks de cartes graphiques **Nvidia RTX FE** grâce à des notifications Discord. **🤖 Nvidia Stock Bot** - Un robot qui permet d'être alerté en temps réel des stocks de cartes graphiques **Nvidia RTX FE** grâce à des notifications Discord.
*Le code a été en partie rédigé et structuré à l'aide d'une IA générative.* *Le code a été en partie rédigé et structuré à l'aide d'une IA générative.*
## Sommaire ## 📌 Sommaire
- [Fonctionnalités](#fonctionnalit%C3%A9s) - [Fonctionnalités](#fonctionnalit%C3%A9s)
- [Installation docker sans le dépot (rapide)](#installation-sans-le-d%C3%A9pot-avec-docker-compose) - [🐳 Installation docker sans le dépot (rapide)](#installation-sans-le-d%C3%A9pot-avec-docker-compose)
- [Installation docker avec le dépot (développeur)](#installation-avec-le-d%C3%A9pot) - [🐙 Installation docker avec le dépot (développeur)](#installation-avec-le-d%C3%A9pot)
- [Installation avec Python (développeur)](#installation-avec-python) - [🐍 Installation avec Python (développeur)](#installation-avec-python)
- [Captures d'écran](#captures-d%C3%A9cran) - [🖼️ Captures d'écran](#captures-d%C3%A9cran)
- [Contributeurs](#contributeurs) - [🧑‍💻 Contributeurs](#contributeurs)
## Fonctionnalités ## Fonctionnalités
- Notification Discord `@everyone` en cas de changement du SKU (potentiel drop imminent) - Notification Discord `@everyone` en cas de changement du SKU (potentiel drop imminent)
- Notification Discord `@everyone` en cas de stock détecté avec modèle, prix, et lien - Notification Discord `@everyone` en cas de stock détecté avec modèle, prix, et lien
@ -34,7 +34,7 @@
<img src="https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/nvbot_schematics.png" align="center"> <img src="https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/nvbot_schematics.png" align="center">
## Installation sans le dépot avec docker compose ## 🐳 Installation sans le dépot avec docker compose
Vous trouverez-ci dessous les instructions pour configurer le conteneur avec notre image pré-compilée. Avec cette solution, votre bot tournera tout seul tant que le conteneur est actif. Vous trouverez-ci dessous les instructions pour configurer le conteneur avec notre image pré-compilée. Avec cette solution, votre bot tournera tout seul tant que le conteneur est actif.
@ -85,7 +85,7 @@ docker compose up -d
docker logs -f nvidia-stock-bot docker logs -f nvidia-stock-bot
``` ```
## Installation avec le dépot ## 📦 Installation avec le dépot
Vous trouverez-ci dessous les instructions pour installer le dépot, compiler l'image docker, et lancer le conteneur. Avec cette solution, votre bot tournera tout seul tant que le conteneur est actif. Vous trouverez-ci dessous les instructions pour installer le dépot, compiler l'image docker, et lancer le conteneur. Avec cette solution, votre bot tournera tout seul tant que le conteneur est actif.
@ -123,7 +123,7 @@ docker compose up -d
docker logs -f nvidia-stock-bot docker logs -f nvidia-stock-bot
``` ```
## Installation avec Python ## 🐍 Installation avec Python
Vous trouverez ci-dessous comment exécuter directement le script Python. Avec cette solution, le bot s'arretera si vous fermez votre terminal. Vous trouverez ci-dessous comment exécuter directement le script Python. Avec cette solution, le bot s'arretera si vous fermez votre terminal.
@ -158,13 +158,13 @@ Vous trouverez ci-dessous comment exécuter directement le script Python. Avec c
python nvidia-stock-bot.py python nvidia-stock-bot.py
``` ```
## Captures d'écran ## 🖼️ Captures d'écran
<div align="center" > <div align="center" >
<img src="https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/nvidia-stock-bot-discord.png" alt="Nvidia Stock Bot - captures"> <img src="https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/nvidia-stock-bot-discord.png" alt="Nvidia Stock Bot - captures">
</div> </div>
## Contributeurs ## 🧑‍💻 Contributeurs
On remercie pour leurs contributions : On remercie pour leurs contributions :

View File

@ -1,6 +1,6 @@
DS_HOOK= # votre url du webhook Discord DS_HOOK= # Votre url du webhook Discord
FREQ= # frequence de rafraichissement en secondes, par défaut 30 FREQ= # Frequence de rafraichissement en secondes, par défaut 30
API_URL_SKU= # API listant le produit par défaut https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia API_URL_SKU= # API listant le produit, par défaut https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia
API_URL_STOCK= # API appelant le stock sans préciser la valeur du sku, par défaut https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus= API_URL_STOCK= # API appelant le stock sans préciser la valeur du sku, par défaut https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus=
PRODUCT_URL= # URL d'achat du GPU PRODUCT_URL= # URL d'achat du GPU
PRODUCT_NAME= # Le nom exact du GPU que vous recherchez comme : "RTX 5080" PRODUCT_NAME= # Le nom exact du GPU que vous recherchez comme : "RTX 5080"

View File

@ -17,11 +17,12 @@ try:
DISCORD_WEBHOOK_URL = os.environ.get('DISCORD_WEBHOOK_URL') DISCORD_WEBHOOK_URL = os.environ.get('DISCORD_WEBHOOK_URL')
API_URL_SKU = os.environ.get('API_URL_SKU', 'https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia') API_URL_SKU = os.environ.get('API_URL_SKU', 'https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia')
API_URL_STOCK = os.environ.get('API_URL_STOCK', 'https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus=') API_URL_STOCK = os.environ.get('API_URL_STOCK', 'https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus=')
REFRESH_TIME = int(os.environ.get('REFRESH_TIME', 30)) REFRESH_TIME = int(os.environ.get('REFRESH_TIME'))
TEST_MODE = os.environ.get('TEST_MODE', 'False').lower() == 'true' TEST_MODE = os.environ.get('TEST_MODE', 'False').lower() == 'true'
PRODUCT_URL = os.environ.get('PRODUCT_URL', 'https://marketplace.nvidia.com/fr-fr/consumer/graphics-cards/?locale=fr-fr&page=1&limit=12&manufacturer=NVIDIA') PRODUCT_URL = os.environ.get('PRODUCT_URL', 'https://marketplace.nvidia.com/fr-fr/consumer/graphics-cards/?locale=fr-fr&page=1&limit=12&manufacturer=NVIDIA')
PRODUCT_NAME = os.environ.get('PRODUCT_NAME') PRODUCT_NAME = os.environ.get('PRODUCT_NAME')
# Logging des erreurs
if not DISCORD_WEBHOOK_URL: if not DISCORD_WEBHOOK_URL:
logging.error("❌ DISCORD_WEBHOOK_URL est requis mais non défini.") logging.error("❌ DISCORD_WEBHOOK_URL est requis mais non défini.")
exit(1) exit(1)
@ -45,6 +46,7 @@ try:
# Reconstruction de l'url masquée # Reconstruction de l'url masquée
wh_masked_url = f"https://discord.com/api/webhooks/{masked_webhook_id}/{masked_webhook_token}" wh_masked_url = f"https://discord.com/api/webhooks/{masked_webhook_id}/{masked_webhook_token}"
# Logging des erreurs
except KeyError as e: except KeyError as e:
logging.error(f"Variable d'environnement manquante : {e}") logging.error(f"Variable d'environnement manquante : {e}")
exit(1) exit(1)