Reward: Skip Song (mit Refund bei Fehler)¶
Viewer löst Reward ein → der aktuell spielende Song wird übersprungen. Wenn nichts spielt oder die API nicht erreichbar ist, kriegt der Viewer die Channel-Points zurück.
Voraussetzung: - Reward in Streamer.bot angelegt - Spotify (oder ähnliche Music-API) erreichbar via Fetch URL ODER ein eigenes Bot-Setup - Reward-Action MUSS in SB angelegt sein damit Refund funktioniert
Patterns: Reward Trigger + Fetch URL + If/Else + Update Redemption Status (Refund) Sub-Actions: 5-8
Reward in Streamer.bot anlegen¶
| Feld | Wert |
|---|---|
| Title | Skip Song |
| Cost | 1000 |
| Prompt | Skipt den aktuell laufenden Song |
| Skip Request Queue | false (wir fulfillen selbst) |
| Max Per User Per Stream | 2 |
| Global Cooldown | 30 |
Action: [Reward] Skip Song¶
Trigger¶
Twitch → Channel Reward → Reward Redemption → Reward Skip Song.
Sub-Action 1: Fetch URL — Spotify Skip API¶
Wichtig: Fetch URL kann nur GET
Spotify's Skip-Endpoint braucht POST. Streamer.bot's Fetch URL Sub-Action unterstützt aber nur GET (siehe Fetch URL Setup). Für diesen Reward gibts zwei Wege:
- Streamer.bot Spotify Plugin nutzen (Community-Plugin) — bietet
Spotify → SkipSub-Action direkt - C# Code-Block mit
HttpClientfür POST (außerhalb Scope dieses Cookbooks — wir vermeiden C#) - Lokales AIMP/VLC mit GET-basierten HTTP-APIs (siehe Variante unten)
Die Anleitung unten zeigt das KONZEPT — die genaue Sub-Action hängt vom gewählten Setup ab.
Pfad: Core → Network → Fetch URL (für GET-basierte Music-Player) ODER Spotify → Skip (mit Plugin)
| Feld | Wert (bei GET-API z.B. AIMP) |
|---|---|
| URL | http://localhost:8082/Player/Next (AIMP) |
| Variable Name | skipResult |
| Parse result as JSON | je nach API |
Setzt nach Ausführung:
| Variable | Inhalt |
|---|---|
%fetchUrlStatusCode% |
HTTP Status (z.B. 200, 204, 401, 404) |
%fetchUrlContent% |
Response Body |
Spotify Skip-API gibt 204 No Content bei Erfolg, 404 wenn nichts spielt, 401 bei abgelaufenem Token.
Sub-Action 2: If/Else — kein Song aktiv (404)¶
| Feld | Wert |
|---|---|
| Input | %fetchUrlStatusCode% |
| Operation | Equals |
| Value | 404 |
Then-Branch:
Sub-Action 3 (im Then von 2): Refund + Message + Break¶
3a. Update Redemption Status: Cancel
3b. Send Message: "@%user% es spielt grad nix — du bekommst die Punkte zurück."
3c. Break
Sub-Action 4: If/Else — andere Fehler (401, 500)¶
| Feld | Wert |
|---|---|
| Input | %fetchUrlStatusCode% |
| Operation | Greater Than |
| Value | 299 |
Then-Branch:
Sub-Action 5 (im Then von 4): Refund + Message + Break¶
5a. Update Redemption Status: Cancel
5b. Send Message: "@%user% Spotify-Fehler %fetchUrlStatusCode% — Punkte zurück."
5c. Break
Sub-Action 6: Update Redemption Status — Fulfilled¶
Sub-Action 7: Send Message — Erfolg¶
| Feld | Wert |
|---|---|
| Message | ⏭️ @%user% hat den Song geskipt! |
| Send using bot account | aktiv |
Action-Tree¶
[Reward] Skip Song (Trigger: Reward Redemption "Skip Song")
├── 1. Fetch URL: POST https://api.spotify.com/v1/me/player/next
├── 2. If/Else: %fetchUrlStatusCode% Equals 404
│ ├── 3a. Update Redemption Status: Cancel
│ ├── 3b. Send Message: "@%user% es spielt grad nix..."
│ └── 3c. Break
├── 4. If/Else: %fetchUrlStatusCode% Greater Than 299
│ ├── 5a. Update Redemption Status: Cancel
│ ├── 5b. Send Message: "@%user% Spotify-Fehler %fetchUrlStatusCode%..."
│ └── 5c. Break
├── 6. Update Redemption Status: Fulfilled
└── 7. Send Message: "⏭️ @%user% hat den Song geskipt!"
Spotify-Token Setup¶
Spotify-API braucht OAuth2 mit Refresh-Token. Drei Wege:
| Methode | Aufwand | Stabilität |
|---|---|---|
| Eigenes Spotify-Dev-Account | Mittel | Hoch (du verwaltest selbst) |
| Third-Party-Service (Streamer.bot Spotify Plugin/Extension) | Niedrig | Mittel (von Service abhängig) |
| Pulsoid/SpotifyToken Webservices | Niedrig | Mittel |
Für AzaCraft pragmatisch: Spotify Dev-App anlegen, OAuth-Flow einmal durchspielen, Refresh-Token im SB-Argument oder Global speichern. Refresh-Logik via zweiter Fetch URL bei 401.
Details zu Spotify-OAuth nicht in dieser MD — siehe Spotify Developer Docs.
Variante: Skip mit eingebautem SB-Music-Plugin¶
Wenn du das Streamer.bot Spotify Integration Plugin nutzt (offizielles oder Community), gibt es eine dedizierte Sub-Action Spotify → Skip. Dann brauchst du kein Fetch URL — der Plugin macht's.
[Reward] Skip Song
├── 1. Spotify → Skip (Plugin-Sub-Action)
├── 2. If/Else: %spotifySkipSuccess% Equals false
│ ├── Update Redemption Status: Cancel
│ ├── Send Message: "..."
│ └── Break
├── 3. Update Redemption Status: Fulfilled
└── 4. Send Message: "⏭️ Geskipt!"
Alternative ohne Spotify: Custom-Skip-Logic¶
Wenn du eigene Musik-Setup hast (z.B. AIMP, Foobar2000, lokales VLC):
- AIMP hat HTTP-API:
http://localhost:8082/Player/Next - VLC HTTP-Interface:
http://localhost:8080/requests/status.xml?command=pl_next
Gleiches Pattern wie oben, nur andere URL.
Häufige Fallen¶
- OAuth-Token abgelaufen — Spotify-Tokens haben 1h Gültigkeit. Refresh-Token-Logik braucht zweite Fetch URL davor
- Race-Condition mit mehreren Skips schnell — User redeemt 3x → Spotify API rate-limited → 429 Errors. Cooldown-Setting im Reward ist Pflicht
- Refund klappt nicht — Reward wurde im Twitch-Dashboard angelegt statt in SB. Neu anlegen
- Fulfilled wird vergessen — Reward bleibt in Twitch-Queue. Bei Skip-Queue = false MUSS man
Fulfilledsetzen
Quellen¶
- Reward Redemption Trigger: https://docs.streamer.bot/api/triggers/twitch/channel-reward/reward-redemption
- Update Redemption Status: https://docs.streamer.bot/api/sub-actions/twitch/rewards/update-redemption-status
- Fetch URL: https://docs.streamer.bot/api/sub-actions/core/network/fetch-url
- Spotify Web API: https://developer.spotify.com/documentation/web-api/reference/skip-users-playback-to-next-track