-
Notifications
You must be signed in to change notification settings - Fork 1
App Lifecycle
Jede UserApp durchläuft einen definierten Lebenszyklus. Über Hooks reagierst du auf Ereignisse wie App-Start, Nutzer-Aktionen oder Nachrichten.
App installiert
│
▼
onInitApp() ← App wird initialisiert (einmalig)
│
▼
App läuft ← Events werden verarbeitet
│
▼
onShutdownApp() ← App wird gestoppt
Die App läuft, solange der Channel existiert und die App installiert ist. Bei einem Server-Neustart oder App-Update wird die App heruntergefahren und neu gestartet.
// Wird einmalig beim Start der App aufgerufen
App.onInitApp = function() {
KnuddelsServer.getDefaultLogger().info('App gestartet!');
};
// Wird beim Herunterfahren der App aufgerufen
App.onShutdownApp = function() {
KnuddelsServer.getDefaultLogger().info('App wird gestoppt...');
};// Nutzer betritt den Channel
App.onUserJoined = function(user) {
KnuddelsServer.getDefaultBotUser().sendPublicMessage(
'Willkommen, ' + user.getProfileLink() + '!'
);
};
// Nutzer verlässt den Channel
App.onUserLeft = function(user) {
KnuddelsServer.getDefaultLogger().info(user.getNick() + ' hat den Channel verlassen.');
};// Öffentliche Nachricht im Channel
App.onPublicMessage = function(publicMessage) {
var text = publicMessage.getText();
var author = publicMessage.getAuthor();
// Nachricht verarbeiten...
};
// Private Nachricht an den Bot
App.onPrivateMessage = function(privateMessage) {
var text = privateMessage.getText();
var author = privateMessage.getAuthor();
author.sendPrivateMessage('Du hast geschrieben: ' + text);
};
// Öffentliche Action-Nachricht (z.B. "/me tanzt")
App.onPublicActionMessage = function(publicActionMessage) {
// ...
};
// Öffentliche Event-Nachricht
App.onPublicEventMessage = function(publicEventMessage) {
// ...
};// Bevor ein Nutzer Knuddel an die App sendet
App.onBeforeKnuddelReceived = function(knuddelTransfer) {
// Return true um den Transfer zu akzeptieren, false um abzulehnen
return true;
};
// Nachdem Knuddel empfangen wurden
App.onKnuddelReceived = function(sender, receiver, knuddelAmount, transferReason) {
sender.sendPrivateMessage('Danke für ' + knuddelAmount.asNumber() + ' Knuddel!');
};
// Wenn das App-Konto Knuddel empfängt
App.onAccountReceivedKnuddel = function(sender, receiver, knuddelAmount, transferReason) {
// ...
};
// Wenn eine Knuddel-Kauftransaktion abgeschlossen ist
App.onAccountChangedKnuddelAmount = function(user, knuddelAmountOld, knuddelAmountNew) {
// ...
};// Events vom Frontend empfangen
App.onEventReceived = function(user, type, data, appContentSession) {
if (type === "buttonClicked") {
// data enthält die vom Client gesendeten Daten
appContentSession.sendEvent('response', { status: 'ok' });
}
};Wenn ein Nutzer seinen Account löscht, wird dieser Hook aufgerufen. Hier solltest du alle gespeicherten Nutzerdaten bereinigen:
App.onUserDeleted = function(userId) {
// Nutzerdaten aus der App-Persistence entfernen
KnuddelsServer.getPersistence().deleteString('user_' + userId);
KnuddelsServer.getDefaultLogger().info('Daten für User ' + userId + ' gelöscht.');
};Wichtig: Wenn deine App
onUserDeletedimplementiert, werden Persistence-Daten und Accessibility gelöschter Nutzer automatisch bereinigt. Ohne diesen Hook wird die Löschung gedrosselt und erst beim nächsten App-Start nachgeholt.
// Event von einer anderen App empfangen
App.onAppEventReceived = function(appInstance, type, data) {
KnuddelsServer.getDefaultLogger().info(
'Event von ' + appInstance.getAppInfo().getAppName() + ': ' + type
);
};Chat-Befehle werden als Funktionen auf App.chatCommands definiert:
// Befehl: /hilfe
App.chatCommands.hilfe = function(user, params, func) {
user.sendPrivateMessage('Verfügbare Befehle: /hilfe, /start, /stats');
};
// Befehl: /start mit Parametern
App.chatCommands.start = function(user, params, func) {
if (params.length === 0) {
user.sendPrivateMessage('Bitte gib einen Spielmodus an: /start schnell oder /start normal');
return;
}
user.sendPrivateMessage('Spiel startet im Modus: ' + params);
};Hinweis: Der Befehlsname wird automatisch kleingeschrieben.
/Hilfe,/hilfeund/HILFErufen alle dieselbe Funktion auf.
Wenn ein Nutzer den Channel betritt und eine Nachricht schreibt, werden die Hooks in dieser Reihenfolge aufgerufen:
-
onUserJoined(user)– Nutzer ist dem Channel beigetreten -
onPublicMessage(message)– Wenn er eine öffentliche Nachricht schreibt -
onEventReceived(user, type, data, session)– Wenn er Events vom Frontend sendet -
onUserLeft(user)– Nutzer verlässt den Channel
Die vollständige Dokumentation aller Hooks und Methoden findest du in der App-Klasse der API-Dokumentation.
- Erste Schritte – Voraussetzungen, Einrichtung, deine erste App
-
Projektstruktur – Dateien, Ordner und
app.config - Dev-Server – Entwicklungsumgebung und Testen
-
App-Lifecycle und Hooks –
onAppStart,onUserJoinedund Co. -
Server-API Grundlagen –
KnuddelsServer,Channel,Logger - Client-Server-Kommunikation – Events zwischen Frontend und Backend
-
Benutzer und Nachrichten –
User,BotUser, Nachrichten senden - HTML-UI und AppContent – Popups, Overlays, Globale Apps-UI
-
Datenspeicherung –
AppPersistence,UserPersistence -
Knuddel und Zahlungen – Transfers, Käufe,
KnuddelAccount - Toplisten – Ranglisten und Highscores
- Globale Apps – Apps im "Apps & Spiele"-Menü
- Quests – Aufgaben für Nutzer
- Externe Server-Kommunikation – HTTP-Requests an externe APIs
- Tutorials – Übersicht aller Tutorials
- Tic-Tac-Toe – Multiplayer-Spiel mit Bestenliste
- Best Practices – Tipps, Limits und häufige Fehler
- FAQ – Häufig gestellte Fragen
- KCode-Formatierung – Nachrichten-Formatierung mit KCode