Stream-Online-Event triggert Discord-Webhook-Post mit Game + Titel + Twitch-Link + Role-Ping. Globals-Guard verhindert Doppelposts bei Twitch-Reconnects.
Klassiker den jeder Streamer mit Discord-Server will. Pattern hat einen versteckten Stolperer: Twitch-Stream-Online feuert manchmal mehrfach kurz hintereinander (Stream-Reconnect, OBS-Crash + Recovery). Ohne Guard postest du dreimal in Discord innerhalb von 5 Minuten. Lösung: Persisted Global mit dem letzten Announce-Timestamp + 30-Min-Sperre.
Webhook kann auch JSON-Embeds rendern: größere Card mit Custom Color, Thumbnail, Footer. Geht via C#-Execute-Code mit HttpClient.PostAsync an die Webhook-URL. JSON-Body:
Pro Server ein eigener Webhook → eine Sub-Action 5 pro Webhook duplizieren. Content identisch lassen oder pro Server anpassen (z. B. Community-Server vs Personal-Server mit anderer Tonalität).
Eigene Action [Event] Stream Offline → Discord mit Trigger Stream Offline. Postet z. B. „Stream beendet. VOD verfügbar in 2 h“. Setzt keinen Guard zurück (Guard ist nur für Online-Doppelpost relevant).
Doppelpost trotz Guard: passiert wenn lastDiscordAnnounce nicht persistent ist. Toggle prüfen.
Discord-Embed-Card lädt nicht: Twitch-API ist manchmal langsam, Card kommt 30 s später. Reload-Bug von Discord, nicht von SB.
Role-Ping rendert als Text: entweder Mentionable = aus an der Rolle oder Channel-Permission „Erwähnen“. Beide prüfen.
Webhook 429 (Rate-Limit): bei sehr vielen Streams am Tag (sollte nicht passieren). Discord blockt für ein paar Sekunden, SB schickt nicht nach. Nochmal triggern.
Game leer: bei Twitch-API-Hänger kann %game% leer sein. Pre-Check mit If/Else auf empty + Fallback "Just Chatting" setzen.
Twitch-Login vs Display-Name: %broadcastUser% ist meist der Login (klein, ohne Sonderzeichen). Wenn dein Display-Name AzaCräft ist, manuell hardcoden statt Variable.