Alert-Text-Vorlagen-System mit Variablen #79

Open
opened 2026-07-15 20:41:29 +02:00 by frank · 2 comments
Owner

Kontext

Default-Animationen existieren (#26), aber die Texte sind statisch. Streamer wollen eigene Texte pro Event-Typ mit dynamischen Variablen (Username, Betrag, Tier, etc.), um ihre Markenstimme durchzusetzen und pers\u00f6nliche Nachrichten zu gestalten.

Ziel

Ein Text-Template-System f\u00fcr Alert-Texte mit Variablen-Substitution:

1. Template-Engine

  • Platzhalter-Variablen pro Event-Typ (siehe Tabelle unten)
  • Mehrere Texte pro Event: Liste von Texten, aus denen zuf\u00e4llig oder rotierend gew\u00e4hlt wird
  • Fallback: Wenn eine Variable nicht verf\u00fcgbar ist \u2192 leerer String oder konfigurierbarer Default

2. Verf\u00fcgbare Variablen

Variable Event-Typen Beschreibung
{user} Alle Username des Ausl\u00f6sers
{display_name} Alle Anzeigename (kann abweichen)
{count} Bits, Raid, Sub-Bomb Anzahl (Bits, Viewer, Gift-Subs)
{sub_tier} Sub Sub-Tier: Prime, Tier 1, Tier 2, Tier 3
{sub_tier_emoji} Sub Emoji pro Tier
{months} Sub (Resub) Monate seit erstem Sub
{streak} Sub (Resub) Monate in Folge (Streak)
{message} Sub, Bits, Raid Benutzerdefinierte Nachricht
{bits} Cheer Bit-Anzahl
{bits_formatted} Cheer Formatierte Zahl (1.000, 5.000, 100.000)
{raider} Raid Raid-Anf\u00fchrer
{viewers} Raid Anzahl mitgebrachter Viewer
{gifter} Gift-Sub Schenker (leer bei anonym)
{total_gifts} Sub-Bomb Gesamtanzahl verschenkter Subs

3. Admin-UI

  • Pro Event-Typ: Liste von Textvorlagen (hinzuf\u00fcgen/bearbeiten/l\u00f6schen)
  • Inline-Vorschau: Zeigt den Text mit Beispielwerten
  • Zufalls-Modus: Zuf\u00e4llig aus Liste vs. Rotierend vs. Nur ersten verwenden
  • Variables-Insert-Picker: Dropdown zum Einf\u00fcgen von Variablen

4. Standard-Vorlagen (ausliefern)

  • Follow: {user} folgt jetzt! / Welcome {user}!
  • Sub: {user} ist {sub_tier_emoji} {sub_tier}! Danke!
  • Resub: {user} seit {months} Monaten {sub_tier} \u2013 Danke!
  • Gift-Sub: {gifter} verschenkt {count}x {sub_tier} an {user}!
  • Sub-Bomb: {user} verschenkt {total_gifts} Subs! Wahnsinn!
  • Bits: {user} cheered {bits_formatted} Bits!
  • Raid: {raider} raidet mit {viewers} Viewern! Willkommen!

Technische Leitplanken

  • Kein externes Template-Crate n\u00f6tig (einfache {variable} \u2192 Value Substitution)
  • Templates in SQLite unter alert_templates-Tabelle
  • Sicherheit: Variablen werden HTML-escaped im Overlay (kein XSS via Username)
  • Lazy-Loading: Templates werden bei Alert-Trigger aus DB geladen

Akzeptanz

  • Textvorlagen mit Variablen werden pro Event-Typ gespeichert und angewendet
  • Mehrere Texte pro Event-Typ mit Auswahl-Modus (Zufall/Rotation/Fest)
  • Inline-Vorschau in der Admin-UI mit Beispiel-Daten
  • HTML-Escaping von User-Input (kein XSS)
  • Standard-Vorlagen werden beim ersten Start ausgeliefert
  • Fallback auf Standardtext, wenn keine Vorlage konfiguriert ist
## Kontext Default-Animationen existieren (#26), aber die Texte sind statisch. Streamer wollen **eigene Texte** pro Event-Typ mit **dynamischen Variablen** (Username, Betrag, Tier, etc.), um ihre Markenstimme durchzusetzen und pers\u00f6nliche Nachrichten zu gestalten. ## Ziel Ein **Text-Template-System** f\u00fcr Alert-Texte mit Variablen-Substitution: ### 1. Template-Engine - Platzhalter-Variablen pro Event-Typ (siehe Tabelle unten) - **Mehrere Texte pro Event**: Liste von Texten, aus denen zuf\u00e4llig oder rotierend gew\u00e4hlt wird - **Fallback**: Wenn eine Variable nicht verf\u00fcgbar ist \u2192 leerer String oder konfigurierbarer Default ### 2. Verf\u00fcgbare Variablen | Variable | Event-Typen | Beschreibung | |----------|-------------|-------------| | `{user}` | Alle | Username des Ausl\u00f6sers | | `{display_name}` | Alle | Anzeigename (kann abweichen) | | `{count}` | Bits, Raid, Sub-Bomb | Anzahl (Bits, Viewer, Gift-Subs) | | `{sub_tier}` | Sub | Sub-Tier: Prime, Tier 1, Tier 2, Tier 3 | | `{sub_tier_emoji}` | Sub | Emoji pro Tier | | `{months}` | Sub (Resub) | Monate seit erstem Sub | | `{streak}` | Sub (Resub) | Monate in Folge (Streak) | | `{message}` | Sub, Bits, Raid | Benutzerdefinierte Nachricht | | `{bits}` | Cheer | Bit-Anzahl | | `{bits_formatted}` | Cheer | Formatierte Zahl (1.000, 5.000, 100.000) | | `{raider}` | Raid | Raid-Anf\u00fchrer | | `{viewers}` | Raid | Anzahl mitgebrachter Viewer | | `{gifter}` | Gift-Sub | Schenker (leer bei anonym) | | `{total_gifts}` | Sub-Bomb | Gesamtanzahl verschenkter Subs | ### 3. Admin-UI - Pro Event-Typ: Liste von Textvorlagen (hinzuf\u00fcgen/bearbeiten/l\u00f6schen) - **Inline-Vorschau**: Zeigt den Text mit Beispielwerten - **Zufalls-Modus**: Zuf\u00e4llig aus Liste vs. Rotierend vs. Nur ersten verwenden - **Variables-Insert-Picker**: Dropdown zum Einf\u00fcgen von Variablen ### 4. Standard-Vorlagen (ausliefern) - **Follow**: `{user} folgt jetzt!` / `Welcome {user}!` - **Sub**: `{user} ist {sub_tier_emoji} {sub_tier}! Danke!` - **Resub**: `{user} seit {months} Monaten {sub_tier} \u2013 Danke!` - **Gift-Sub**: `{gifter} verschenkt {count}x {sub_tier} an {user}!` - **Sub-Bomb**: `{user} verschenkt {total_gifts} Subs! Wahnsinn!` - **Bits**: `{user} cheered {bits_formatted} Bits!` - **Raid**: `{raider} raidet mit {viewers} Viewern! Willkommen!` ## Technische Leitplanken - Kein externes Template-Crate n\u00f6tig (einfache `{variable}` \u2192 Value Substitution) - Templates in SQLite unter `alert_templates`-Tabelle - Sicherheit: Variablen werden HTML-escaped im Overlay (kein XSS via Username) - Lazy-Loading: Templates werden bei Alert-Trigger aus DB geladen ## Akzeptanz - [x] Textvorlagen mit Variablen werden pro Event-Typ gespeichert und angewendet - [x] Mehrere Texte pro Event-Typ mit Auswahl-Modus (Zufall/Rotation/Fest) - [x] Inline-Vorschau in der Admin-UI mit Beispiel-Daten - [x] HTML-Escaping von User-Input (kein XSS) - [x] Standard-Vorlagen werden beim ersten Start ausgeliefert - [x] Fallback auf Standardtext, wenn keine Vorlage konfiguriert ist
frank self-assigned this 2026-07-15 20:41:29 +02:00
Author
Owner

Zugewiesen an codex agent via agent:ready label.

Zugewiesen an `codex` agent via `agent:ready` label.
frank removed their assignment 2026-07-15 20:59:33 +02:00
Collaborator

🤖 forge agent started

  • Agent: codex
  • Model: gpt-5.6-sol
  • Mode: pr
  • Trigger: assignee=agent|+4 mapped
  • Open ToDos: 6

Alert-Text-Vorlagen-System mit Variablen — Default-Animationen existieren (#26), aber die Texte sind statisch. Streamer wollen eigene Texte pro Event-Typ mit dynamischen Variablen (Username, Betrag, Tier, etc.), um ihre Markenstimme…

🤖 **forge agent started** - Agent: `codex` - Model: `gpt-5.6-sol` - Mode: `pr` - Trigger: `assignee=agent|+4 mapped` - Open ToDos: 6 Alert-Text-Vorlagen-System mit Variablen — Default-Animationen existieren (#26), aber die Texte sind statisch. Streamer wollen **eigene Texte** pro Event-Typ mit **dynamischen Variablen** (Username, Betrag, Tier, etc.), um ihre Markenstimme…
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
frank/streamertool#79
No description provided.