Skip to content

Exemple — compteur par viewer (backtask, persistant)

Intention : chaque !points incrémente le compteur personnel du viewer, persistant entre les streams. Pas d'UI : l'appli tourne en fond.

infos.json (extrait)

jsonc
{
  "launch-mode": "backtask",
  "app-index": "index.html",
  "scopes": ["chat:read", "chat:write"]
}

script.js

js
(async function () {
    kapp.chat.onCommand('points', async (user, ev) => {
        const data = (await user.getAppData()) ?? { points: 0 };   // état PAR viewer
        data.points += 1;
        await user.setAppData(data);
        await ev.respond(`${user.display_name}, tu as ${data.points} points.`);
    });

    // backtask : pas de display(), pas de finish() — l'appli vit tant que le streamer la garde ouverte.
})();

Pourquoi

  • launch-mode: backtask : aucune UI, donc ni display() ni finish().
  • user.getAppData() / setAppData() = persistance par viewer (appli-only ; lèverait une erreur en widget).
  • Lis l'état, mute, réécris : pas de merge automatique côté serveur.