RawtohRawtoh/Docs
Documentation

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 :

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 data

Mettre à 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 :

C’est utile pour mettre en place une configuration initiale, déboguer l’état d’un script ou ajuster des valeurs à la main.

Conseils