Zum Inhalt

TTS für Sub/Bits-Donations

Bei Subs und Bits liest Speaker.bot die Message automatisch vor. Klassisches "ehrenvolles Donation-Acknowledgement".

Voraussetzung: Speaker.bot verbunden (siehe setup.md) Patterns: Twitch-Event-Trigger + Speak Sub-Action Sub-Actions: 1-3

Sub-Message vorlesen

Twitch Subscription mit Resub-Message → TTS liest die Message vor.

Action: [Event] Sub TTS

Trigger: Twitch → Subscriptions → Subscription ODER Twitch → Subscriptions → Resubscription

[Event] Sub TTS
├── 1. If/Else: %message% Is Null or Empty
│   └── Break   (kein Text → nichts vorlesen)
└── 2. Speak:
       Voice Alias: Default
       Message: "Sub-Message von %user%: %message%"
       Pass Through Bad Word Filter: ❌

Resub-Messages haben oft Text — eine schöne Bestätigung wenn Bot das vorliest.

Bits-Message vorlesen (ab Threshold)

Action: [Event] Bits TTS

Trigger: Twitch → Chat → Cheer mit Min 100

(Nur bei mind. 100 Bits, sonst spammt's bei kleinen Cheers.)

[Event] Bits TTS
├── 1. If/Else: %message% Is Null or Empty
│   └── Break
├── 2. If/Else: %isAnonymous% Equals true
│   ├── Set Argument: speaker = "Anonymous"
│   └── (kein Break — weiter zur Speak)
├── 3. Set Argument: speaker = "%user%"   (only runs if not anonymous — siehe Pattern set-argument-fallback)
└── 4. Speak:
       Voice Alias: Default
       Message: "%bits% Bits von %speaker%: %message%"

Gift-Sub-Notification per TTS

Action: [Event] Gift Sub TTS

Trigger: Twitch → Subscriptions → Gift Subscription

[Event] Gift Sub TTS
├── 1. If/Else: %fromGiftBomb% Equals true
│   └── Break   (Bomb wird separat behandelt, nicht jeden Sub einzeln)
├── 2. If/Else: %anonymous% Equals true
│   ├── Speak: "Anonymous gifted a sub to %recipientUser%"
│   └── Break
└── 3. Speak: "%user% gifted a sub to %recipientUser%"

Variante: Voice je nach Sub-Tier

[Event] Sub TTS
├── 1. Set Argument: voiceAlias = "Default"
├── 2. If/Else: %tier% Equals (Ignore Case) "tier 3"
│   └── Set Argument: voiceAlias = "Special"   (z.B. eine ElevenLabs-Premium-Voice)
├── 3. Speak:
│      Voice Alias: %voiceAlias%
│      Message: "%user% (%tier%) sagt: %message%"

T3-Subs bekommen die schicke Voice, T1 die Standard.

Variante: Chat-Command für Mods

Mod kann beliebigen Text vorlesen lassen — gut für Custom-Donation-Reads:

Action: [Cmd] !tts

[Cmd] !tts
├── 1. If/Else: %rawInput% Is Null or Empty
│   ├── Send Message: "@%user% nutze !tts <text>"
│   └── Break
└── 2. Speak:
       Voice Alias: Default
       Message: %rawInput%
       Pass Through Bad Word Filter: ❌

Command-Settings: | Feld | Wert | |------|------| | Grant Type | Allow | | Groups | Moderators | | Global Cooldown | 5 | | User Cooldown | 15 |

Variante: Channel-Point-Reward für TTS

Reward "Lass den Bot deinen Text vorlesen" für 500 Channel-Points:

[Reward] TTS-Reward
├── 1. If/Else: %rawInput% Is Null or Empty
│   ├── Update Redemption Status: Cancel
│   ├── Send Message: "@%user% — Reward braucht Text. Refund."
│   └── Break
├── 2. Speak:
│      Voice Alias: Default
│      Message: "%user% sagt: %rawInput%"
│      Pass Through Bad Word Filter: ❌
├── 3. Send Message: "🔊 @%user% hat TTS getriggert"
└── 4. Update Redemption Status: Fulfilled

Reward in SB anlegen mit User Input Required = true.

Anti-Spam-Filter

Damit nicht alle 2 Sekunden TTS läuft (Stream-Hölle):

  • Cooldown im Reward/Command — 30+ Sekunden Pro-User
  • Length-Limit in der Message: nur erste 200 Zeichen vorlesen via $substr(%message%, 0, 200)$
  • Blacklist von Wörtern — bessergesagt Speaker.bot's Bad-Word-Filter aktivieren
  • TTS-Disable per !shutup Command:
[Cmd] !shutup  (Mod-Only)
└── Stop Speaking

Eine Sekunde alles TTS abbrechen.

Häufige Fallen

  • TTS-Queue voll — wenn 10 Cheers in 5s, hängt TTS minutenlang fest. Clear Pending Sub-Action als Backup
  • Bad Words werden gefiltert — wenn dein Stream OK ist mit Profanität, Toggle "Pass Through Bad Word Filter" aktivieren (Verantwortung deine)
  • Audio-Routing fehlt — Wenn TTS nur auf deinen Speakern und nicht im Stream-Audio: Speaker.bot Audio-Output auf Virtual Audio Cable, OBS holt sich's da
  • Bot hängt im TTS — ein Sub-Restart (oder Stop Speaking) hilft

Quellen