Pattern: Get User Info for Target¶
!cmd @bob — User-Lookup für den Erwähnten. Setzt %targetUser%, %targetUserName% etc.
Pfad: Twitch → User → Get User Info for Target
Doku: https://docs.streamer.bot/api/sub-actions/twitch/user/get-user-info-for-target
Feld¶
| Feld | Bedeutung |
|---|---|
| User Login | Login des Users (ohne @). Variable wie %input0% oder eigenes Argument |
Sonst nichts. Sub-Action macht den API-Call und füllt jede Menge Argumente.
Output-Variablen¶
| Variable | Inhalt |
|---|---|
%targetUser% |
Display Name (mit Caps) |
%targetUserName% |
Login (lowercase) |
%targetUserId% |
Twitch User-ID |
%targetUserType% |
"affiliate" / "partner" / leer |
%targetIsAffiliate% |
bool |
%targetIsPartner% |
bool |
%targetIsModerator% |
bool |
%targetIsVip% |
bool |
%targetIsSubscribed% |
bool |
%targetSubscriptionTier% |
1000/2000/3000 (T1/T2/T3) |
%targetChannelTitle% |
Aktueller Stream-Titel |
%targetDescription% |
Channel-Beschreibung |
%game% |
Aktuelles Game/Category |
%gameId% |
Game-ID |
%accountAge% |
Account-Alter in Sekunden |
%createdAt% |
Account-Erstelldatum |
%addTargetResult% |
bool — ob Lookup erfolgreich |
Problem: %input0% enthält das @¶
Wenn User !iq @bob tippt, ist %input0% = @bob. Twitch-API will den Login OHNE @.
Lösung: Inline-Function $replace:
| Feld | Wert |
|---|---|
| User Login | $replace(%input0%, @, )$ |
Klein, aber wichtig.
Problem: User tippt !iq ohne Target¶
%input0% ist leer. Get User Info for Target schlägt fehl. Lösung: Fallback auf den Sender.
Variante 1: If/Else davor¶
1. If/Else: %input0% Is Null or Empty
├─ Set Argument: targetLogin = %userName%
└─ Break (Nein, kein Break — Action soll weiterlaufen!)
2. If/Else: %input0% Is Null or Empty NEGIEREN — geht nicht direkt
...
Schwierig weil If/Else nur Then-Pfad hat. Bessere Lösung:
Variante 2: Set Argument mit Default zuerst¶
1. Set Argument: targetLogin = %userName% (Default = Sender)
2. If/Else: %input0% Is Null or Empty NICHT erfüllt
→ Wie machen? Streamer.bot bietet Operations-Toggle nicht.
Streamer.bot v1.0.4 hat tatsächlich kein "negiertes Is Null or Empty". Aber: nutze Is Null or Empty und kombiniere mit Set Argument im Standard-Branch.
Sauberste Lösung:
1. Set Argument: targetLogin = $replace(%input0%, @, )$
2. If/Else: %targetLogin% Is Null or Empty
├─ Set Argument: targetLogin = %userName%
3. Get User Info for Target (User Login = %targetLogin%)
Schritt 1 setzt zuerst den Default mit Replace. Wenn %input0% leer war, ist targetLogin jetzt auch leer. Schritt 2 prüft das und überschreibt mit %userName%. Schritt 3 nutzt das Ergebnis.
Komplettes Pattern: Target mit Fallback¶
Action-Tree für jeden Target-Command:
[Cmd] !x
├── 1. Set Argument: targetLogin = $replace(%input0%, @, )$
├── 2. If/Else: %targetLogin% Is Null or Empty
│ └─ Set Argument: targetLogin = %userName%
├── 3. Get User Info for Target (User Login = %targetLogin%)
├── 4. If/Else: %addTargetResult% Equals false
│ ├─ Send Message: "@%user% den User gibt's nicht"
│ └─ Break
└── 5. Send Message: "...%targetUser%..."
Schritt 4 fängt den Fall ab dass der Login nicht existiert (Tippfehler).
Tipp: Sender als Target gewollt¶
Wenn der Command für sich selbst gedacht ist (z.B. !iq ohne @) ist userName als Fallback OK. Wenn der Command IMMER ein Target braucht (z.B. !hug @bob):
Statt Fallback → Hilfetext + Break.
Häufige Fallen¶
%input0%mit@an Sub-Action gegeben →addTargetResult=false. Immer$replace(%input0%, @, )$verwenden- Get User Info NACH Send Message — die Variablen sind dann noch leer. Reihenfolge: Lookup, dann Antwort
- Self-Target Spam — wenn
%input0%leer und Fallback auf Sender → User triggert für sich selbst. Bewusste Entscheidung treffen
Verwendung in Commands¶
- commands/04-iq-range-cascade.md —
!iq @user - commands/05-rose-random-target.md —
!rose @user