5 Commits

Author SHA1 Message Date
c35ba693cb Merge branch 'wip' of https://git.djeex.fr/Djeex/nvidia-stock-bot into wip 2025-03-26 15:53:27 +00:00
c7a6173a7a Fix python section 2025-03-26 15:53:04 +00:00
ad3b7e5b90 Merge branch 'wip' of https://git.djeex.fr/Djeex/nvidia-stock-bot into wip 2025-03-26 15:48:38 +00:00
905d49f65a Maj intro 2025-03-26 15:48:25 +00:00
9f36e384c8 License 2025-03-26 11:52:54 +00:00
10 changed files with 86 additions and 141 deletions

25
LICENSE
View File

@ -1,24 +1,17 @@
Creative Commons Attribution-NonCommercial 4.0 International License (CC BY-NC 4.0)
Non-Profit Open Software License 3.0 (NPOSL-3.0)
Copyright (c) 2025 Djeex
Copyright (c) 2025 Nvidia Stock Bot
This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License.
Permission est accordée, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le "Logiciel"), d'utiliser, copier, modifier et distribuer le Logiciel uniquement à des fins non commerciales, sous réserve des conditions suivantes :
You are free to:
Usage Non Commercial : Ce logiciel ne peut être utilisé, en tout ou en partie, à des fins commerciales. Toute exploitation lucrative ou utilisation dans un contexte commercial est interdite sans l'autorisation explicite de l'auteur.
Share — copy, distribute, and transmit the material in any medium or format
Mention de l'Auteur : Toute redistribution ou modification du logiciel doit inclure une mention claire du nom de l'auteur original ainsi qu'une copie de cette licence.
Adapt — remix, transform, and build upon the material
Partage Sous Licence Identique : Toute distribution du logiciel, modifiée ou non, doit être effectuée sous cette même licence NPOSL-3.0.
Under the following terms:
Absence de Garantie : Ce logiciel est fourni "tel quel", sans aucune garantie explicite ou implicite, y compris mais sans s'y limiter les garanties de qualité marchande ou d'adéquation à un usage particulier. En aucun cas, l'auteur ou les contributeurs ne pourront être tenus responsables de tout dommage résultant de l'utilisation du logiciel.
Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
Exceptions et Autorisations : Des dérogations à cette licence peuvent être accordées par l'auteur sur demande.
NonCommercial — You may not use the material for commercial purposes.
No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
You can review the full license here:
https://creativecommons.org/licenses/by-nc/4.0/
DISCLAIMER: This text does not constitute legal advice. For any legal questions, please consult a professional.
Pour plus d'informations sur la licence NPOSL-3.0, voir : https://opensource.org/license/nposl-3-0/.

174
README.md
View File

@ -1,50 +1,71 @@
<h1 align="center"> Nvidia Stock Bot</h1>
<div align="center">
<a href="https://discord.gg/gxffg3GA96">
<img src="https://img.shields.io/badge/JV%20hardware-rejoindre-green?style=flat-square&logo=discord&logoColor=%23fff" alt="JV Hardware">
<a href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank">
<img src="https://img.shields.io/badge/License-CC%20BY--NC%204.0-8E44AD?style=flat-square" alt="License: CC BY-NC 4.0">
</a>
# Nvidia Stock Bot
Par KevOut & Djeex
</div>
<div align="center" >
<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>
[![](https://img.shields.io/badge/JV%20hardware-rejoindre-green?style=flat-square&logo=discord&logoColor=%23fff&label=JV%20hardware&link=https%3A%2F%2Fdiscord.gg%2Fgxffg3GA96)](https://discord.gg/gxffg3GA96)
**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.
Bot qui permet d'être alerté des stocks de Nvidia RTX FE.
*Le code a été en partie rédigé et structuré à l'aide d'une IA générative.*
Ce robot :
- Appelle l'API de Nvidia listant le produit (par défaut toutes les 60s)
- Récupère le SKU du produit concerné
- Appelle le stock lié à ce SKU
- Si du stock est trouvé, envoie une notification discord via le webhook paramétré
- Si le produit était déjà en stock, il n'envoie plus de notification
- Si le produit était en stock mais ne l'est plus, envoie une notification discord signifiant la fin du stock
- Si le SKU change, une notification est envoyée alertant de l'éventuelle imminence du drop
## Sommaire
<img src="https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/nvbot.png" align="center">
- [Fonctionnalités](#fonctionnalit%C3%A9s)
- [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 avec Python (développeur)](#installation-avec-python)
- [Captures d'écran](#captures-d%C3%A9cran)
- [Contributeurs](#contributeurs)
Trois modes d'installation :
- [Avec le dépot Git et Docker](https://git.djeex.fr/Djeex/nvidia-stock-bot/#installation-avec-le-d%C3%A9pot)
- [Sans le dépot Git et avec notre image docker fournie](https://git.djeex.fr/Djeex/nvidia-stock-bot/#installation-sans-le-d%C3%A9pot-avec-docker-compose)
- [Avec python (développeurs)](https://git.djeex.fr/Djeex/nvidia-stock-bot/#installation-sans-le-d%C3%A9pot-avec-docker-compose)
## Fonctionnalités
## Installation avec le dépot
- 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 silencieuse en cas d'absence de stock détécté
- Choix de la fréquence de la vérification
- Choix du modèle à surveiller
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.
<img src="https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/nvbot_schematics.png" align="center">
### Pré-requis
- Git
- Docker
### Cloner et paramétrer
Clonez le repo :
```sh
git clone https://git.djeex.fr/Djeex/nvidia-stock-bot.git
```
Rendez vous dans le dossier `nvidia-stock-bot` et compilez l'image docker :
```sh
docker build -t nvidia-stock-bot .
```
Rendez-vous dans le dossier `nvidia-stock-bot/docker` et éditez le fichier `.env` avec :
- l'url de votre webhook discord
- la fréquence de consultation des stock (par défaut 60s, attention à ne pas trop descendre sous peine de blocage de votre adresse IP par nVidia)
### Lancer l'image
Rendez-vous dans le dossier `nvidia-stock-bot/docker` et lancez le conteneur :
```sh
docker compose up -d
```
### Voir les logs pour vérifier le bon fonctionnement
```sh
docker logs -f nvidia-stock-bot
```
## 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.
**Pré-requis**
- [Docker](https://docs.docker.com/engine/install/)
### Pré-requis
- Docker
**Configuration**
- Créez un dossier `nvidia-stock-bot`
- Créez le fichier `compose.yaml` dans ce dossier avec la configuration ci-dessous :
### Configuration
```yaml
version: "3.8"
@ -52,80 +73,29 @@ services:
nvidia-stock-bot:
image: git.djeex.fr/djeex/nvidia-stock-bot:latest
container_name: nvidia-stock-bot
restart: always
restart: always # Le conteneur redémarrera automatiquement en cas d'échec
environment:
- DISCORD_WEBHOOK_URL= # URL de votre webhook Discord
- REFRESH_TIME= # Durée de rafraichissement du script en secondes
- API_URL_SKU= # API listant le produit par exemple https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia&gpu=RTX%205090
- API_URL_STOCK= # API appelant le stock sans préciser la valeur du sku, par exemple https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus=
- PRODUCT_URL= # URL d'achat du GPU
- PRODUCT_NAME= # Le nom du GPU qui s'affiche dans les notifications
- TEST_MODE= # true pour tester les notifications discord. false par défaut.
- PYTHONUNBUFFERED=1 # Permet d'afficher les logs en temps réel
- REFRESH_TIME= # Durée de rafraichissement du script en secondes
- API_URL_SKU= # API listant le produit par exemple https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia&gpu=RTX%205090
- API_URL_STOCK= # API appelant le stock sans préciser la valeur du sku, par exemple https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus=
- PRODUCT_URL= # URL d'achat du GPU
- PRODUCT_NAME= #Le nom du GPU qui s'affiche dans les notifications
- TEST_MODE= #true pour tester les notifications discord. false par défaut.
- PYTHONUNBUFFERED=1 # Permet d'afficher les logs en temps réel
command: python nvidia-stock-bot.py # Lance le script Python au démarrage du conteneur
```
**Lancer l'image**
Rendez-vous dans le dossier `nvidia-stock-bot` et lancez le conteneur :
```sh
docker compose up -d
```
**Voir les logs pour vérifier le bon fonctionnement**
```sh
docker logs -f nvidia-stock-bot
```
## 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.
**Pré-requis**
- [Git](https://git-scm.com/docs)
- [Docker](https://docs.docker.com/engine/install/)
**Cloner et paramétrer**
- Clonez le repo :
```sh
git clone https://git.djeex.fr/Djeex/nvidia-stock-bot.git
```
- Rendez vous dans le dossier `nvidia-stock-bot` et compilez l'image docker :
```sh
docker build -t nvidia-stock-bot .
```
- Puis rendez-vous dans le dossier `nvidia-stock-bot/docker` et éditez le fichier `.env` avec :
- l'url de votre webhook discord
- les différents liens API et produits
- la fréquence de consultation des stock (par défaut 60s, attention à ne pas trop descendre sous peine de blocage de votre adresse IP par nVidia)
**Lancer l'image**
Rendez-vous dans le dossier `nvidia-stock-bot/docker` et lancez le conteneur :
```sh
docker compose up -d
```
**Voir les logs pour vérifier le bon fonctionnement**
```sh
docker logs -f nvidia-stock-bot
```
## 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.
**Pré-requis**
### Pré-requis
- Python 3.11 ou plus
- requests : `pip install requests`
**Configuration**
### Configuration
- Créez un environnement virtuel (exemple : `python3 -m venv nom_de_l_environnement` )
- Créez un dossier et aller dedans
@ -149,18 +119,4 @@ Vous trouverez ci-dessous comment exécuter directement le script Python. Avec c
```sh
python nvidia-stock-bot.py
```
## Captures d'écran
<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">
</div>
## Contributeurs
On remercie pour leurs contributions :
- Djeex
- KevOut
- Extreme2pac
```

BIN
assets/img/RTX5000_pp.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

BIN
assets/img/nvbot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

View File

@ -1,6 +1,6 @@
DS_HOOK= #votre url du webhook Discord
FREQ= #frequence de rafraichissement en secondes
API_URL_SKU= # API listant le produit par exemple https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia&gpu=RTX%205090
API_URL_STOCK= # API appelant le stock sans préciser la valeur du sku, par exemple https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus=
PRODUCT_URL= # URL d'achat du GPU
PRODUCT_NAME= #Le nom du GPU qui s'affiche dans les notifications
DS_HOOK= #votre url du webhook Discord
FREQ= #frequence de rafraichissement en secondes
API_URL_SKU= # API listant le produit par exemple https://api.nvidia.partners/edge/product/search?page=1&limit=100&locale=fr-fr&Manufacturer=Nvidia&gpu=RTX%205090
API_URL_STOCK= # API appelant le stock sans préciser la valeur du sku, par exemple https://api.store.nvidia.com/partner/v1/feinventory?locale=fr-fr&skus=
PRODUCT_URL= # URL d'achat du GPU
PRODUCT_NAME= #Le nom du GPU qui s'affiche dans les notifications

View File

@ -120,11 +120,10 @@ def send_discord_notification(gpu_name: str, product_link: str, products_price:
],
"description": f"**:point_right: [Acheter maintenant]({product_link})**",
"footer": {
"text": "NviBot • JV Hardware 2.0",
"icon_url": "https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/ds_wh_pp.jpg"
"text": "Par KevOut & Djeex"
}
}
payload = {"content": "@everyone", "username": "NviBot", "avatar_url": "https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/ds_wh_pp.jpg", "embeds": [embed]}
payload = {"content": "@everyone", "username": "NviBot", "avatar_url": "https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/RTX5000_pp.jpg", "embeds": [embed]}
try:
response = requests.post(DISCORD_WEBHOOK_URL, json=payload)
if response.status_code == 204:
@ -153,10 +152,8 @@ def send_out_of_stock_notification(gpu_name: str, product_link: str, products_pr
"author": {
"name": "Nvidia Founder Editions"
},
"footer": {
"text": "NviBot • JV Hardware 2.0",
"icon_url": "https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/ds_wh_pp.jpg"
"text": "Par KevOut & Djeex"
},
"fields": [
@ -167,7 +164,7 @@ def send_out_of_stock_notification(gpu_name: str, product_link: str, products_pr
}
]
}
payload = {"username": "NviBot", "avatar_url": "https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/ds_wh_pp.jpg", "embeds": [embed]}
payload = {"username": "NviBot", "avatar_url": "https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/RTX5000_pp.jpg", "embeds": [embed]}
try:
response = requests.post(DISCORD_WEBHOOK_URL, json=payload)
if response.status_code == 204:
@ -193,8 +190,7 @@ def send_sku_change_notification(old_sku: str, new_sku: str, product_link: str):
"color": 16776960, # Jaune
"footer": {
"text": "NviBot • JV Hardware 2.0",
"icon_url": "https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/ds_wh_pp.jpg"
"text": "Par KevOut & Djeex"
},
"fields": [
@ -209,7 +205,7 @@ def send_sku_change_notification(old_sku: str, new_sku: str, product_link: str):
payload = {
"content": "@everyone ⚠️ Potentiel drop imminent !",
"username": "NviBot",
"avatar_url": "https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/ds_wh_pp.jpg",
"avatar_url": "https://git.djeex.fr/Djeex/nvidia-stock-bot/raw/branch/main/assets/img/RTX5000_pp.jpg",
"embeds": [embed]
}