Ich habe einen auf Javascript-basierten Bot für einen Xat-Chatraum, der auch als KI fungiert. Ich habe mich kürzlich dazu entschlossen, den KI-Teil davon neu zu machen, da er zu einer absolut riesigen Kette von else if
-Anweisungen geworden ist, die fast unmöglich zu bearbeiten ist.
Ich habe ein wenig recherchiert und eine neue Idee entwickelt, wie man auf Antworten reagieren kann. Zuerst gebe ich Ihnen das Code-Segment:
function msgSwitch(id,msgRes) {
var botResponse = [];
switch (msgRes) {
case (msgRes.indexOf("hi") !=-1):
botResponse.push("HALLO. ");
case (msgRes.indexOf("how are you") !=-1):
botResponse.push("ES GEHT MIR GUT. ")
case (msgRes.indexOf("do you like pie") !=-1):
botResponse.push("ICH KANN NICHT ESSEN. DANKE, ARSCHLOCH. ")
default:
antworten (botResponse);
spamCount(id);
break;
}
}
Die Idee hier ist, msgRes
(die Eingabe des Benutzers) zu überprüfen und zu sehen, wie viele Fälle es gibt, die übereinstimmen. Dann für jedes Übereinstimmung wird die Antwort in das botResponse
-Array eingefügt, und am Ende wird mit allen Nachrichten in diesem Array geantwortet.
Beispiel
Benutzer-Nachricht: Hi! How are you?
msgRes: hi how are you
Bot-Übereinstimmungen:
hi
> fügt HALLO.
zum Array hinzu
how are you
> fügt ES GEHT MIR GUT.
zum Array hinzu
Bot antwortet: HALLO. ES GEHT MIR GUT.
Dies erspart mir die Mühe, für jede mögliche Kombination ein if
schreiben zu müssen.
Nach genauerer Prüfung bin ich mir jedoch nicht sicher, ob es möglich ist, indexOf
in einem switch zu verwenden. Weiß jemand eine Lösung dafür oder hat eine bessere Idee für die Handhabung von Antworten in gleicher Weise?
EDIT:
Um das XY-Problem zu vermeiden (um mein Problem zu klären)
Ich brauche eine saubere Alternative zur Verwendung einer riesigen Kette von else if
-Anweisungen. Es wird Hunderte von Wortsegmenten geben, auf die der Bot antworten wird. Ohne die Möglichkeit, nach Übereinstimmungen zu suchen, müsste ich für jede Kombination ein neues else if
schreiben.
Ich hoffe auf eine Möglichkeit, jede Aussage auf Übereinstimmungen zu überprüfen, und dann die Antwort für jede Übereinstimmung zu einem einzigen String zusammenzufassen.
EDIT 2: Ich sollte auch hinzufügen, dass dies auf Tampermonkey läuft und nicht auf einer Website.