KnuddelsServer Klasse Feedback
KnuddelsServer ist die 'Einstiegsklasse'. Mit den statischen Methoden des KnuddelsServer erhält man Zugriff auf viele Objekte und Klassen, die im Verlauf der App-Entwicklung benötigt werden.
Übersicht
Methoden
-
canAccessUser
static
deprecated
-
createKnuddelPot
static
deprecated
-
execute
static
-
getAllKnuddelPots
static
deprecated
-
getAppAccess
static
-
getAppDeveloper
static
deprecated
-
getAppId
static
deprecated
-
getAppInfo
static
deprecated
-
getAppManagers
static
deprecated
-
getAppName
static
deprecated
-
getAppProfileEntryAccess
static
-
getAppServerInfo
static
-
getAppVersion
static
deprecated
-
getChannel
static
-
getChatServerInfo
static
-
getDefaultBotUser
static
-
getDefaultLogger
static
-
getExternalServerAccess
static
-
getFullImagePath
static
-
getFullSystemImagePath
static
-
getKnuddelPot
static
deprecated
-
getNickCorrectCase
static
deprecated
-
getPaymentAccess
static
-
getPerformanceStats
static
-
getPersistence
static
-
getToplistAccess
static
-
getUser
static
deprecated
-
getUserAccess
static
-
getUserId
static
deprecated
-
isNewAppKnuddelTransferEnabled
static
-
isTestSystem
static
deprecated
-
listFiles
static
-
refreshHooks
static
-
registerInAppChatMessage
static
-
userExists
static
deprecated
Methoden
createKnuddelPot Feedback
-
knuddelAmount -
[params]
Erzeugt einen KnuddelPot.
Ist ein KnuddelPot 30 Minuten nach dem Erzeugen noch nicht gesealt, so wird vom Server automatisch ein refund ausgelöst.
Parameter:
-
knuddelAmountKnuddelAmount -
[params]Object optional-
[payoutTimeoutMinutes]Number optionalAnzahl der Minuten nachdem der Pot spätestens ausgezahlt wird. Der Standardwert ist 720 Minuten (12 Stunden). Der erlaubte Minimalwert ist 1 Minute und der erlaubte Maximalwert 10.800 Minuten (7 Tage).
-
[shouldSealPot]Function optionalMethode, die nach dem erfolgreichen Hinzufügen eines Participants aufgerufen wird. Gibt man hier als return-value
truean, so wird der Pot geschlossen. Diese Callback-Methode erhält als ersten Parameter den KnuddelPot. -
[onPotSealed]Function optionalDiese Methode wird aufgerufen, sobald der Pot erfolgreich mit
shouldSealPotoderknuddelPot.seal()gesealt wurde. Diese Callback-Methode erhält als ersten Parameter den KnuddelPot.
-
Rückgabewert:
Beispiel:
var knuddelAmount = KnuddelAmount.fromKnuddel(1);
var knuddelPot = KnuddelsServer.createKnuddelPot(knuddelAmount, {
onPotSealed: function(pot)
{
// Tun, was getan werden soll, nachdem der KnuddelPot gesealt wurde.
},
shouldSealPot: function(pot)
{
// Entscheiden, ob der KnuddelPot geschlossen werden soll.
return pot.getParticipants().length >= 2;
},
payoutTimeoutMinutes: 5
});
execute Feedback
-
fileName
Führt das angegebene Script aus. Vergleichbar mit require(), jedoch kann es wiederholt verwendet/ausgeführt werden. Dies kann z.B. in Verbindung mit RootAppInstance.updateAppFiles() benutzt werden um Teile der App im laufenden Betrieb auszutauschen bzw. neu zu laden.
Achtung: Natürlich muss der App-Code dafür entsprechend ausgelegt sein / damit zurecht kommen.
Parameter:
-
fileNameString
Rückgabewert:
Beispiel:
KnuddelsServer.execute('my/awesome/script.js');
getAllKnuddelPots Feedback
() KnuddelPot[] Veraltet staticLiefert alle für die App noch verwaltbaren KnuddelPot-Objekte.
Rückgabewert:
Beispiel:
var allknuddelPots = KnuddelsServer.getAllKnuddelPots();
allknuddelPots.forEach(function (knuddelPot)
{
if (knuddelPot.getState() == KnuddelPotStart.Open)
{
knuddelPot.seal();
}
});
getAppAccess Feedback
() AppAccess staticLiefert das AppAccess-Object.
Rückgabewert:
Beispiel:
var appAccess = KnuddelsServer.getAppAccess();
var ownInstance = appAccess.getOwnInstance();
getAppProfileEntryAccess Feedback
() AppProfileEntryAccess staticLiefert das AppProfileEntryAccess-Objekt, über das App-Profileinträge erzeugt und verwaltet werden können.
Rückgabewert:
Beispiel:
var appProfileEntryAccess = KnuddelsServer.getAppProfileEntryAccess();
getAppServerInfo Feedback
() AppServerInfo staticLiefert die Informationen über den AppServer auf dem die App läuft.
Rückgabewert:
Beispiel:
var appServerInfo = KnuddelsServer.getAppServerInfo();
var revision = appServerInfo.getRevision();
user.sendPrivateMessage('Der AppServer läuft momentan mit der Revision ' + revision);
getChannel Feedback
() Channel staticLiefert den Channel in dem die App läuft.
Rückgabewert:
Beispiel:
var channel = KnuddelsServer.getChannel();
user.sendPrivateMessage('Willkommen im Channel ' + channel);
getChatServerInfo Feedback
() ChatServerInfo staticLiefert die Informationen über den ChatServer auf dem die App läuft.
Rückgabewert:
Beispiel:
var chatServerInfo = KnuddelsServer.getChatServerInfo();
var revision = chatServerInfo.getRevision();
user.sendPrivateMessage('Der ChatServer läuft momentan mit der Revision ' + revision);
getDefaultBotUser Feedback
() BotUser staticRückgabewert:
Beispiel:
var botUser = KnuddelsServer.getDefaultBotUser();
botUser.sendPublicMessage('Hallo, mein Name ist ' + botUser.getProfileLink() + ' und ich bin ein AppBot!');
getDefaultLogger Feedback
() Logger staticLiefert den Standard-Logger für diese App. Alles, was geloggt wird, wird vom Nutzer "App-Logs" als private Nachricht zugestellt.
Rückgabewert:
Beispiel:
var logger = KnuddelsServer.getDefaultLogger();
logger.debug('Der Logger wurde aufgerufen.');
getExternalServerAccess Feedback
() ExternalServerAccess staticLiefert ein ExternalServerAccess-Objekt, mit dem andere Server angesteuert werden können.
Rückgabewert:
Beispiel:
var externalServerAccess = KnuddelsServer.getExternalServerAccess();
getFullImagePath Feedback
-
imageName
Liefert den Pfad eines Bildes zur Integration in der eigenen App. Alle Bilder, die im Ordner /www in der App abgelegt werden können hier referenziert werden.
Parameter:
-
imageNameString
Rückgabewert:
Absoluter Pfad zum Einbinden der Grafik
Beispiel:
var fullImagePath = KnuddelsServer.getFullImagePath('test.png');
var message = 'Nachricht mit Bild: °>' + fullImagePath + '<°';
user.sendPrivateMessage(message);
getFullSystemImagePath Feedback
-
imageName
Liefert den Pfad eines Systembildes zur Integration in der eigenen App. Alle Bilder, die unter http://apps7.knuddels.biz/kimg/ erreichbar sind können hier referenziert werden.
Parameter:
-
imageNameString
Rückgabewert:
Absoluter Pfad zum Einbinden der Grafik
Beispiel:
var fullSystemImagePath = KnuddelsServer.getFullSystemImagePath('james/sm_james-xx.gif');
var message = 'Oh nein, Sie haben Kenny,... äääh James getötet. °>' + fullSystemImagePath + '<°';
user.sendPrivateMessage(message);
getKnuddelPot Feedback
-
id
Liefert den KnuddelPot mit der angegeben id.
Parameter:
-
idNumber
Rückgabewert:
getNickCorrectCase Feedback
-
userId
Parameter:
-
userIdNumber
Rückgabewert:
getPaymentAccess Feedback
() PaymentAccess staticLiefert das PaymentAccess-Objekt, über das Aktionen, die mit Echtgeld zu tun haben, gesteuert werden können.
Rückgabewert:
Beispiel:
var paymentAccess = KnuddelsServer.getPaymentAccess();
getPerformanceStats Feedback
() JSON staticLiefert Performance-Daten über diese App-Instanz zur Analyse von Performance-Problemen.
- result[0] = Daten der aktuellen, laufenden Minute (unvollständige Minute)
- result[1] = Daten der Minute davor
- result[2] = Daten der Minute da davor
- result[3] = etc.
Falls Daten für einen längeren Zeitraum benötigt werden kann folgender Code verwendet werden um diese zu erfassen:
setInterval(function() {
// Logge die Daten der vergangenen Minute als eine Zeile:
KnuddelsServer.getDefaultLogger().info(JSON.stringify(KnuddelsServer.getPerformanceStats()[1]));
// Oder logge sie schön formatiert (mit der Hilfsfunktion von unten):
// KnuddelsServer.getDefaultLogger().info(App.stringify(KnuddelsServer.getPerformanceStats()[1], 2));
// Alternativ könnten die Daten im Speicher, in der DB oder anderweitig abgespeichert werden.
// Auch könnten die Daten gefiltert werden, bevor sie geloggt werden um nur interessante Infos zu erfassen.
}, 60000); // 1x pro Minute
Rückgabewert:
Ein Array von Arrays mit Objekten mit Performance-Daten (siehe Beispiel).
Beispiel:
App.stringify = function(obj, space) { // Hilfsfunktion um JSON.stringify() sortiert auszugeben
var allKeys = [];
var seen = {};
JSON.stringify(obj, function (key, value) {
if (!(key in seen)) {
allKeys.push(key);
seen[key] = null;
}
return value;
});
allKeys.sort();
return JSON.stringify(obj, allKeys, space);
}
// [0] = aktuelle (unvollständige) Minute, [1] = die (vollständige) Minute davor
KnuddelsServer.getDefaultLogger().info(App.stringify(KnuddelsServer.getPerformanceStats()[0], 2));
// Ausgabe via "App-Logs":
[
{
"hookName": "onUserJoined", // Welcher AppHook war es?
"source": "main.js:2070", // Code-Stelle, die ausgeführt wurde
"time": "2021-12-07 16:51", // Zeitpunkt: Welche Minute?
"values": { // alle diese Werte beziehen sich auf eine Minute
"calls": 2, // Anzahl Aufrufe dieser Aktion
"exec": 10, // Summe vergangene Zeit (in ms) für Verarbeitung dieser Aktion
"execAvg": 5, // Durchschnitt von exec
"execMax": 6, // Höchstwert von exec
"memAlloc": 70307, // Summe Speicher-Allokation (in Bytes)
"memAllocAvg": 35153.5, // Durchschnitt von memAlloc
"memAllocMax": 40304, // Höchstwert von memAlloc
"wait": 8, // Summe vergangene Zeit (in ms) für Warten auf Ausführung dieser Aktion
"waitAvg": 4, // Durchschnitt von wait
"waitMax": 5 // Höchstwert von wait
}
},
{
"hookName": "onSlashCommand",
"slashCommand": "eval", // Name des verarbeiteten Slash-Befehls; nur für onSlashCommand
"source": "main.js:781",
"time": "2021-12-07 16:51",
"values": {
// siehe oben
}
},
{
"eventKey": "ping", // Name (type) des verarbeiteten Events; nur für onEventReceived
"hookName": "onEventReceived",
"source": "appManager.js:2044",
"time": "2021-12-07 16:54",
"values": {
// siehe oben
}
}
]
getPersistence Feedback
() AppPersistence staticLiefert die AppPersistence, mit der sich Zahlen, Strings und Javascript-Objekte langfristig und über die Session einer App hinaus gespeichert werden können.
Rückgabewert:
Beispiel:
var appPersistence = KnuddelsServer.getPersistence();
getToplistAccess Feedback
() ToplistAccess staticLiefert das ToplistAccess-Objekt, über das Toplisten erzeugt und verwaltet werden können.
Rückgabewert:
Beispiel:
var toplistAccess = KnuddelsServer.getToplistAccess();
getUserAccess Feedback
() UserAccess staticLiefert das UserAccess-Objekt, über das User zugreifbar werden.
Rückgabewert:
Beispiel:
var userAccess = KnuddelsServer.getUserAccess();
isNewAppKnuddelTransferEnabled Feedback
() Boolean staticLiefert die Information, ob die neuen Knuddel-Transfers mit Tageslimit aktiviert sind. Ist dies der Fall, muss ein Nutzer nicht mehr Knuddel auf ein KnuddelAccount aufladen, um sie in einer App nutzen zu können. Für mehr Informationen siehe KnuddelAccount. Diese Methode ist nur übergangsweise zur Migrierung von bestehenden User-Apps gedacht und wird in Zukunft wieder entfernt. Diese Methode kann nach April 2024 ignoriert werden.
Rückgabewert:
listFiles Feedback
-
path
Mit dieser Funktion lassen sich alle Dateien und Ordner innerhalb eines Pfades des App-Runtime Ordners auflisten. Ruft man es mit "." oder "/" auf, so bekommt man die Dateien und Ordner auf der obersten Ebene. Zur Unterscheidung haben Ordner einen "/" am Ende, wohingegen Dateien dies nicht haben. Die Ausgabe ist alphabetisch (ignore case) sortiert, jedoch zuerst die Ordner und dann die Dateien. Die Ausgabe ist NICHT rekursiv. Dies kann aber leicht selbst gebaut werden, indem man einfach für jeden Ordner nochmals die Funktion aufruft.
Parameter:
-
pathString
Rückgabewert:
Beispiel:
var files = KnuddelsServer.listFiles('my/awesome/directory');
refreshHooks Feedback
() staticAktualisiert die Liste der genutzten Hooks. Werden zur Laufzeit chatCommands oder App-Hooks (wie mayJoinChannel) dynamisch erzeugt oder gelöscht, so muss danach refreshHooks()
aufgerufen werden, damit diese Änderung wirksam wird.
Beispiel:
this.chatCommands['newCommand'] = function (user, params, command)
{
};
KnuddelsServer.refreshHooks();
// Ab hier kann nun /newCommand von den Nutzern benutzt werden
delete this.chatCommands['newCommand'];
KnuddelsServer.refreshHooks();
// Ab hier ist /newCommand nicht mehr verfügbar.
registerInAppChatMessage Feedback
-
chatGroupId -
sender -
text -
receiverUserIds
Du musst diese Methode jedes Mal verwenden, wenn eine Nachricht in deinem In-App-Chat gesendet wird. Das ist notwendig, um die Moderation von In-App-Chat-Nachrichten zu ermöglichen, ähnlich wie für alle anderen Nachrichten, die auf Knuddels geschrieben werden.
Überprüfe deine Erlaubnis, einen In-App-Chat zu implementieren
Knuddels erlaubt UserApps nur dann einen In-App-Chat zu verwenden, wenn es wirklich notwendig für das Funktionieren dieser bestimmten UserApp ist. Wenn du dir unsicher bist, ob du in deinem speziellen Fall einen In-App-Chat bauen darfst, kontaktiere userapps@knuddels.de.
Sei transparent für die Nutzer
Sei sehr vorsichtig, dass die Verwendung dieser Methode exakt mit der Wahrnehmung des In-App-Chats durch die Nutzer übereinstimmt. Sonst können unschöne und verwirrende Situationen für Moderatoren und Nutzer entstehen. Nutzer sollten immer genau wissen, wann sie "eine Nachricht senden" und welchen Inhalt sie hat. Es ist verboten, Nachrichten zu registrieren, deren Inhalt der Nutzer nicht explizit produziert hat. Das kann im schlimsten Fall mit Perma-Bann und Schließung der App saktioniert werden.
Verwendung der API
Du musst alle Nutzer (bzw. deren User-IDs) als receiverUserIds angeben,
die von dem Sender als Empfänger beabsichtigt waren.
Wenn eine Nachricht zu einer Gruppe von Nutzern (z.B. einem Channel) gesendet wurde,
musst du all diese Nutzer als receiverUserIds angeben.
Du musst auch eine "Chatgruppen-Id" (groupChatId) angeben.
Ein "Chatgruppe" kann etwas Ähnliches wie ein Channel auf Knuddels sein,
aber das hängt von der Implementierung deiner UserApp ab.
Wenn deine UserApp beispielsweise mehrere Spiele gleichzeitig laufen lässt
und diese jeweils einen eigenen Chat haben, könnte chatGroupId einfach
die ID dieses Spiels (als String) beinhalten (angenommen, deine Spiele haben soetwas wie "IDs").
Die angegebene chatGroupId wird dann zu Moderationszwecken verwendet.
(Zum Beispiel wird sie angezeigt, wenn Admins gemeldete Nachrichten überprüfen.)
Limits
- Länge von
chatGroupId: mind. 3, max. 100 Zeichen - Länge von
text: mind. 1, max. 5000 Zeichen - Länge von
receiverUserIds: mind. 1, max. 1000 Empfänger
Parameter:
-
chatGroupIdStringID des "Gruppenchats", in dem die Nachricht gesendet wurde (s.o. für Erklärung)
-
senderUserDer Nutzer, der die Nachricht gesendet hat.
-
textStringDer Inhalt der Nachricht, exakt so wie der Nutzer sie eingegeben hat.
-
receiverUserIdsNumber[]Die User-IDs aller Empfänger dieser Nachricht (den Sender ausgeschlossen).
Rückgabewert:
Beispiel:
var message = input.value;
if (message.length <= 5000) {
KnuddelsServer.registerInAppChatMessage("Haupt-Chat", sender, message,
[receiver1.getUserId(), receiver2.getUserId()]);
}