Im heutigen Blogeintrag, kümmern wir uns um die Filterung von öffentlichen Nachrichten. Nicht in jedem Channel möchte man unbedingt, dass öffentliche Nachrichten mitgeteilt werden. Hierfür gibt es spezielle API-Methoden, die euch helfen können das öffentliche Schreiben zu unterbinden.
Ihr solltet immer überlegen ob es Sinn macht, so einen radikalen Schritt zu gehen oder nicht. Schließlich sind wir bei Knuddels.de bei einem Chat und das geschriebene Wort und die Möglichkeit sich anderen Mitzuteilen ist die Grundlage für ein friedliches Miteinander. Nicht desto Trotz kann es aber auch nützlich sein, wenn man bei einem Spiel öffentlich nicht durch geschriebene Sätze abgelenkt wird oder gar Lösungen vorgesagt werden. Hier kommt die Methode mayShowPublicMessage ins Spiel. Wenn ihr eure main.js zum Beispiel wie folgt füttert, werden öffentlich abgeschickte Nachrichten, erstmal darauf überprüft ob sie gepostet werden dürfen oder nicht. Hierfür habe ich euch mal ein kleines Beispiel vorbereitet.
App.mayShowPublicMessage = function(publicMessage) { // Der Author wird als UserObject gespeichert var author = publicMessage.getAuthor(); // Es wird geprüft ob der Author ein MCM, AppManager oder AppEntwickler ist // Diese Nachrichten werden sofort gepostet und nicht weiter überprüft. if(author.isChannelModerator() || author.isAppManager() || author.isAppDeveloper()){ showPublicMessage = true; } else { // es wird geprüft ob der Text mehr als 1 Zeichen beinhaltet. var showPublicMessage = publicMessage.getText().length > 1; // Es wird geprüft, ob der User schon mehr als 200 Punkte erspielt hat. if(author.getPersistence().getNumber('points',0)<200){ showPublicMessage = false; author.sendPrivateMessage('°>gt.gif<° Du kannst in diesem Channel erst öffentlich schreiben, wenn du mindestens _200 Punkte_ erspielt hast.'); } else if (showPublicMessage==false){ author.sendPrivateMessage('Deine Nachricht ist nicht lang genug!'); } } return showPublicMessage; };
Bei diesem Beispiel wird neben der Länge des Textes der abgeschickt wird, zusätzlich überprüft ob die benötigten 200 Punkte im Spiel bereits erreicht wurden. Ihr könnt natürlich auch ganz andere Bedingungen erschaffen. Spielt etwas mit dem Beispiel herum und wägt ab, was für eure User App Sinn macht und was nicht.
Edit:
Ein Fehler bezüglich des Returns wurde ausgebessert.
der ganze Code ist meiner Meinung nach FALSCH!
Wieso wird das publicMessage Objekt returned? Die App erwartet True oder False als Rückgabewert!
Hier der Code dann in Richtig
https://nopaste.me/view/ec9d35b6
Die ganzen else Zweige sind nicht mehr notwendig, da man direkt returned und es wird ein richtiger wert defintiv zurückgegeben.
LikeLike
P.S. Wenn man einen Artikel nachträglich ändert, sollte man das im Artikel selbst vermerken, oder sonstig im Kommentar die sich auf den Artikel vor dieser Änderung (mit etwaigen Fehlern) beziehen.
LikeLike
Danke für deinen Hinweis.
Der Code wurde geändert und angepasst.
LikeLike
Der Code ist btw immernoch falsch
die return anweisung darf nicht im else stehen, da er bei weniger als 200 Punkten nichts returned (also undefined)
LikeLike
Hallo Vampiric Desire,
danke für den Hinweis. Ich habe soeben den Code angepasst, so sollte er nun funktionieren und nicht ins undefinierte laufen.
Zusätzlich habe ich noch eine private Ausgabe hinzugefügt, damit die User auch wissen, warum keine öffentliche Meldung kommt.
LikeLike