Hey there.
Schon cool was die KopfTrainer App bisher alles kann oder? Sie kann User begrüßen und verabschieden. Außerdem kann sie schon alle 15 Sekunden eine Matheaufgabe ausgeben und damit die neue Runde einläuten.

Jetzt gehts ans Eingemachte.
Ich will mich jetzt der Überprüfung von Antworten widmen.
Den ersten Schritt dazu habe ich ja schon im zweiten Tutorial [Link zum zweiten Tutorial] gemacht.
Dort hat die App jedem User eine private Nachricht geschrieben, wenn er etwas in den Channel gepostet hat.
Und genau an dem Punkt setze ich jetzt an.
Los gehts:
Weißt du, zu aller erst hab ich mich gefragt wie man überhaupt den Text einer Nachricht aus dem Message Objekt bekommen kann.
Aber auch dafür hat die API eine Lösung.
var App = {};
App.onPublicMessage = function(message)
{
// Unser alter Code.
message.getAuthor().sendPrivateMessage('Erwischt! Du hast gerade eine Nachricht in den Channel geschrieben stimmts?');
// Hier holen wir aus dem Message Objekt den Text.
var messageText = message.getText();
};
Jetzt da ich den Nachrichtentext habe, kann ich überprüfen ob er mit der Lösung zur aktuellen Aufgabe übereinstimmt.
Die Lösung zur aktuellen Aufgabe ist ja zum Glück immer in der globalen Variable solution gespeichert.
var App = {};
App.onPublicMessage = function(message)
{
// Unser alter Code.
message.getAuthor().sendPrivateMessage('Erwischt! Du hast gerade eine Nachricht in den Channel geschrieben stimmts?');
// Hier holen wir aus dem Message Objekt den Text.
var messageText = message.getText();
// Und jetzt überprüfen wir den Text auf die richtige Antwort.
if(messageText.indexOf(solution)>-1)
{
// Der User hat richtig geantwortet.
}
else
{
// Der User hat falsch geantwortet.
}
};
Ok was hier passiert habe ich am Anfang auch nicht verstanden. Mach dir keine Sorgen, es ist eigentlich ganz einfach.
Die JavaScript Funktion indexOf() gibt immer den Ort eines Strings in einem anderen String zurück.
Aber was ist blos ein String? Ein String ist im Grunde nichts anderes als Text. Und da sowohl die Nachricht im Channel, als auch die Lösung aus Text besteht kann man so nach der richtigen Lösung suchen.
Hier ein Beispiel mit dem ich es verstanden habe:
var erdbeerenSindRot = "Erdbeeren sind rot";
var sind = "sind";
var banane = "Banane";
var kommtImTextVor = erdbeerenSindRot.indexOf(sind);
var kommtNichtImTextVor = erdbeerenSindRot.indexOf(banane);
Was bedeutet das jetzt?
Da die Funktion indexOf() immer die Stelle in der ein String in einem anderen vorkommt zurückgibt, hat die Variable kommtImTextVor jetzt den Wert 10. Das Wort „sind“ beginnt an 10ter Stelle des Textes erdbeerenSindRot.
Welchen Wert hat dann die Variable kommtNichtImTextVor? Da „Banane“ nicht in erdbeerenSindRot vorkommt hat kommtNichtImTextVor den Wert -1.
Ihr könnt euch also merken: Kommt ein String nicht in einem anderen vor, gibt indexOf() den Wert -1 zurück.
Puh! Das war gar nicht so leicht.
Aber jetzt da ich weiß ob ein User die richtige Antwort in den Channel geschrieben hat kann ich ihm gratulieren. Wie man private und öffentliche Nachrichten verschickt haben wir ja auch schon gesehen.
var App = {};
App.onPublicMessage = function(message)
{
// Unser alter Code.
message.getAuthor().sendPrivateMessage('Erwischt! Du hast gerade eine Nachricht in den Channel geschrieben stimmts?');
// Hier holen wir aus dem Message Objekt den Text.
var messageText = message.getText();
// Und jetzt überprüfen wir den Text auf die richtige Antwort.
if(messageText.indexOf(solution)>-1)
{
// Der User hat richtig geantwortet.
message.getAuthor().sendPrivateMessage('Super gemacht. Du hast die Aufgabe geloest!');
appBot.sendPublicMessage('_______ ' + message.getAuthor() + ' hat die Aufgabe geloest _______');
}
else
{
// Der User hat falsch geantwortet.
}
};
Cool oder?
Also ich finde die App bisher super. Und was meint ihr dazu?
Irgendwie fehlt mir aber noch etwas.
Wie wäre es wenn neue User mit der aktuellen Frage begrüßt werden?
Darum geht es dann im nächten Blog Eintrag.
Bis dann 🙂
Liebe Grüße, MarvinDerPraktikant.