Skip to content

App Lifecycle

Marc Staebler edited this page Mar 24, 2026 · 6 revisions

App-Lifecycle und Hooks

Jede UserApp durchläuft einen definierten Lebenszyklus. Über Hooks reagierst du auf Ereignisse wie App-Start, Nutzer-Aktionen oder Nachrichten.


Lebenszyklus einer App

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.


Alle verfügbaren Hooks

App-Lifecycle-Hooks

// 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...');
};

Benutzer-Hooks

// 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.');
};

Nachrichten-Hooks

// Ö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) {
    // ...
};

Knuddel-Hooks

// 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) {
    // ...
};

Event-Hooks (Client → Server)

// 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' });
    }
};

Nutzerlöschung (DSGVO)

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 onUserDeleted implementiert, 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.

Inter-App-Hooks

// Event von einer anderen App empfangen
App.onAppEventReceived = function(appInstance, type, data) {
    KnuddelsServer.getDefaultLogger().info(
        'Event von ' + appInstance.getAppInfo().getAppName() + ': ' + type
    );
};

Chat-Befehle definieren

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, /hilfe und /HILFE rufen alle dieselbe Funktion auf.


Reihenfolge der Hook-Aufrufe

Wenn ein Nutzer den Channel betritt und eine Nachricht schreibt, werden die Hooks in dieser Reihenfolge aufgerufen:

  1. onUserJoined(user) – Nutzer ist dem Channel beigetreten
  2. onPublicMessage(message) – Wenn er eine öffentliche Nachricht schreibt
  3. onEventReceived(user, type, data, session) – Wenn er Events vom Frontend sendet
  4. onUserLeft(user) – Nutzer verlässt den Channel

API-Referenz

Die vollständige Dokumentation aller Hooks und Methoden findest du in der App-Klasse der API-Dokumentation.


← Zurück zur Übersicht

Navigation

Einstieg

Kernkonzepte

Features

Tutorials

Referenz & Hilfe

Clone this wiki locally