mirror of
https://github.com/arthur-pbty/discord-weather-bot.git
synced 2026-08-01 20:28:48 +02:00
4bc95c52b19eef2303c961d6c30ab5fd53b59e6a
🌦️ 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
- Un bot Discord (token + permissions)
2. Cloner / télécharger
# Placer tous les fichiers dans un dossier
cd discord-meteo-bot
npm install
3. Configurer le bot Discord
- Aller sur discord.com/developers/applications
- Créer une nouvelle application → Bot → Reset Token → copier le token
- Dans OAuth2 → URL Generator :
- Scopes :
bot,applications.commands - Bot Permissions :
Send Messages,Embed Links,Attach Files
- Scopes :
- Utiliser le lien généré pour inviter le bot sur votre serveur
4. Configurer le .env
cp .env.example .env
# Puis éditer .env avec vos valeurs
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
# Production
npm start
# Développement (rechargement auto)
npm run dev
📦 APIs utilisées
| API | Usage | Clé requise |
|---|---|---|
| Open-Meteo | Météo complète (temp, vent, pluie…) | ❌ Gratuit |
| Open-Meteo Marine | Vagues, houle | ❌ Gratuit |
| Sunrise-Sunset.org | Lever/coucher soleil | ❌ Gratuit |
| 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 :
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
{
"discord.js": "^14.14.1",
"axios": "^1.6.8",
"node-cron": "^3.0.3",
"dotenv": "^16.4.5"
}
Languages
JavaScript
87.7%
Makefile
7%
Dockerfile
5.3%