mirror of
https://github.com/arthur-pbty/discord-weather-bot.git
synced 2026-08-01 20:28:48 +02:00
first commit
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
# 🌦️ Discord Météo Bot
|
||||
|
||||
Bot Discord ultra-complet avec météo temps réel, graphiques et données marines. **Aucune API payante.**
|
||||
|
||||
## ✨ Fonctionnalités
|
||||
|
||||
| Fonctionnalité | Détails |
|
||||
|---|---|
|
||||
| `/meteo` | Rapport complet à la demande |
|
||||
| ⏰ Message quotidien | Heure configurable via `.env` |
|
||||
| 📊 5 graphiques | Température, vent, pluie, pression, nuages |
|
||||
| 🌊 Données marines | Vagues, houle, direction (si côtier) |
|
||||
| 🌙 Phase lunaire | Calcul local, illumination |
|
||||
| 🌅 Astronomie | Lever/coucher soleil, durée du jour |
|
||||
| ⚠️ Alertes météo | Vent fort, pluie intense, orage, brouillard |
|
||||
| 📊 Comparaison J-1 | Température, pluie, vent vs hier |
|
||||
| 🔧 Mode debug | Données brutes + diagnostics |
|
||||
| 💾 Cache 10 min | Évite le spam API |
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
### 1. Prérequis
|
||||
- **Node.js >= 18** — [télécharger](https://nodejs.org)
|
||||
- Un bot Discord (token + permissions)
|
||||
|
||||
### 2. Cloner / télécharger
|
||||
```bash
|
||||
# Placer tous les fichiers dans un dossier
|
||||
cd discord-meteo-bot
|
||||
npm install
|
||||
```
|
||||
|
||||
### 3. Configurer le bot Discord
|
||||
|
||||
1. Aller sur [discord.com/developers/applications](https://discord.com/developers/applications)
|
||||
2. Créer une nouvelle application → **Bot** → **Reset Token** → copier le token
|
||||
3. Dans **OAuth2 → URL Generator** :
|
||||
- Scopes : `bot`, `applications.commands`
|
||||
- Bot Permissions : `Send Messages`, `Embed Links`, `Attach Files`
|
||||
4. Utiliser le lien généré pour inviter le bot sur votre serveur
|
||||
|
||||
### 4. Configurer le `.env`
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# Puis éditer .env avec vos valeurs
|
||||
```
|
||||
|
||||
```env
|
||||
DISCORD_TOKEN=MTUx... # Token du bot Discord
|
||||
CHANNEL_ID=1234567890123456789 # ID du channel (clic droit → Copier l'ID)
|
||||
|
||||
SEND_HOUR=7 # Heure d'envoi du message quotidien
|
||||
SEND_MINUTE=30 # Minute d'envoi
|
||||
|
||||
LAT=44.6310 # Latitude
|
||||
LON=-1.0215 # Longitude
|
||||
LOCATION_NAME=Lacanau-Océan # Nom affiché dans Discord
|
||||
|
||||
DEBUG_METEO=false # true pour le mode debug
|
||||
CACHE_MINUTES=10 # Durée du cache API
|
||||
```
|
||||
|
||||
> **Activer l'ID Discord** : Paramètres Discord → Avancé → Mode développeur ✅
|
||||
|
||||
### 5. Lancer le bot
|
||||
|
||||
```bash
|
||||
# Production
|
||||
npm start
|
||||
|
||||
# Développement (rechargement auto)
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## 📦 APIs utilisées
|
||||
|
||||
| API | Usage | Clé requise |
|
||||
|---|---|---|
|
||||
| [Open-Meteo](https://open-meteo.com/) | Météo complète (temp, vent, pluie…) | ❌ Gratuit |
|
||||
| [Open-Meteo Marine](https://open-meteo.com/en/docs/marine-weather-api) | Vagues, houle | ❌ Gratuit |
|
||||
| [Sunrise-Sunset.org](https://sunrise-sunset.org/api) | Lever/coucher soleil | ❌ Gratuit |
|
||||
| [QuickChart.io](https://quickchart.io/) | Génération des graphiques | ❌ Gratuit |
|
||||
| Phase lunaire | Calcul mathématique local | ❌ Aucune |
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
```
|
||||
discord-meteo-bot/
|
||||
├── index.js # Bot principal, cron, routing
|
||||
├── commands/
|
||||
│ └── meteo.js # Commande /meteo + buildEmbed + sendReport
|
||||
├── services/
|
||||
│ ├── weather.js # Open-Meteo API, cache, helpers
|
||||
│ ├── astronomy.js # Sunrise-Sunset API, phase lunaire
|
||||
│ └── charts.js # Génération graphiques via QuickChart
|
||||
├── .env # Configuration (ne pas committer!)
|
||||
├── .env.example # Template
|
||||
└── package.json
|
||||
```
|
||||
|
||||
## 🎨 Aperçu de l'embed
|
||||
|
||||
```
|
||||
⛅ Partiellement nuageux — Lacanau-Océan
|
||||
22.4°C · Ressenti 20.1°C · 🌞 Jour
|
||||
|
||||
🌡️ Températures 💨 Vent 🌧️ Précipitations
|
||||
Actuelle : 22.4°C Vitesse : 28 km/h Actuelle : 0.2 mm/h
|
||||
Ressentie : 20.1°C Rafales : 41 km/h Proba. : 30%
|
||||
Max / Min : 26°C/14°C Dir. : OSO (255°) Pluie : 0.2 mm/h
|
||||
Humidité : 72% Max : 52 km/h Total : 3.4 mm
|
||||
|
||||
🔵 Atmosphère ☁️ Nuages 👁️ Visibilité
|
||||
Pression : 1012 hPa ↓ Total : 45% 18.0 km
|
||||
UV Index : 6 — 🟠 Élevé Bas : 30% 👍 Bonne
|
||||
UV max : 8 Moyen : 10%
|
||||
Haut : 5%
|
||||
|
||||
🌅 Astronomie
|
||||
🌅 Lever : 07:24 🌇 Coucher : 20:48 ☀️ Zénith : 14:06 ⏱️ Durée : 13h24min
|
||||
|
||||
🌙 Phase lunaire 🌊 Données marines
|
||||
🌒 Croissant montant Hauteur : 1.4 m
|
||||
Illumination : 38% Période : 8.5 s
|
||||
Jour J+4.3 Dir. : NO (325°)
|
||||
|
||||
📊 Comparaison avec hier
|
||||
Temp max : +1.8°C ↑ Pluie : -2.1 mm ↓ Vent max : +8 km/h ↑
|
||||
```
|
||||
|
||||
Suivi des **5 graphiques** (image séparée) :
|
||||
- 🌡️ Températures sur 24h
|
||||
- 💨 Vent sur 24h (vitesse + rafales)
|
||||
- 🌧️ Précipitations sur 24h (mm + probabilité)
|
||||
- 🔵 Pression atmosphérique sur 24h
|
||||
- ☁️ Couverture nuageuse sur 24h (total + bas/moyen/haut)
|
||||
|
||||
## ⚙️ Mode Debug
|
||||
|
||||
Mettre `DEBUG_METEO=true` dans le `.env` pour ajouter un champ debug à l'embed :
|
||||
- Heure de mise en cache
|
||||
- Index horaires courants
|
||||
- Source des données astronomiques
|
||||
- Nombre de graphiques générés
|
||||
|
||||
## 🔧 Personnalisation rapide
|
||||
|
||||
**Changer la fréquence du cache :**
|
||||
```env
|
||||
CACHE_MINUTES=15
|
||||
```
|
||||
|
||||
**Forcer deux messages par jour :**
|
||||
Dupliquer le bloc `cron.schedule()` dans `index.js` avec un deuxième horaire.
|
||||
|
||||
**Ajouter une autre localisation :**
|
||||
Créer un second `.env` ou passer les coordonnées en argument.
|
||||
|
||||
## 🐛 Dépannage
|
||||
|
||||
| Problème | Solution |
|
||||
|---|---|
|
||||
| `Missing Access` | Vérifier les permissions du bot dans le channel |
|
||||
| Commandes non visibles | Les commandes globales prennent jusqu'à 1h. Réinviter le bot. |
|
||||
| Graphiques manquants | QuickChart peut être temporairement indisponible — réessayez |
|
||||
| Marine non disponible | Normal pour les localisations éloignées des côtes |
|
||||
| `Unknown Channel` | Vérifier le CHANNEL_ID dans .env |
|
||||
|
||||
## 📝 Dépendances
|
||||
|
||||
```json
|
||||
{
|
||||
"discord.js": "^14.14.1",
|
||||
"axios": "^1.6.8",
|
||||
"node-cron": "^3.0.3",
|
||||
"dotenv": "^16.4.5"
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user