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 Trigger → Twitch → 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
Persistedaktiviert ist. Heißt: auch nach Neustart zeigt!lastclipden 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:
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.
So importierst du:
- Streamer.bot öffnen → Tab Actions
- Unten Import klicken
- Den Code-Block oben komplett kopieren und ins Dialog-Feld einfügen
- Import drücken → Action erscheint in der Liste
- Im Tab Commands ggf. die Verknüpfung mit der Action prüfen
- Wichtig: !clip-Action separat um die Global-Set Sub-Action erweitern (siehe oben), sonst weiß !lastclip nichts
Quellen¶
- Global (Get) Doku: https://docs.streamer.bot/api/sub-actions/core/globals/global-get
- Global (Set) Doku: https://docs.streamer.bot/api/sub-actions/core/globals/global-set
- If/Else Doku: https://docs.streamer.bot/api/sub-actions/core/logic/if-else
- Globals Pattern: Globals Pattern