Ein Discord-Bot, der Menschen mit dem Weltraum verbindet - mit Echtzeit-ISS-Tracking und dem Astronomy Picture of the Day von der NASA.
- ISS-Tracking - Echtzeit-Position, Geschwindigkeit, Höhe, Land, Stadt, Zeitzone und Kartenlink
- NASA Bild des Tages - Tägliches Astronomiebild mit Titel
- NASA Bild des Tages + Info - Tägliches Astronomiebild mit vollständiger Beschreibung
- Slash-Commands - Moderne Discord-Slash-Befehle
| ISS-Tracking | NASA APOD | NASA APOD + Info |
|---|---|---|
![]() |
![]() |
![]() |
- Java 21+
- Maven 3.8+
- Discord-Bot-Token - Discord Developer Portal
- NASA-API-Key - api.nasa.gov (kostenlos, oder
DEMO_KEYfür eingeschränkten Zugriff) - GeoNames-Benutzername - geonames.org (kostenloses Konto, für Ozean-Erkennung)
git clone https://github.com/jantrw/SpaceLinker.git
cd SpaceLinkerOption A: Umgebungsvariablen setzen:
DISCORD_TOKEN=DEIN_DISCORD_BOT_TOKEN
NASA_API_KEY=DEIN_NASA_API_KEY
GEONAMES_USERNAME=DEIN_GEONAMES_BENUTZERNAMEOption B: lokale config.properties in der Projektwurzel anlegen.
Die Vorlage ist config.properties.example.
cp config.properties.example config.propertiesconfig.properties bearbeiten:
# NASA API-Key - kostenlos unter https://api.nasa.gov/
apiKeyNasa=DEIN_NASA_API_KEY
# Discord-Bot-Token - unter https://discord.com/developers/applications
botToken=DEIN_DISCORD_BOT_TOKEN
# GeoNames-Benutzername - Registrierung unter https://www.geonames.org/
username=DEIN_GEONAMES_BENUTZERNAMEHinweis:
config.propertiesist nur lokal, steht in.gitignore, wird nicht committed und nicht ins Jar gepackt.
- Zum Discord Developer Portal gehen
- New Application klicken → Namen vergeben
- Zu Bot gehen → Add Bot klicken
- Token kopieren und in
config.propertieseintragen (botToken)
DEINE_CLIENT_ID durch die Client-ID der Anwendung ersetzen (unter General Information zu finden):
https://discord.com/oauth2/authorize?client_id=DEINE_CLIENT_ID&scope=bot&permissions=274877991936
Dies gewährt: Nachrichten senden, Links einbetten, Slash-Commands verwenden.
mvn clean package
java -jar target/SpaceLinker-1.0-SNAPSHOT.jarOder direkt mit Maven starten:
mvn compile exec:java -Dexec.mainClass="me.jan_dev.DiscordBot"Beim ersten Start registriert der Bot die Slash-Commands automatisch bei Discord. Bei nachfolgenden Starts wird die Registrierung übersprungen, sofern sich die Commands nicht geändert haben.
| Befehl | Beschreibung |
|---|---|
/iss |
Aktuelle ISS-Position, Geschwindigkeit, Höhe, Standort und Kartenlink |
/picture |
NASA Astronomy Picture of the Day (nur Bild) |
/pictureinfo |
NASA Astronomy Picture of the Day mit vollständiger Beschreibung |
/help |
Zeigt diese Befehlsliste |
src/main/java/
├── me/jan_dev/
│ ├── DiscordBot.java # Einstiegspunkt, Bot-Setup, Command-Registrierung
│ └── BotListener.java # /help Slash-Command-Handler
├── commands/
│ ├── ISSData.java # /iss Befehl - baut das ISS-Embed
│ ├── JSONFetcherIss.java # Holt ISS-Daten von mehreren APIs
│ ├── NasaPictureOfTheDay.java # /picture und /pictureinfo Befehle
│ └── NasaCommandHandler.java # Holt NASA APOD-Daten
└── data/
├── Config.java # Lädt config.properties extern oder aus Umgebungsvariablen
└── Http.java # Gemeinsame HttpClient-Instanz
| API | Verwendung | Ratenlimit |
|---|---|---|
| Open Notify | ISS-Position | Kein angegebenes Limit |
| Where is the ISS | ISS-Geschwindigkeit, Höhe, Zeitzone | Großzügig |
| Nominatim | Reverse Geocoding (Land, Stadt) | 1 Anfrage/Sekunde |
| GeoNames | Ozean-Erkennung | 1000/Tag (kostenlos) |
| NASA APOD | Astronomy Picture of the Day | 1000/Stunde (mit Key) |
- JDA 5.2.2 - Java Discord API
- Gson 2.10.1 - JSON-Verarbeitung
- SLF4J + slf4j-simple - Logging
- GitHub Actions baut das Projekt mit Java 21 und
mvn -B verify - Das Build erzeugt per Maven Shade Plugin ein ausführbares Jar
- Secrets bleiben außerhalb des Source-Trees
MIT License


