Stockage
Un magasin clé-valeur persistant pour vos scripts d’automatisation.
Le stockage est un magasin clé-valeur persistant, propre à votre organisation. Vos scripts peuvent s’en servir pour conserver des données d’une exécution à l’autre.
Qu’est-ce que c’est ?
Chaque organisation dispose de son propre stockage — une base de données clé-valeur toute simple, où les clés sont des chaînes de caractères et les valeurs du JSON arbitraire. Le stockage persiste entre toutes les exécutions de scripts, ce qui le rend idéal pour :
- Les compteurs — nombre d’abonnés, utilisation des commandes
- Le suivi d’état — scène en cours, dernier utilisateur salué
- La configuration — réponses personnalisées, seuils
- Les données utilisateur — points, préférences
Utiliser le stockage dans les scripts
Dans le code de votre action, importez storage depuis "rawtoh" :
Lire une valeur
import { storage } from "rawtoh"
const count = await storage.get("sub_count")
// Returns the stored value, or undefined if the key doesn't existÉcrire une valeur
import { storage } from "rawtoh"
await storage.set("sub_count", 42)
await storage.set("last_user", { name: "alice", time: Date.now() })
// Values can be any JSON-serializable dataMettre à jour une valeur de façon atomique
Deux actions peuvent s’exécuter en même temps — deux messages de chat à quelques millisecondes d’intervalle, par exemple. Un get suivi d’un set laisserait l’une écraser l’écriture de l’autre. storage.update() applique votre fonction à la valeur actuelle et n’écrit le résultat que si personne d’autre n’a écrit entre-temps ; sinon, il réessaie. Il renvoie la valeur qui a été écrite.
import { storage } from "rawtoh"
// Read-modify-write in one step. The function receives the current value
// (undefined if the key does not exist) and returns the new one.
const count = await storage.update("sub_count", (n) => (n ?? 0) + 1)
await storage.update("seen_users", (list) => [...(list ?? []), "alice"])La fonction doit être synchrone et sans effet de bord : elle peut être rejouée en cas de conflit d’écriture. N’y utilisez pas await et n’y appelez pas de modules.
Exemple pratique
import { event, module, storage } from "rawtoh"
// Track how many times each user has used a command
const user = event.payload.username
const key = `cmd_count:${user}`
const count = await storage.update(key, (n) => (n ?? 0) + 1)
await module("twitch").request("chat.say", {
message: `@${user}, you've used this command ${count} times!`
})Gérer le stockage depuis l’interface
Vous pouvez aussi consulter et modifier les entrées du stockage directement depuis le tableau de bord. Ouvrez la page Stockage dans la barre latérale pour :
- Parcourir toutes les paires clé-valeur
- Créer de nouvelles entrées
- Modifier des valeurs existantes avec l’éditeur JSON
- Supprimer des entrées
C’est utile pour mettre en place une configuration initiale, déboguer l’état d’un script ou ajuster des valeurs à la main.
Conseils
- Utilisez des préfixes pour cloisonner vos clés —
points:alice,config:greeting,state:current_scene. - Les valeurs sont du JSON — vous pouvez stocker des objets et des tableaux, pas seulement des chaînes et des nombres.
- Le stockage est propre à l’organisation — tous les scripts d’une même organisation partagent le même stockage, ce qui facilite le partage de données entre automatisations.
- Les lectures sont rapides — n’hésitez pas à utiliser le stockage dans des actions déclenchées fréquemment.
- Les compteurs et les listes passent par
update()— réservezset()aux valeurs qui ne dépendent pas de ce qui s’y trouvait auparavant.