Zum Inhalt

Stream-Live-Notification mit @everyone

Bei Stream-Start automatisch eine "Wir sind live"-Nachricht in Discord posten — mit @everyone-Ping, Game-Info und Twitch-Link.

Voraussetzung: Discord-Webhook (siehe webhook-setup.md) + Webhook-Permission für @everyone Patterns: Stream Online Trigger + Discord Basic Webhook Sub-Actions: 1-3

Action: [Event] Discord Live Notification

Trigger

Twitch → Channel → Stream Online

Verfügbare Variablen vom Trigger

Variable Inhalt
%game% Aktuelle Kategorie
%gameId% Game-ID
%startedAt% Stream-Start-Timestamp
%tags% Stream-Tags
%broadcastUser% Display Name
%broadcastUserName% Login

Sub-Action 1: Discord Basic Webhook

Pfad: Integrations → Discord → Basic Webhook

Feld Wert
Webhook Name Live-Notification
Webhook URL (deine URL)
Username AzaCraft Stream
Content siehe unten

Content (mehrzeilig):

@everyone 🔴 **%broadcastUser% IS LIVE!**

🎮 Game: **%game%**
🔗 https://twitch.tv/%broadcastUserName%

Jetzt joinen und chillen 👀

Action-Tree

[Event] Discord Live Notification  (Trigger: Stream Online)
└── 1. Discord Basic Webhook:
       Content: "@everyone 🔴 **%broadcastUser% IS LIVE!**\n🎮 %game%\n🔗 ..."

Voraussetzung für @everyone

Webhook muss in Discord die Permission Mention @everyone haben:

  1. Channel-Settings → Permissions
  2. Role @everyone oder Webhook-Role
  3. Mention @everyone, @here, and All Roles: ✅

Sonst rendert Discord @everyone als reinen Text statt Ping.

Variante: Mit Role-Ping statt @everyone

Höflicher als @everyone — nur interessierte User pingen:

  1. In Discord eine @Stream-Notifications Rolle anlegen
  2. Self-Assign-Channel wo User die Rolle selbst aktivieren können (mit Reaction-Roles-Bot oder Discord's eigene Onboarding)
  3. Role-ID via Rechtsklick auf Rolle (Developer Mode an)
  4. Im Webhook-Content:
<@&123456789012345678> 🔴 **%broadcastUser% IS LIVE!**

So bekommen nur die Notifications die explizit wollen.

Variante: Mit Stream-Title als Header

Content: |
  <@&123456789012345678> 🔴 **%broadcastUser% IS LIVE!**

  📺 **%streamTitle%**
  🎮 %game%
  🔗 https://twitch.tv/%broadcastUserName%

(Stream-Title ist via Stream-Online-Trigger evtl. nicht direkt verfügbar. Bei Bedarf vorher Twitch → User → Get User Info for Target mit Self-Lookup laufen lassen — siehe !title Doku.)

Bessere Reihenfolge mit Title-Lookup:

[Event] Discord Live Notification
├── 1. Get User Info for Target (User Login = %broadcastUserName%)
│      Setzt %targetChannelTitle%
└── 2. Discord Basic Webhook:
       Content: "<@&...> 🔴 IS LIVE!\n📺 %targetChannelTitle%\n🎮 %game%\n🔗 ..."

Variante: Mit Thumbnail / Stream-Preview

Twitch generiert Stream-Thumbnails wie:

https://static-cdn.jtvnw.net/previews-ttv/live_user_<username>-320x180.jpg?{timestamp}

{timestamp} als Cache-Buster. Im Discord-Content:

Content: |
  @everyone 🔴 LIVE!
  https://static-cdn.jtvnw.net/previews-ttv/live_user_azazelitv-1280x720.jpg?_=%startedAt%

  🎮 %game%
  🔗 https://twitch.tv/%broadcastUserName%

Discord rendert dann den Stream-Screenshot als Preview-Image automatisch.

Variante: Anti-Spam bei "Stream-Offline-Online-Glitch"

Manchmal flapped Twitch's Stream-Online-Status (offline → online → offline → online). Würde 3× pingen — nervig.

Lösung: Edge-Detection mit Persisted Global:

[Event] Discord Live Notification
├── 1. Global (Get): lastStreamStartNotified → lastNotify
├── 2. Set Argument: nowEpoch = $unix-now()$   (Inline Func)
├── 3. Set Argument: timeSince = $sub(%nowEpoch%, %lastNotify%)$
├── 4. If/Else: %timeSince% Less Than 3600   (1 Stunde)
│   └── Break   (zu früh — wurde grad erst gepingt)
├── 5. Global (Set): lastStreamStartNotified = %nowEpoch% (Persisted)
└── 6. Discord Basic Webhook: "...IS LIVE..."

Pingt nicht mehr als 1× pro Stunde. Inline-Function-Syntax kann variieren, ggf. mit Pattern-Math anpassen.

Stream-Offline-Notification (optional)

Wenn du auch "Stream-Ende" posten willst (oft NICHT empfehlenswert weil spammy):

Action: [Event] Discord Stream End

Trigger: Twitch → Channel → Stream Offline

└── Discord Basic Webhook:
     Username: AzaCraft Stream
     Content: 🔴 Stream ist vorbei. Danke fürs Zuschauen! VOD: https://twitch.tv/%broadcastUserName%/videos

Persönliche Empfehlung: kein @everyone bei Stream-End, nur Plain-Post oder Role-Ping.

Häufige Fallen

  • @everyone wirkt nicht als Ping — Webhook hat nicht die Permission. Channel-Settings prüfen
  • Twitch-Status-Flicker — Stream-Online feuert mehrfach kurz hintereinander → Mehrfach-Ping. Edge-Detection nutzen
  • Discord-Preview lädt nicht — wenn Twitch-URL gerade nicht erreichbar, lädt Discord-Embed nicht. Manuell refreshen
  • Mit @everyone in zu vielen Channels spammen — Discord-Server-Rules respektieren, evtl. nur in #announcements

Erweiterung: Auto-Delete bei Stream-End

Variante mit Cleanup: Live-Message wird beim Stream-End gelöscht (Discord findet's saubererer).

Aber: Discord Basic Webhook in SB unterstützt nur POST (kein DELETE). Volles Message-Management braucht C# oder einen Discord-Bot — über Scope.

Pragmatisch: alte Live-Notifications einfach im Channel stehen lassen, ist ja Historie.

Quellen