Wiki
Clone wikiUser Apps / Erste Schritte mit der API - onlineUser durchlaufen
Was für mich Anfangs sehr problematisch war, war das durchlaufen von z.B. Usern. Oft möchte man alle User im Channel ansprechen z.B. für zufällige Gewinne und benötigt dafür eine Schleife die alle User die Online sind auswählt. Ich habe dies benötigt da ich auch beim Neustart meiner App die HTML-UI sofort wieder öffnen wollte. Ich benötigte also einen Weg um alle online User anzusprechen und sie in einer Schleife durch zugehen. In PHP wäre die Aufgabe in 20 Sekunden erledigt gewesen, in Javascript musste ich mich etwas länger damit beschäftigen.
Um sich alle aktiven User im Channel zu holen benötigen wir zuerst das "Channel" Objekt. Objekte holen wir uns in der API immer ausgehend vom "Mutter-Objekt" namens "KnuddelsServer" Von diesem Mutter-Objekt ausgehend können wir uns alle Objekte holen die wir benötigen. Da wir in der App sehr oft Objekte brauchen werden und wir uns es sparen wollen jedes mal auf das Mutter-Objekt zugreifen zu müssen empfiehlt sich die Definierung der Variablen im vorhinein.
Ich empfehle die Definierung der Variablen in der main.js zu platzieren, noch bevor Ihr das App-Objekt aufruft.
#!javascript /** Define needet vars */ var BotNick = Bot.getNick().escapeKCode(); var EntwicklerNickname = KnuddelsServer.appInfo.getAppDeveloper().getNick().escapeKCode(); var Entwickler = '_°BB>_h' + EntwicklerNickname + '|/w ' + EntwicklerNickname + '<°°° _'; var ChannelObject = KnuddelsServer.getChannel(); var FullChannelName = ChannelObject.getChannelName(); var ChannelName = FullChannelName.substr(1, FullChannelName.length); var ChannelConfig = KnuddelsServer.getChannel().getChannelConfiguration(); var ChannelInfo = ChannelConfig.getChannelInformation(); var Logger = KnuddelsServer.getDefaultLogger(); var ServerInfo = KnuddelsServer.getAppServerInfo();
In Unserem Fall möchten wir jetzt aber alle online User des Channels auslesen. Dazu nutzen wir unser ChannelObect das wir uns geladen haben.
#!javascript /* Zuerst holen wir uns mit der Methode getOnlineUsers alle Benutzer und filtern diese gleich auf einen Typ. In unserem Fall auf UserType.Human, sozusagen nur menschliche Benutzer. Wir erhalten ein Objekt zurück in dem alle online User des Channels sind und lassen diese nun in einer Schleife durchlaufen um auf jeden User einzeln reagieren zu können. */ var users = ChannelObject.getOnlineUsers(UserType.Human); for(var i = 0; i < users.length; i++) { /* Wir speichern das aktuelle User-Objekt das wir gerade in der Schleife ausgewählt haben in eine Variable und können danach sofort damit arbeiten. */ var user = users[i]; user.sendPrivateMessage('Hallo ' + user.getNick() + ' ich habe neu gestartet und bin wieder für dich da'); }
Wenn wir diesen Code noch in den Hook "onAppStart" setzen werden die User nach einem Neustart der App privat angeflüstert und informiert, dass die App wieder einsatzbereit ist.
Zusammengesetzt kann das ganze dann so aussehen
#!javascript /** Define needet vars */ var BotNick = Bot.getNick().escapeKCode(); var EntwicklerNickname = KnuddelsServer.appInfo.getAppDeveloper().getNick().escapeKCode(); var Entwickler = '_°BB>_h' + EntwicklerNickname + '|/w ' + EntwicklerNickname + '<°°° _'; var ChannelObject = KnuddelsServer.getChannel(); var FullChannelName = ChannelObject.getChannelName(); var ChannelName = FullChannelName.substr(1, FullChannelName.length); var ChannelConfig = KnuddelsServer.getChannel().getChannelConfiguration(); var ChannelInfo = ChannelConfig.getChannelInformation(); var Logger = KnuddelsServer.getDefaultLogger(); var ServerInfo = KnuddelsServer.getAppServerInfo(); var App = (new function() { /* App Events */ // Deine App wurde gestartet this.onAppStart = function() { var users = ChannelObject.getOnlineUsers(UserType.Human); for(var i = 0; i < users.length; i++) { /* Wir speichern das aktuelle User-Objekt das wir gerade in der Schleife ausgewählt haben in eine Variable und können danach sofort damit arbeiten. */ var user = users[i]; user.sendPrivateMessage('Hallo ' + user.getNick() + ' ich habe neu gestartet und bin wieder für dich da'); } };
Updated