Crie jogos e recompensas

Transforme um presente, valor de apoio ou comando de chat em algo na transmissão.

Sim, seu jogo pode reagir a presentes do TikTok

O espectador envia um presente ou mensagem O Social Stream Ninja captura Sua página decide o que acontece

Seu JavaScript escolhe a ação: impulsionar um foguete, cultivar um jardim, criar um inimigo ou preencher uma meta conjunta. Você também escolhe o limite. O SSN não pode mudar preços de presentes de uma plataforma.

Quero…Comece aqui
Reproduzir som, alerta, ação OBS ou webhookEvent Flow (sem código)
Criar um tabuleiro ou manter meu próprio estado de jogoUm modelo inicial abaixo
Usar um jogo prontoO galeria de jogos

Escolha um modelo

Cada prévia tem botões de exemplo e um inspetor “Últimos dados recebidos”. As amostras são eventos fictícios, não compras. O modo de prévia nunca entra na sessão ao vivo.

Modelo inicialO que fazMude isto
Foguete de moedas10 moedas do TikTok, 100 Bits da Twitch ou 100 Estrelas do Facebook dão um impulso. O restante é guardado por espectador e plataforma.COST
Meta de apoio compartilhadaO valor estimado em USD das quatro plataformas constrói uma base lunar. Troque o progresso por dano, combustível ou um cronômetro.GOAL_USD
Jardim de presentes e eventosUm presente escolhido do TikTok adiciona flores. Um novo seguidor no TikTok adiciona uma árvore. O comando gratuito !water no chat adiciona água.GIFT_ID (um ID capturado) ou GIFT_NAME (nome exato). “Demo flower” é fictício.
  • No HTML, procure EDIT THIS RULE ou EDIT THESE RULES.
  • Coloque a lógica do jogo na função receive(data) .
  • Os auxiliares de conexão e contagem ficam em starter.js. Os estilos ficam em starter.css.

Conecte um modelo em 3 etapas

  1. Inicie o SSN e conecte seu chat. Confira se chat e presentes aparecem no dock. Para TikTok, veja os modos de conexão.
  2. Abra o modelo sem ?demo, usando seu ID de sessão (e senha, se definida).
  3. Confira no navegador. Depois adicione o mesmo link ao OBS como fonte de navegador, por exemplo em 1000 × 800.
https://socialstream.ninja/games/templates/coin-rocket.html?session=YOUR_SESSION&password=YOUR_PASSWORD&clean
  • &clean oculta o inspetor, o estado da conexão e os botões do host.
  • Sem senha? Omita &password=….
  • No site beta, mantenha /beta/ antes de games/.
Mantenha seus links de sessão privados.
Outras rotas de conexão (WebSocket)

Por padrão, os modelos usam a mesma ponte iframe das sobreposições SSN.

  • WebSocket hospedado: ative Enviar mensagens da extensão ao dock pelo servidor no SSN e adicione &server2.
  • Servidor local: adicione &server2&localserver, ou &localserverport=3000. Veja o Guia de WebSocket.
  • localserver sozinho não ativa uma rota.
  • O fluxo antigo server usa outro canal e pode precisar de um dock publicando nele.

Faça sua cópia e execute pelo disco

Não há servidor para instalar. Você edita um arquivo no computador e aponta o OBS para ele.

  1. Baixe o ZIP do código beta e extraia.
  2. Copie o modelo escolhido ao lado do original. Exemplo: games/templates/my-rocket.html.
  3. Mantenha a estrutura de pastas. Os modelos carregam js/local-server-url.js, e a meta de apoio carrega currency.js da pasta raiz. Mantenha também imagens e áudio no lugar.
  4. Arraste seu HTML para Chrome ou Edge e copie o endereço file:/// .
  5. Adicione tudo a partir de ? em diante do link de jogo que funciona (sessão, senha e opções de transporte).
  6. Em OBS, saia Arquivo local desmarcado. Cole o endereço completo no campo URL campo.
  7. Após cada edição, atualize a fonte de navegador.
file:///C:/SSN/social_stream-beta/games/templates/my-rocket.html?session=YOUR_SESSION&clean

Use seu caminho real. Não mova a pasta extraída. A sessão é seu ID de conexão SSN, não o nome do jogo. Remova demo para entrada ao vivo. Mantenha SSN e captura ativos. Mais exemplos: guia de configuração de arquivo.

Vai editar um jogo existente? Você pode copiar qualquer página de games/. games.html e battle.html têm sua própria lógica. As configurações de regras dos modelos não são uma API compartilhada de jogos.
Prompt de IA para mudar o estilo de um jogo

Forneça à IA seu HTML copiado, starter.js, starter.css, os auxiliares da pasta raiz js/ , arte ou áudio e 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.

Depois teste nesta ordem: botões demo (incluindo atualizações repetidas de sequência e valor zero explícito), sua sessão real e a fonte OBS no tamanho real. Confira as regras do jogo e a renderização segura. Uma animação funcionando não prova que as regras funcionam.

Como escolher a quantidade de moedas de uma ação?

Primeiro decida o que vai medir. Depois escolha um número.

MedidaLeia este campoExemplo
Unidades nativas (moedas, Bits, Estrelas)TikTok meta.coinsPerGift × meta.tiktokGiftCount quando presente, ou hasDonation com um rótulo como 10 coins, 100 bits, 100 Stars.A cada 10 moedas = um impulso.
Um presente específicoTikTok meta.giftId ou meta.giftName, além da quantidade.Cada presente correspondente adiciona uma flor, independentemente do valor.
Valor monetário comparávelgetDonationValueUSD(data) de currency.js.Cada $1 estimado adiciona 10 de combustível. $25 completam a meta.
Uma ação gratuita ou de assinaturaO valor real da fonte em event, ou um comando de chat.Um novo seguidor faz crescer uma árvore. Uma nova inscrição toca uma animação.

Exato, mínimo ou saldo acumulado?

  • Exato: coins === 10. Um presente de 25 moedas não faz nada.
  • Mínimo por evento: coins >= 10.
  • Saldo acumulado: é o que o foguete usa. 25 moedas = dois impulsos, com 5 moedas sobrando.

Vários níveis? Verifique primeiro o maior para um presente não acionar todos os inferiores.

As moedas do TikTok nem sempre são conhecidas. Se a captura só informar nome, quantidade ou rótulo de diamantes, o foguete de moedas ignora o evento. Use uma regra de presente ou o modelo USD. Nunca calcule “moedas exatas” dividindo uma estimativa USD ou tratando diamantes como moedas.
Mais sobre moedas, presentes e diamantes do TikTok
  • Os espectadores compram Moedas e gastam em Presentes. O custo em moedas aparece junto do presente. Veja Explicação do TikTok sobre Moedas e Presentes.
  • Nome do presente, quantidade de presentes, Moedas e Diamantes são quatro coisas diferentes.
  • Escolha presentes disponíveis na sua LIVE e confira os dados capturados antes de publicar uma regra.
  • Valores em moedas podem vir do mapeamento de presentes do SSN. Compare com a bandeja atual de presentes da sua LIVE quando o preço exato importar.
  • Catálogos de presentes e métodos de captura variam. Nenhum campo de moedas é garantido em todas as mensagens do TikTok.

O que cada plataforma envia

type indica de onde veio. event indica o que aconteceu, quando presente. O que chega depende do modo de captura, das configurações e da plataforma. Reflete o código atual do SSN, não garante que todas as contas recebam todos os eventos.

PlataformaO que você recebeCuidado com
TikToktype: "tiktok", event: "gift". A captura de doações pode adicionar hasDonation e donoValue. Os metadados podem incluir ID, nome, quantidade, moedas por presente, diamantes por presente e ID da sequência.Moedas compram Presentes; Diamantes são recompensas do criador. A captura WebSocket do SSApp fecha as sequências antes de enviar; a captura do navegador pode enviar totais acumulados. Desativar a captura de doações do TikTok pode deixar presentes sem campos monetários.
TwitchCheers usam Bits, como hasDonation: "100 bits". A captura por API pode enviar event: "cheer" e donoValue: 1. A captura de chat pode não ter evento.Inscrições, inscrições presenteadas, raids e Pontos do Canal são separados. Um distintivo de inscrito em uma mensagem comum não é uma nova inscrição. Bits usados em Extensões da Twitch são outro sistema.
FacebookAs linhas visíveis de Estrelas no chat ao vivo fornecem, por exemplo, hasDonation: "100 Stars" e donoValue: 1, sem event.A rota API de comentários não lê Estrelas no texto do chat. A linha de Estrelas deve estar visível para a captura da página. Comentários e reações não são pagamentos.
YouTubesuperchat e supersticker incluem a moeda original em hasDonation. Presentes usam jeweldonation com N Jewels, ou 1 YouTube Gift se o valor estiver oculto.Os espectadores gastam Joias; criadores ganham Rubis. Assinaturas e assinaturas presenteadas são eventos separados. Super Thanks é outro produto, não um evento de chat garantido.

Outras fontes podem informar gorjetas, presentes, assinaturas ou compras. Confira a referência de eventos antes de adicioná-los ao filtro isSupport . Uma venda ou inscrição presenteada não é automaticamente uma gorjeta. O YouTube envia a compra do presente e cada aviso de destinatário; contar ambos recompensa o mesmo presente duas vezes.

Referências das plataformas

Diamantes do TikTok · Bits e inscrições da Twitch · Visão geral das Estrelas da Meta · Super Chat e Super Stickers do YouTube · Joias, Presentes e Rubis do YouTube.

Termos consultados em 29 de setembro de 2026. Confira os requisitos atuais nas páginas das plataformas.

Use donoValue e currency.js corretamente

CampoO que é
hasDonationO rótulo original, como €5.00 ou 100 bits. Mostre isso aos espectadores.
donoValueNúmero opcional em USD da fonte. Se válido, inclusive zero, use antes de estimar pelo rótulo.
<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>

Não faça isto

  • donoValue || convertToUSD(...) — descarta um zero intencional.
  • Extrair números de chatmessage para detectar pagamentos.
  • Exigir event === "donation" — Estrelas do Facebook e alguns Cheers não têm evento.

O modelo de meta de apoio seleciona primeiro os tipos de apoio e depois chama o conversor compartilhado.

Estimativas internas do SSN
UnidadeEstimado como
1 moeda do TikTok$0.01
1 diamante do TikTok$0.005
1 Bit da Twitch ou Estrela do Facebook$0.01
1 joia do YouTube$0.005
Presente do TikTok sem preço1 moeda por presente
Presente do YouTube sem quantidade de Joiasvalor provisório de $0.01

Outras moedas usam taxas aproximadas internas, não cotações ao vivo. Servem apenas para comparar apoio. Não são o que o espectador pagou, o que você ganha nem o que pode sacar. Métodos de captura podem dar estimativas diferentes. O valor alternativo de uma moeda não significa que o presente custe uma moeda.

Fonte: currency.js e o referência dos dados. Os metadados de presente são opcionais; os exemplos não inventam campos ausentes na captura.

Conte cada sequência de presentes uma vez

O TikTok pode informar uma sequência como totais acumulados: 1, 2, 3. São três presentes, não seis. Guarde o maior total visto na sequência e some só o aumento.

// 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');
  • O auxiliar identifica sequências pelos IDs TikTok de grupo, remetente e presente; depois por meta.tiktokGiftStreakId, depois por IDs de mensagem. Eles também bloqueiam entregas repetidas.
  • Não espera por repeatEnd, porque a captura do navegador pode nunca enviar isso. Precisa de uma ação só quando a sequência terminar? Escreva uma regra separada usando os campos enviados pela sua conexão.
  • Use uma única rota de captura. Uma segunda captura do mesmo canal pode usar IDs diferentes e contar duas vezes.
Limites de memória dos modelos
  • Lembram até 2.000 IDs, apenas na memória.
  • Redefinir ou recarregar apaga essa memória e o progresso do jogo.
  • Mensagens sem IDs estáveis não podem ser desduplicadas com confiança.
  • O foguete agrupa saldos por plataforma e ID do usuário, ou nome de exibição se não houver ID. Espectadores com o mesmo nome podem compartilhar saldo.
  • Para um jogo que precise sobreviver a reinícios, adicione estado salvo e tratamento de eventos repetidos antes de depender de recompensas pagas.

Recompensas sem jogo personalizado

Em Event Flow:

  1. Adicione Comparar propriedade.
  2. Defina como donoValue, maior ou igual, e seu valor em USD.
  3. Conecte uma ação, como som, animação ou controle do OBS.

Usa o valor da fonte se válido e, caso contrário, a conversão monetária do SSN.

  • Um presente específico do TikTok: compare meta.giftId ou meta.giftName, e limite o fluxo a eventos de presentes do TikTok.
  • Verificações numéricas de hasDonation também são convertidas para USD. Não verificam moedas brutas. Use metadados nativos ou código personalizado para regras de moedas.
  • Cada verificação roda por mensagem. Não é um saldo acumulado nem um contador de sequências. Use nós de estado se precisar disso ou mantenha essa lógica no jogo.

Teste antes de vincular uma ação paga

  1. Botões de exemplo. Uma sequência 1 → 2 → 3 soma três presentes. A amostra com valor zero não adiciona USD. Um preço desconhecido não adiciona moedas exatas.
  2. Fonte real. Veja os dados reais capturados. Confirme nome/ID do presente, valor, unidade, quantidade e evento. As amostras testam sua regra, não a captura ao vivo.
  3. Cena do OBS. Teste eventos repetidos, reconexão e recarga. Não atualize nem desligue a fonte de navegador se precisar manter o progresso na memória.
ProblemaTente isto
Nada chegaConfira primeiro o dock SSN. Depois a sessão, a senha e a configuração de transporte.
O chat chega, mas um presente não correspondeVeja os dados e confira os filtros de doações e eventos.
Nenhum novo seguidor ou inscriçãoVaria conforme a fonte. Veja a referência de eventos.
Vai rodar um jogo sem supervisão (AFK)? SSN, captura e página do jogo devem continuar ativos. Suspensão, login expirado ou conexão caída interrompem as ações. Os modelos não recuperam eventos perdidos nem tratam reembolsos. Reações automáticas não autorizam monetizar uma transmissão sem supervisão; consulte as regras atuais de LIVE e monetização da plataforma.

Mais detalhes de conexão: sobreposições personalizadas.