Zum Inhalt springen
  • Dunkel
  • Hell
  • System

!searchquote

!searchquote

Pro

!findquote !sq

Sucht alle Quotes nach einem Stichwort und postet die erste passende. Nutzt C# Execute Code, weil Streamer.bot keine native Quote-Search hat.

Steps
3
Cooldown
30s/User
Cooldown
10sglobal
Zugriff
Public

Streamer.bot hat Get Quote (Random/Specific) aber keinen Search-by-Text. Wir lösen das mit einem C# Execute Code Sub-Action, das CPH.GetQuotes() loop’t.

If/Else: Empty Query

Core Logic If/Else
Input %rawInput%
Operation Is Null or Empty
Then

Send Message to Channel

Twitch Chat Send Message to Channel
Message @%user% nutze !searchquote <stichwort>
Then

Break

Core Logic Break

Stoppt die laufende Action. Alle folgenden Sub-Actions in derselben Action werden übersprungen.

Execute Code. Quote Search

Core C# Code Execute C# Code

Loop't alle Quotes via CPH.GetQuotes() und findet die erste mit Match. Setzt %foundQuote%, %foundQuoteId%, %foundQuoteUser%, %foundQuoteGame%.

Code (siehe unten) siehe nächster Abschnitt
public class CPHInline
{
public bool Execute()
{
string query = args["rawInput"].ToString().ToLower();
var quotes = CPH.GetQuotes();
foreach (var q in quotes)
{
if (q.Quote.ToLower().Contains(query))
{
CPH.SetArgument("foundQuote", q.Quote);
CPH.SetArgument("foundQuoteId", q.Id);
CPH.SetArgument("foundQuoteUser", q.UserName);
CPH.SetArgument("foundQuoteGame", q.Game);
CPH.SetArgument("foundQuoteTime", q.CreatedAt.ToString("dd.MM.yyyy"));
CPH.SetArgument("foundQuoteMatch", "true");
return true;
}
}
CPH.SetArgument("foundQuoteMatch", "false");
return true;
}
}

If/Else: Kein Match

Core Logic If/Else
Input %foundQuoteMatch%
Operation Equals
Value false
Then

Send Message to Channel: Keine Quote

Twitch Chat Send Message to Channel
Message @%user% Keine Quote zu „%rawInput%“ gefunden.
Then

Break

Core Logic Break

Stoppt die laufende Action. Alle folgenden Sub-Actions in derselben Action werden übersprungen.

Send Message: Match

Twitch Chat Send Message to Channel
Message 📝 Quote #%foundQuoteId%: „%foundQuote%“: %foundQuoteUser%, %foundQuoteGame% (%foundQuoteTime%)
AzaBot: 📝 Quote #19: „Boss-Fight gewonnen mit 1 HP.“. Streamer, Elden Ring (10.04.2025)
So sieht's im Chat aus
  1. 1 If/Else: %rawInput% Is Null or Empty
    1. Then 1a Send Message: Hilfe
    2. Then 1b Break
  2. 2 Execute Code (C#): Quote-Search Loop
  3. 3 If/Else: %foundQuoteMatch% Equals false
    1. Then 3a Send Message: Keine Quote
    2. Then 3b Break
  4. 4 Send Message: 📝 Match
FeldWert
Name!searchquote
Commands!searchquote
!findquote
!sq
User Cooldown30
Global Cooldown10
  • Performance: Bei sehr vielen Quotes (10k+) wird der Loop spürbar. Bei normalen Quote-DBs ( < 500) instant.
  • Case-Insensitive: .ToLower() macht Search case-insensitive: !sq BOSS findet auch „boss“.
  • Mehrere Matches: Aktuelle Version returnt nur die erste. Für Random-Match quotes.Where(...).ToList() + Random.Next(list.Count).
  • Special Chars: " in Query muss nicht escaped werden: %rawInput% wird als String übergeben, C# nimmt es als ist.
  • Multi-Match Random: Bei mehreren Treffern → random pick. Code:
    var matches = quotes.Where(q => q.Quote.ToLower().Contains(query)).ToList();
    if (matches.Any()) { var pick = matches[new Random().Next(matches.Count)]; ... }
  • Match-Count anzeigen: Anzahl Treffer in Message: „Quote #19 (5 weitere Treffer)“.
  • Search-by-User: !quoteby ist genau das: siehe quoteby.