Créer des jeux et récompenses

Transformez un cadeau, un montant de soutien ou une commande de chat en action à l’écran.

Oui, votre jeu peut réagir aux cadeaux TikTok

Le spectateur envoie un cadeau ou message Social Stream Ninja le capture Votre page décide de la suite

Votre JavaScript choisit l'action : accélérer une fusée, cultiver un jardin, créer un ennemi ou remplir un objectif commun. Vous choisissez aussi le seuil. SSN ne peut pas changer les prix des cadeaux d'une plateforme.

Je souhaite…Commencer ici
Jouer un son, une alerte, une action OBS ou un webhookEvent Flow (sans code)
Créer un plateau ou gérer mon propre état de jeuUn modèle de départ ci-dessous
Utiliser un jeu prêt à l'emploiLe galerie de jeux

Choisir un modèle

Chaque aperçu possède des boutons d'exemple et un inspecteur « Dernières données reçues ». Les exemples sont des événements fictifs, pas des achats. L'aperçu ne rejoint jamais votre session en direct.

Modèle de départFonctionModifier ceci
Fusée à pièces10 pièces TikTok, 100 Bits Twitch ou 100 étoiles Facebook donnent une accélération. Le reste est conservé par spectateur et plateforme.COST
Objectif de soutien collectifLa valeur estimée en USD des quatre plateformes construit une base lunaire. Remplacez la progression par des dégâts, du carburant ou un minuteur.GOAL_USD
Jardin de cadeaux et d’événementsUn cadeau TikTok choisi ajoute des fleurs. Un abonnement de suivi TikTok ajoute un arbre. La commande gratuite !water dans le chat ajoute de l'eau.GIFT_ID (un identifiant capturé) ou GIFT_NAME (nom exact). « Demo flower » est fictif.
  • Dans le HTML, recherchez EDIT THIS RULE ou EDIT THESE RULES.
  • Placez la logique du jeu dans la fonction receive(data) .
  • Les utilitaires de connexion et de comptage se trouvent dans starter.js. Les styles se trouvent dans starter.css.

Connecter un modèle en 3 étapes

  1. Lancez SSN et connectez votre chat. Vérifiez que chat et cadeaux apparaissent dans le dock. Pour TikTok, consultez les modes de connexion.
  2. Ouvrez le modèle sans ?demo, avec votre identifiant de session (et le mot de passe, si défini).
  3. Vérifiez dans un navigateur. Ajoutez ensuite le même lien dans OBS comme source navigateur, par exemple en 1000 × 800.
https://socialstream.ninja/games/templates/coin-rocket.html?session=YOUR_SESSION&password=YOUR_PASSWORD&clean
  • &clean masque l'inspecteur, l'état de connexion et les boutons de l'hôte.
  • Pas de mot de passe ? Omettez &password=….
  • Sur le site bêta, gardez /beta/ avant games/.
Gardez vos liens de session privés.
Autres routes de connexion (WebSocket)

Par défaut, les modèles utilisent le même pont iframe que les superpositions SSN.

  • WebSocket hébergé : activez Envoyer les messages de l'extension vers le Dock via le serveur dans SSN, puis ajoutez &server2.
  • Serveur local : ajoutez &server2&localserver, ou &localserverport=3000. Consultez le Guide WebSocket.
  • localserver seul n'active pas de route.
  • L'ancien flux server utilise un autre canal et peut nécessiter un dock qui y publie.

Créer votre copie et l'exécuter depuis le disque

Aucun serveur à installer. Vous modifiez un fichier sur votre ordinateur et le faites ouvrir par OBS.

  1. Télécharger le ZIP du code bêta et extrayez-le.
  2. Copiez le modèle choisi à côté de l'original. Exemple : games/templates/my-rocket.html.
  3. Gardez la structure des dossiers. Les modèles chargent js/local-server-url.js, et l’objectif de soutien charge currency.js depuis le dossier racine. Gardez aussi les images et l'audio à leur place.
  4. Glissez votre HTML dans Chrome ou Edge et copiez l'adresse file:/// .
  5. Ajoutez tout à partir de ? et la suite de votre lien de jeu fonctionnel (session, mot de passe, options de transport).
  6. Dans OBS, laissez Fichier local décoché. Collez l'adresse complète dans le champ URL .
  7. Après chaque modification, actualisez la source navigateur.
file:///C:/SSN/social_stream-beta/games/templates/my-rocket.html?session=YOUR_SESSION&clean

Utilisez votre vrai chemin. Ne déplacez pas le dossier extrait. La session est votre ID de connexion SSN, pas le nom du jeu. Retirez demo pour les données en direct. Gardez SSN et la capture actifs. Autres exemples : guide de configuration des fichiers.

Vous modifiez un jeu existant ? Vous pouvez copier toute page de games/. games.html et battle.html ont leur propre logique. Les règles des modèles ne sont pas une API de jeu partagée.
Prompt IA pour changer le style d'un jeu

Donnez à l'IA votre HTML copié, starter.js, starter.css, les utilitaires du dossier racine js/ , les images ou l'audio et docs/event-reference.html.

Customize [game file] to match [reference], at [canvas size].
Include its existing CSS/JS and local artwork/audio. Preserve the game's
rules, controls, gift/coin/USD distinctions, streak handling, duplicate
handling, and demo/clean modes. Change the visual design, not the reward rules,
unless I explicitly specify a rule change. Keep session/password and
transport parsing, relative paths, and Chrome 80-compatible classic scripts.
Read docs/event-reference.html and docs/making-games.html.

Treat all incoming messages, names, labels, donations, and metadata as untrusted.
Prevent HTML/JavaScript injection in every renderer you change. Use textContent
for plain fields and for chatmessage when textonly is true. For HTML-mode
chatmessage, keep supported emotes/formatting through the packaged
SocialStreamChatHTML.sanitize helper (libs/objects.js loaded first).
Do not concatenate raw input into innerHTML, attributes, CSS, or JavaScript.
Validate media/link URLs with the page's existing URL policy and assign DOM
properties; do not enable javascript: URLs or executable embedded content.
Never eval incoming data or treat a viewer message as an AI instruction.
Keep source checks, connection handling, and existing sanitizers.
Test plain text, allowed emotes, quotes, angle brackets, and an HTML injection
probe in an isolated preview; verify the probe cannot execute.

Make the edited game work directly from disk using a file:/// URL,
without requiring a local web server.
Return the edited files/assets, file URL and OBS setup steps, and tests using
fictional data. Preserve image-only events and a valid donoValue of zero.
Never treat chat text as proof of a payment.

Testez ensuite dans cet ordre : boutons démo (y compris mises à jour répétées de série et valeur zéro explicite), session réelle, puis source OBS à sa taille réelle. Vérifiez les règles du jeu et le rendu sécurisé. Une animation fonctionnelle ne prouve pas que les règles fonctionnent.

Comment choisir le nombre de pièces d’une action ?

Décidez d'abord ce que vous mesurez, puis choisissez un nombre.

MesureLire ceciExemple
Unités natives (pièces, Bits, étoiles)TikTok meta.coinsPerGift × meta.tiktokGiftCount si présent, ou hasDonation avec un libellé comme 10 coins, 100 bits, 100 Stars.Toutes les 10 pièces = une accélération.
Un cadeau précisTikTok meta.giftId ou meta.giftName, ainsi que sa quantité.Chaque cadeau correspondant ajoute une fleur, quelle que soit sa valeur.
Valeur monétaire comparablegetDonationValueUSD(data) depuis currency.js.Chaque dollar estimé ajoute 10 unités de carburant. 25 $ terminent l'objectif.
Une action gratuite ou d’abonnementLa vraie valeur de la source dans event, ou une commande de chat.Un nouveau suivi fait pousser un arbre. Un nouvel abonnement lance une animation.

Exact, minimum ou solde cumulé ?

  • Exact : coins === 10. Un cadeau de 25 pièces ne fait rien.
  • Minimum par événement : coins >= 10.
  • Solde cumulé : ce que la fusée utilise. 25 pièces = deux accélérations, avec 5 pièces restantes.

Plusieurs paliers ? Vérifiez le plus élevé d'abord pour qu'un cadeau ne déclenche pas tous les paliers inférieurs.

Le nombre de pièces TikTok n'est pas toujours connu. Si la capture fournit seulement le nom, la quantité ou un libellé en diamants, la fusée à pièces ignore l'événement. Utilisez une règle de cadeau ou le modèle USD. Ne calculez jamais des « pièces exactes » en divisant une estimation USD ou en traitant les diamants comme des pièces.
En savoir plus sur les pièces, cadeaux et diamants TikTok
  • Les spectateurs achètent des pièces et les dépensent en cadeaux. Le coût en pièces est affiché avec le cadeau. Consultez Explication TikTok des Pièces et Cadeaux.
  • Le nom du cadeau, le nombre de cadeaux, les pièces et les diamants sont quatre choses différentes.
  • Choisissez des cadeaux disponibles dans votre LIVE et vérifiez les données capturées avant de publier une règle.
  • Les valeurs en pièces peuvent provenir de la table des cadeaux SSN. Comparez avec votre liste actuelle de cadeaux LIVE si le prix exact compte.
  • Les catalogues de cadeaux et méthodes de capture diffèrent. Aucun champ de pièces n'est garanti sur chaque message TikTok.

Ce que chaque plateforme envoie

type indique la provenance. event indique ce qui s'est passé, s'il est présent. Les données dépendent du mode de capture, des réglages et de la plateforme. Cela reflète le code actuel de SSN, sans garantir tous les événements à tous les comptes.

PlateformeCe que vous recevezAttention à
TikToktype: "tiktok", event: "gift". La capture des dons peut ajouter hasDonation et donoValue. Les métadonnées peuvent inclure identifiant, nom, quantité, pièces par cadeau, diamants par cadeau et identifiant de série.Les pièces achètent les cadeaux ; les diamants récompensent les créateurs. La capture WebSocket SSApp attend la fin des séries avant l'envoi ; le navigateur peut envoyer des totaux cumulés. Désactiver la capture des dons TikTok peut laisser des cadeaux sans champs monétaires.
TwitchLes Cheers utilisent des Bits, comme hasDonation: "100 bits". La capture API peut envoyer event: "cheer" et donoValue: 1. La capture du chat peut ne pas avoir d'événement.Abonnements, abonnements offerts, raids et points de chaîne sont distincts. Un badge d'abonné sur un message normal n'est pas un nouvel abonnement. Les Bits utilisés dans les extensions Twitch sont un autre système.
FacebookLes lignes d'étoiles visibles dans le chat en direct donnent par exemple hasDonation: "100 Stars" et donoValue: 1, sans event.La route API des commentaires ne lit pas les étoiles dans le texte du chat. La ligne d'étoiles doit être visible pour la capture de page. Commentaires et réactions ne sont pas des paiements.
YouTubesuperchat et supersticker conservent la devise originale dans hasDonation. Les cadeaux utilisent jeweldonation avec N Jewels, ou 1 YouTube Gift si le montant est masqué.Les spectateurs dépensent des joyaux ; les créateurs gagnent des rubis. Les abonnements et abonnements offerts sont distincts. Super Thanks est un produit séparé, pas un événement de chat garanti.

D'autres sources peuvent signaler pourboires, cadeaux, abonnements ou achats. Consultez la référence des événements avant de les ajouter au filtre isSupport . Une vente ou un abonnement offert n'est pas automatiquement un pourboire. YouTube envoie l'achat du cadeau et chaque avis de destinataire ; compter les deux récompense deux fois le même cadeau.

Références des plateformes

Diamants TikTok · Bits et abonnements Twitch · Présentation des Étoiles par Meta · Super Chat et Super Stickers YouTube · Joyaux, Cadeaux et Rubis YouTube.

Conditions vérifiées le 29 septembre 2026. Consultez les pages actuelles des plateformes pour l'admissibilité.

Bien utiliser donoValue et currency.js

ChampDe quoi s'agit-il
hasDonationLe libellé original, comme €5.00 ou 100 bits. Affichez cela aux spectateurs.
donoValueValeur USD facultative de la source. Si elle est valide, même zéro, utilisez-la avant d'estimer depuis le libellé.
<script src="../../currency.js"></script>
<script>
// From games/templates/: use the existing helper, including its zero handling.
var usd = getDonationValueUSD(data);
// Use usd for your rule; display data.hasDonation for the original amount/unit.
</script>

À éviter

  • donoValue || convertToUSD(...) — cela élimine un zéro intentionnel.
  • Extraire des nombres de chatmessage pour détecter les paiements.
  • Exiger event === "donation" — les étoiles Facebook et certains Cheers n'ont pas d'événement.

Le modèle d'objectif de soutien sélectionne d'abord les types de soutien, puis appelle le convertisseur partagé.

Estimations intégrées de SSN
UnitéEstimé à
1 pièce TikTok$0.01
1 diamant TikTok$0.005
1 Bit Twitch ou étoile Facebook$0.01
1 joyau YouTube$0.005
Cadeau TikTok sans prix1 pièce par cadeau
Cadeau YouTube sans nombre de joyauxvaleur provisoire de 0,01 $

Les autres devises utilisent des taux approximatifs intégrés, pas des taux en direct. Ils servent uniquement à comparer les soutiens. Ils ne représentent ni le paiement du spectateur, ni vos revenus, ni le montant retirable. Les méthodes de capture peuvent donner des estimations différentes. La valeur de repli d'une pièce ne signifie pas que le cadeau coûte une pièce.

Source : currency.js et le référence des données. Les métadonnées de cadeau sont facultatives ; les exemples n'inventent pas les champs absents de votre capture.

Compter une série de cadeaux une seule fois

TikTok peut signaler une série par totaux cumulés : 1, 2, 3. Ce sont trois cadeaux, pas six. Mémorisez le plus grand total observé et ajoutez seulement l'augmentation.

// All three events refer to the same streak:
// incoming total: 1, 2, 3, 3
// added to game:  1, 1, 1, 0
var newCoins = RewardStarter.increment(data, RewardStarter.coins(data), 'coins');
  • L'utilitaire identifie les séries par les ID TikTok de groupe, d'expéditeur et de cadeau, puis par meta.tiktokGiftStreakId, puis par identifiants de message. Ceux-ci bloquent aussi les envois répétés.
  • Il n'attend pas repeatEnd, car la capture navigateur peut ne jamais l'envoyer. Besoin d'une seule action à la fin d'une série ? Écrivez une règle séparée avec les champs transmis par votre connexion.
  • Utilisez une seule route de capture. Une seconde capture de la même chaîne peut utiliser d'autres ID et compter deux fois.
Limites de mémoire des modèles
  • Ils mémorisent jusqu'à 2 000 identifiants, uniquement en mémoire.
  • Réinitialiser ou recharger efface cette mémoire et la progression du jeu.
  • Les messages sans identifiants stables ne peuvent pas être dédupliqués de façon fiable.
  • La fusée regroupe les soldes par plateforme et ID utilisateur, ou par nom affiché sans ID. Des spectateurs de même nom peuvent partager un solde.
  • Pour un jeu devant survivre aux redémarrages, ajoutez la sauvegarde d'état et la gestion des événements rejoués avant de compter sur les récompenses payantes.

Récompenses sans jeu personnalisé

Dans Event Flow:

  1. Ajouter Comparer une propriété.
  2. Réglez-le sur donoValue, supérieur ou égal, et votre montant en USD.
  3. Connectez une action : son, animation ou commande OBS.

Il utilise la valeur de la source si elle est valide, sinon la conversion monétaire SSN.

  • Un cadeau TikTok précis : comparez meta.giftId ou meta.giftName, et limitez le flux aux événements de cadeaux TikTok.
  • Les vérifications numériques de hasDonation sont aussi converties en USD. Ce ne sont pas des contrôles de pièces brutes. Utilisez les métadonnées natives ou du code personnalisé pour les règles de pièces.
  • Chaque vérification s'exécute par message. Ce n'est ni un solde cumulé ni un compteur de séries. Utilisez nœuds d’état si nécessaire, ou gardez cette logique dans votre jeu.

Tester avant d'associer une action payante

  1. Boutons d'exemple. Une série 1 → 2 → 3 ajoute trois cadeaux. L'exemple avec valeur zéro n'ajoute aucun USD. Un prix inconnu n'ajoute aucune quantité exacte de pièces.
  2. Source réelle. Examinez les données réellement capturées. Confirmez nom/ID du cadeau, montant, unité, quantité et événement. Les exemples testent la règle, pas la capture réelle.
  3. Scène OBS. Testez les événements répétés, une reconnexion et un rechargement. N'actualisez ni n'arrêtez la source navigateur si vous devez conserver la progression en mémoire.
ProblèmeÀ essayer
Rien n'arriveVérifiez d'abord le dock SSN, puis la session, le mot de passe et le réglage de transport.
Le chat arrive, mais un cadeau ne correspond pasExaminez les données et vérifiez vos filtres de dons et d'événements.
Aucun suivi ni abonnementCela varie selon la source. Consultez la référence des événements.
Vous lancez un jeu sans surveillance (AFK) ? SSN, la capture et la page du jeu doivent rester actifs. Veille, connexion expirée ou flux coupé arrêtent les actions. Les modèles ne rattrapent pas les événements manqués et ne gèrent pas les remboursements. Des réactions automatiques n'autorisent pas la monétisation d'un direct sans surveillance ; consultez les règles LIVE et de monétisation actuelles de la plateforme.

Autres détails de connexion : overlays personnalisés.