Zum Inhalt

Command: !lastclip

Postet den zuletzt erstellten Twitch-Clip nochmal in den Chat. Praktisch wenn jemand zu spät in den Stream kommt oder den Clip-Link verpasst hat.

Voraussetzung: Der !clip Command muss die URL in einen persisted Global schreiben — Anleitung dafür unten unter Setup für !clip.

Patterns: Global (Get) + If/Else (Empty-Check) + Send Message Sub-Actions: 4 Cooldown: User 30s / Global 10s

Action: [Cmd] !lastclip

Sub-Action 1: Global (Get) — letzten Clip lesen

Pfad: Core → Globals → Global (Get)

Feld Wert
Variable Name lastClipUrl
Default Value (leer)
Source Global
Persisted Persisted
Variable Name (Destination) lastUrl

Nach diesem Schritt steht %lastUrl% als lokales Argument bereit.

Sub-Action 2: If/Else — kein Clip vorhanden

Pfad: Core → Logic → If/Else

Feld Wert
Input %lastUrl%
Operation Is Null or Empty
Value (leer)

Wenn leer → Then-Branch (Sub-Actions 3+4).

Sub-Action 3: Send Message (kein Clip) — IM Then-Branch

Pfad: Twitch → Chat → Send Message to Channel

Feld Wert
Message @%user% heute wurde noch nichts geclippt. Mach den ersten mit !clip 🎬
Send using bot account aktiv
Fallback to Broadcaster aktiv

Sub-Action 4: Break — IM Then-Branch

Pfad: Core → Logic → Break

Beendet die Action damit Sub-Action 5 nicht läuft.

Sub-Action 5: Send Message (Erfolg)

Pfad: Twitch → Chat → Send Message to Channel

Feld Wert
Message Letzter Clip: %lastUrl%
Send using bot account aktiv
Fallback to Broadcaster aktiv

Action-Tree

[Cmd] !lastclip
├── 1. Global (Get): lastClipUrl → %lastUrl%   [Source: Global, Persisted]
├── 2. If/Else: %lastUrl% Is Null or Empty
│   ├── 3. Send Message: "@%user% heute wurde noch nichts geclippt..."
│   └── 4. Break
└── 5. Send Message: "Letzter Clip: %lastUrl%"

Command-Einstellungen

Feld Wert
Name !lastclip — Letzten Clip zeigen
Group AzaCraft
Commands !lastclip
!last
!letzterclip
Text Matching Mode Basic
Location Start
Sources nur Twitch Message angehakt
Ignore Bot Account aktiv
Ignore Internal Messages aktiv
Case Sensitive aus
Global Cooldown 10
User Cooldown 30
Permissions (leer = alle)

In der Action: Triggers-Tab → + Add TriggerTwitch → Commands → Command Triggered!lastclip auswählen.

Setup für !clip

Damit !lastclip funktioniert, muss !clip die erstellte URL in den persisted Global schreiben. Öffne die [Cmd] !clip Action und füge zwischen der If/Else-Success-Check und der finalen Send Message eine neue Sub-Action ein:

Neue Sub-Action in !clip: Global (Set) — URL merken

Pfad: Core → Globals → Global (Set)

Feld Wert
Variable Name lastClipUrl
Value %createClipUrl%
Mode Value
Destination Global
Persisted Persisted

Erweiterter !clip Action-Tree

[Cmd] !clip
├── 1. Create Clip (Duration 30)
├── 2. If/Else: %createClipSuccess% Equals false
│   ├── 3. Send Message: "@%user% Clip-Erstellung hat nicht geklappt..."
│   └── 4. Break
├── 5. Global (Set): lastClipUrl = %createClipUrl%   [Global, Persisted]   ← NEU
└── 6. Send Message: "@%user% hat geclippt: %createClipUrl%"

Die neue Sub-Action 5 sitzt AUSSERHALB des If/Else (nicht eingerückt), läuft also nur im Erfolgsfall (weil Break im Fehlerfall die Action schon beendet hat).

Verwendungsbeispiele

Chat-Eingabe Wann Resultat
!lastclip Nach !clip wurde mind. einmal erfolgreich ausgeführt Postet die zuletzt gemerkte Clip-URL
!last Gleiches Alias
!lastclip Vor dem ersten erfolgreichen !clip nach SB-Restart "@user heute wurde noch nichts geclippt..."
!lastclip (innerhalb 30s vom selben User) Cooldown blockt

Edge-Cases

  • Global überlebt SB-Restart weil Persisted aktiviert ist. Heißt: auch nach Neustart zeigt !lastclip den letzten Clip der letzten Session
  • Global wird bei jedem !clip überschrieben — es bleibt immer nur der NEUESTE. Wenn du eine Historie willst → siehe Erweiterungs-Ideen
  • Clip auf Twitch gelöscht → Link ist tot, aber die URL bleibt im Global. SB merkt das nicht
  • Empty-Default-Wert — Default Value in Global (Get) ist leer, weil wir explizit auf Empty prüfen wollen. Nicht "keiner" oder "none" reinschreiben, sonst greift der Empty-Check nicht

Erweiterungs-Ideen

Auch Clip-Title mitspeichern

Im erweiterten !clip nicht nur die URL, sondern auch Title in einen zweiten Global:

Global (Set): lastClipTitle = %createClipTitle%   [Global, Persisted]

In !lastclip dann: Letzter Clip: "%lastClipTitle%" — %lastUrl%

Mehrere Clips speichern (Last 3)

Aufwendig ohne C#, aber machbar mit nummerierten Globals:

!clip (im Erfolgs-Pfad):
1. Global (Get): lastClipUrl_2 → tmp2   [Persisted]
2. Global (Set): lastClipUrl_3 = %tmp2%   [Persisted]
3. Global (Get): lastClipUrl_1 → tmp1   [Persisted]
4. Global (Set): lastClipUrl_2 = %tmp1%   [Persisted]
5. Global (Set): lastClipUrl_1 = %createClipUrl%   [Persisted]

Dann !clips mit allen drei Werten posten. Etwas hackig, aber kein C# nötig.

Discord-Reminder im !lastclip

Wenn jemand !lastclip ruft und der Clip älter als 1 Stunde ist → zusätzliche Discord-Webhook-Notification. Braucht aber Timestamp-Vergleich, was über reine Sub-Actions schwierig ist.

Auto-Posten nach jedem Stream-Start

Trigger Twitch → Channel → Stream Online mit Action die !lastclip-Logik aufruft → bei Stream-Start wird der letzte Clip der letzten Session als Welcome-Back gepostet.

Import-Code

Streamer.bot Export-String

Falls du nicht klicken willst — hier kommt der Export-String rein sobald der Command bei uns getestet und exportiert ist.

[Hier wird der Streamer.bot Export-String eingefügt]

So importierst du:

  1. Streamer.bot öffnen → Tab Actions
  2. Unten Import klicken
  3. Den Code-Block oben komplett kopieren und ins Dialog-Feld einfügen
  4. Import drücken → Action erscheint in der Liste
  5. Im Tab Commands ggf. die Verknüpfung mit der Action prüfen
  6. Wichtig: !clip-Action separat um die Global-Set Sub-Action erweitern (siehe oben), sonst weiß !lastclip nichts

Quellen