Tutorial: Arbeiten mit Replacements

Bereits letzte Woche haben wir uns damit beschäftigt den Nutzern euerer App besondere Funktionen zur Verfügung zu stellen. Heute beschäftigen wir uns damit die öffentliche Aussage der Begrüßung etwas zufälliger zu gestalten. Dafür müssen wir mit sogenannten Strings und Objects arbeiten und diese modifizieren.


Aufgabenstellung:

Wir möchten, dass die User bei der Verwendung von /huhu und /byebye öffentlich alle User im Raum mit einem zufällig ausgewählten aber zuvor definierten Text begrüßen bzw. verabschieden.


Hinweis: Bei diesem Tutorial wird vorausgesetzt, dass du einen aktiven Entwickler-Account und Zugang zum FTP-Server hast und bereits mit Hilfe von diesem Beitrag eine eigene App erstellen kannst.

Schritt 1:

Öffne mit deinem Editor die im vorherigen Tutorial angefertigte main.js.

var bot = KnuddelsServer.getDefaultBotUser(); // Hier wird der BotUser definiert.
var App = (new function(){
this.chatCommands = {
 // Anfang von Funktion huhu
 huhu: function(user, params, command)
 {
 // Jemand im Chat hat /huhu eingegeben.
 bot.sendPublicMessage('Ich soll alle von '+user.getProfileLink()+' freundlich begrüßen.'); // Hier wird öffentlich eine Nachricht gepostet!
 },
// Ende von Funktion huhu
// Anfang von Funktion byebye
 byebye: function(user, params, command)
 {
 // Jemand im Chat hat /huhu eingegeben.
 bot.sendPublicMessage(''+user.getProfileLink()+' will sich verabschieden. Ich helfe mal beim rausfinden.'); // Hier wird öffentlich eine Nachricht gepostet!
 }
// Ende von Funktion byebye
};
}());

Schritt 2:

Bereits in einem etwas älteren Beitrag von Ironist haben wir Replacements kennengelernt. Damit ihr die Verwendung in einem praktischen Beispiel mal kennenlernen könnt, habe ich mal etwas vorbereitet, wie es aussehen könnte, wenn ihr zufällige Begrüßungen anbieten wollt:

// Hier werden alle möglichen Texte definiert
var zufallBegruessung = [
            'Ich soll euch von $USER ganz herzlich grüßen.',
            'Ich soll alle von $USER freundlich grüßen.',
            'Im Namen von $USER klatsch ich mal alle zur Begrüßung ab.',
            'Ein herzliches Willkommen an alle im Channel, soll ich von $USER ausrichten.'
        ];
// Mit Hilfe der getRandomObject()-Methode, wird eine zufälliges Object ausgewählt.
var Begruessung = RandomOperations.getRandomObject(zufallBegruessung);
// Oben haben wir mit $USER einen Platzhalter erschaffen, der mit der unten stehenden Zeile durch den Nicknamen ersetzt wird.
Begruessung = Begruessung.replace(/\$USER/g, user.getProfileLink());
// Die Endgültige Ausgabe des zufällig ausgewählten Textes
bot.sendPublicMessage('°>gt.gif<° '+Begruessung+'');

Das wäre es schon am Beispiel von Huhu. Jetzt wird, sobald ein User die Funktion /huhu verwendet, der ganze Channel vom AppBot begrüßt und gibt einen Hinweis darauf, wer die Funktion verwendet hat.

Kontrolle:

var bot = KnuddelsServer.getDefaultBotUser(); // Hier wird der BotUser definiert.
var App = (new function(){
this.chatCommands = {
// Anfang von Funktion huhu
huhu: function(user, params, command)
{
// Jemand im Chat hat /huhu eingegeben.
var zufallBegruessung = [
            'Ich soll euch von $USER ganz herzlich grüßen.',
            'Ich soll alle von $USER freundlich grüßen.',
            'Im Namen von $USER klatsch ich mal alle zur Begrüßung ab.',
            'Ein herzliches Willkommen an alle im Channel, soll ich von $USER ausrichten.'
];
// Mit Hilfe der getRandomObject()-Methode, wird eine zufälliges Object ausgewählt.
var Begruessung = RandomOperations.getRandomObject(zufallBegruessung);
// Oben haben wir mit $USER einen Platzhalter erschaffen, der mit der unten stehenden Zeile durch den Nicknamen ersetzt wird.
Begruessung = Begruessung.replace(/\$USER/g, user.getProfileLink());
// Die Endgültige Ausgabe des zufällig ausgewählten Textes
bot.sendPublicMessage('°>gt.gif<° '+Begruessung+'');
},
// Ende von Funktion huhu
// Anfang von Funktion byebye
byebye: function(user, params, command)
{
// Jemand im Chat hat /byebye eingegeben.
bot.sendPublicMessage(''+user.getProfileLink()+' will sich verabschieden. Ich helfe mal beim rausfinden.'); // Hier wird öffentlich eine Nachricht gepostet!
}
// Ende von Funktion byebye
};
}());

Hinweis:
Damit euch im späteren Verlauf, wenn eure User App wesentlich umfangreicher wird die Wartung nicht so schwer fällt, wäre es von Vorteil, wenn man definierbare Texte und Variablen nicht in Funktionen definiert, sondern diese entweder in andere Dateien auslagert oder aber direkt an den Anfang einer Datei packt.

var zufallBegruessung = [
    'Ich soll euch von $USER ganz herzlich grüßen.',
    'Ich soll alle von $USER freundlich grüßen.',
    'Im Namen von $USER klatsch ich mal alle zur Begrüßung ab.',
    'Ein herzliches Willkommen an alle im Channel, soll ich von $USER ausrichten.'
];
var zufallVerabschiedung = [
    'Ich soll euch von $USER noch einen schönen Resttag wünschen, denn $USER verabschiedet sich jetzt.',
    'Ich glaube $USER winkt zur Verabschiedung für euch wie wild vor dem Computer.',
    '$USER lässt mich für euch noch einmal Time to say goodbye singen, ehe $USER verschwindet.'
];
var bot = KnuddelsServer.getDefaultBotUser();
var App = (new function(){
    this.chatCommands = {
        huhu: function(user, params, command) {
            var Begruessung = RandomOperations.getRandomObject(zufallBegruessung);
            Begruessung = Begruessung.replace(/\$USER/g, user.getProfileLink());
            bot.sendPublicMessage('°>gt.gif<° '+Begruessung+''); 
        }, 
        byebye: function(user, params, command) { 
            var Verabschiedung = RandomOperations.getRandomObject(zufallVerabschiedung);
            Verabschiedung = Verabschiedung .replace(/\$USER/g, user.getProfileLink());
            bot.sendPublicMessage('°>gt.gif<° '+Verabschiedung +''); 
        }
    };
}());

In Zeile 1 – 6 sowie in Zeile 7 – 11 haben wir die fest definierten Texte hin gepackt. So ist es später noch problemlos möglich Änderungen am Text vorzunehmen oder weitere Verabschiedungen bzw. Begrüßungen einzupflegen.

3 Gedanken zu “Tutorial: Arbeiten mit Replacements

    1. Hallo Vampiric Desire,
      du hast recht dass deine Version schneller und eventuell auch besser geeignet ist, doch ich habe mich dazu entschlossen das Tutorial für Anfänger verständlich zu schreiben. Da Anfänger sehr wahrscheinlich nichts mit Prototype großartig anfangen können, habe ich dies weg gelassen.

      Gefällt mir

  1. Naja, man hätte die Funktion auch ohne Prototype auslagern können und einfach eine Function im global namespace definieren könne mit gleichem code und zusätzlichem Parameter. Die Hauptkritik richtet sich hier eher, an die Nutzung von RegEx und dass nicht auf die Gefahr eingeht, wenn man 2 ähnliche Parameter nutzt
    $USER
    $USERSTATUS

    da muss man erst $USERSTATUS ersetzen.

    Gefällt mir

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s