Command: !rps (Rock Paper Scissors)¶
Schere-Stein-Papier. User wählt mit !rps schere/stein/papier, Bot würfelt eigenen Wert und vergleicht.
Patterns: If/Else (Input validieren) + Get Random Number + If/Else (Vergleich) + Send Message Sub-Actions: 8-10
Action: [Cmd] !rps¶
Sub-Action 1: Set Argument — User-Wahl normalisieren¶
| Feld | Wert |
|---|---|
| Variable Name | userChoice |
| Value | $lower(%input0%)$ |
Sub-Action 2: If/Else — Gültige Wahl?¶
Wir akzeptieren schere, stein, papier (auch s, p als Shortcut wäre möglich, aber lassen wir's klar).
Wenn NICHT match: Then-Branch mit Hilfe + Break.
Sub-Action 3 (im Then von 2): Hilfe¶
Sub-Action 4: Get Random Number — Bot-Wahl¶
| Feld | Wert |
|---|---|
| Type | Between |
| Min | 1 |
| Max | 3 |
%randomNumber% ist 1, 2 oder 3.
Sub-Action 5: Set Argument — Bot-Wahl als Text¶
5. If/Else: %randomNumber% Equals 1
└─ Set Argument: botChoice = schere
6. If/Else: %randomNumber% Equals 2
└─ Set Argument: botChoice = stein
7. If/Else: %randomNumber% Equals 3
└─ Set Argument: botChoice = papier
Sub-Action 6: If/Else — Unentschieden¶
8. If/Else: %userChoice% Equals %botChoice%
├── Send Message: "🤝 @%user% Bot hat auch %botChoice% — Unentschieden!"
└── Break
Sub-Action 7: If/Else — User gewinnt¶
Schere schlägt Papier, Stein schlägt Schere, Papier schlägt Stein. Drei Win-Conditions:
9. If/Else: %userChoice% Equals schere
└─ If/Else: %botChoice% Equals papier
├── Send Message: "✂️ @%user% Schere schlägt Papier — du gewinnst!"
└── Break
10. If/Else: %userChoice% Equals stein
└─ If/Else: %botChoice% Equals schere
├── Send Message: "🪨 @%user% Stein schlägt Schere — du gewinnst!"
└── Break
11. If/Else: %userChoice% Equals papier
└─ If/Else: %botChoice% Equals stein
├── Send Message: "📄 @%user% Papier schlägt Stein — du gewinnst!"
└── Break
Sub-Action 8: Send Message — Bot gewinnt (Default)¶
Wenn keine der Win-Conditions matcht und nicht Unentschieden → Bot gewinnt.
Action-Tree¶
[Cmd] !rps
├── 1. Set Argument: userChoice = $lower(%input0%)$
├── 2. If/Else: %userChoice% Regex Match ^(schere|stein|papier)$
│ (NICHT match → Hilfe-Branch via 2.Else, was wir hier oben anders aufbauen)
│
├── (Validation via If/Else mit "Is Null or Empty" als simpler Check)
├── 3. Get Random Number (1, 3)
├── 4-6. Bot-Wahl als Text setzen
├── 7. Unentschieden-Check
├── 8-10. Win-Conditions
└── 11. Default: Bot gewinnt
Vereinfachte Validation (statt Regex)¶
Streamer.bot If/Else hat kein direktes "NOT match" für Regex einfach. Pragmatisch mit 3 If/Else als "Whitelist":
1. Set Argument: validChoice = false
2. If/Else: %userChoice% Equals schere
└─ Set Argument: validChoice = true
3. If/Else: %userChoice% Equals stein
└─ Set Argument: validChoice = true
4. If/Else: %userChoice% Equals papier
└─ Set Argument: validChoice = true
5. If/Else: %validChoice% Equals false
├── Send Message: "@%user% nutze !rps schere | stein | papier"
└── Break
Etwas verbose aber funktioniert garantiert.
Command-Einstellungen¶
| Feld | Wert |
|---|---|
| Name | !rps |
| Group | AzaCraft Fun |
| Commands | !rps!ssp (schere-stein-papier deutsch)!rockpaperscissors |
| Sources | Twitch Message |
| Global Cooldown | 0 |
| User Cooldown | 15 |
Verwendungsbeispiele¶
| Chat | Resultat |
|---|---|
!rps schere |
"🤝 @user Bot hat auch schere — Unentschieden!" oder Win/Loss |
!rps Stein |
(case-insensitive durch $lower()$) |
!rps banana |
"@user nutze !rps schere |
!rps |
gleiches |
Erweiterung: Per-User-Stats¶
Win/Loss/Draw pro User tracken:
+ Global (Set) Increment: rpsWins / rpsLosses / rpsDraws je nach Outcome
+ User (redeemer) Persisted
Plus separater Command !rpsstats der Win/Loss-Ratio postet (siehe Globals Pattern).
Quellen¶
- Get Random Number: patterns/05-get-random-number.md
- If/Else: patterns/02-if-else.md