네, 게임이 TikTok 선물에 반응할 수 있습니다
JavaScript에서 로켓 가속, 정원 성장, 적 생성, 공동 목표 채우기 등을 정합니다. 기준값도 직접 선택합니다. SSN은 플랫폼의 선물 가격을 바꿀 수 없습니다.
| 원하는 작업… | 여기서 시작하세요 |
|---|---|
| 소리, 알림, OBS 동작 또는 웹훅 실행 | Event Flow (코드 불필요) |
| 게임 보드 만들기 또는 자체 게임 상태 유지 | 시작 템플릿 아래 항목 |
| 완성된 게임 사용 | 다음 항목: 게임 갤러리 |
템플릿 선택
각 미리 보기에는 샘플 버튼과 '마지막 수신 페이로드' 검사기가 있습니다. 샘플은 가짜 이벤트이며 구매가 아닙니다. 미리 보기는 실제 세션에 접속하지 않습니다.
| 템플릿 | 역할 | 바꿀 곳 |
|---|---|---|
| 코인 로켓 | TikTok 코인 10개, Twitch Bits 100개 또는 Facebook Stars 100개마다 부스트 한 번을 얻습니다. 나머지는 시청자와 플랫폼별로 저장합니다. | COST |
| 공동 후원 목표 | 네 플랫폼의 추정 USD를 모아 달 기지를 건설합니다. 진행도를 피해량, 연료, 타이머로 바꿀 수 있습니다. | GOAL_USD |
| 선물과 이벤트 정원 | 선택한 TikTok 선물은 꽃을, TikTok 팔로우는 나무를 추가합니다. 무료 !water 채팅은 물을 추가합니다. | GIFT_ID (캡처된 ID) 또는 GIFT_NAME (정확한 이름). 'Demo flower'는 가상 이름입니다. |
- HTML에서 다음을 찾으세요:
EDIT THIS RULE또는EDIT THESE RULES. - 게임 로직을 다음에 넣으세요:
receive(data)함수. - 연결 및 집계 도우미 위치: starter.js. 스타일은 다음에 있습니다: starter.css.
3단계로 템플릿 연결
- SSN을 켜고 채팅을 연결한 뒤 Dock에 채팅과 선물이 표시되는지 확인하세요. TikTok은 다음을 참조하세요: 연결 모드.
- 템플릿 열기 에서 다음을 제외한 경우
?demo을 세션 ID와 함께 사용하세요(설정했다면 비밀번호도 포함). - 브라우저에서 확인한 뒤 같은 링크를 OBS 브라우저 소스에 추가하세요. 크기는 예를 들어 1000×800입니다.
https://socialstream.ninja/games/templates/coin-rocket.html?session=YOUR_SESSION&password=YOUR_PASSWORD&clean
&clean은 검사기, 연결 상태, 진행자 버튼을 숨깁니다.- 비밀번호가 없으면 다음을 생략하세요:
&password=…. - 베타 사이트에서는 다음을 유지하세요:
/beta/를 다음 앞에 유지하세요:games/.
다른 연결 방식(WebSocket)
템플릿은 기본적으로 SSN 오버레이와 같은 iframe 브리지를 사용합니다.
- 호스팅 WebSocket: 켜기: 서버를 통해 확장 프로그램에서 도크로 메시지 전송 (Send messages to Dock from Extension via server) 을 SSN에서 켠 뒤 다음을 추가하세요:
&server2. - 로컬 서버: 추가
&server2&localserver, 또는&localserverport=3000. 참고: WebSocket 가이드. localserver만으로는 경로가 켜지지 않습니다.- 이전 방식인
server피드는 다른 채널을 쓰며 Dock이 발행해야 할 수 있습니다.
복사본을 만들어 디스크에서 실행
설치할 서버는 없습니다. 컴퓨터의 파일을 편집하고 OBS가 열게 하면 됩니다.
- 베타 소스 ZIP 다운로드 을 내려받아 압축을 푸세요.
- 원하는 템플릿을 원본 옆에 복사하세요. 예:
games/templates/my-rocket.html. - 폴더 구조를 유지하세요. 템플릿은 다음을 불러옵니다:
js/local-server-url.js를 불러오며, 후원 목표는currency.js을 최상위 폴더에서 불러옵니다. 이미지와 오디오도 제자리에 두세요. - HTML 파일을 Chrome이나 Edge에 끌어 놓고 다음을 복사하세요:
file:///주소. - 다음부터 전부 추가하세요:
?이후를 작동하는 게임 링크에서 가져오세요(세션, 비밀번호, 전송 옵션). - OBS에서 나가기 로컬 파일 을 해제하세요. 전체 주소를 브라우저 소스의 다음에 붙이세요: URL 필드.
- 편집할 때마다 브라우저 소스를 새로 고침하세요.
file:///C:/SSN/social_stream-beta/games/templates/my-rocket.html?session=YOUR_SESSION&clean
실제 경로를 사용하고 압축을 푼 폴더를 옮기지 마세요. 세션은 게임 이름이 아닌 SSN 연결 ID입니다. 제거할 값: demo 을 제거해 실시간 입력을 받으세요. SSN과 캡처는 계속 실행하세요. 더 많은 예: 파일 설정 안내.
games/. games.html 그리고 battle.html 은 자체 게임 로직을 가집니다. 템플릿 규칙 설정은 공용 게임 API가 아닙니다.게임 스타일 변경용 AI 프롬프트
복사한 HTML과 다음을 AI에 주세요: starter.js, starter.css, 최상위 js/ 도우미, 그림이나 오디오, 그리고 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.
데모 버튼(반복 연속 선물 갱신과 0 덮어쓰기 포함), 실제 세션, 실제 크기의 OBS 소스 순서로 시험하세요. 게임 규칙과 다음을 확인하세요: 안전한 렌더링. 애니메이션이 작동한다고 규칙까지 검증된 것은 아닙니다.
동작에 필요한 코인 수는 어떻게 정하나요?
먼저 무엇을 측정할지 정하고 숫자를 선택하세요.
| 측정 대상 | 읽을 값 | 예시 |
|---|---|---|
| 플랫폼 고유 단위(코인, Bits, Stars) | TikTok meta.coinsPerGift × meta.tiktokGiftCount 이 있으면 사용하고 없으면 hasDonation 표시 문자열. 예: 10 coins, 100 bits, 100 Stars. | 10코인마다 부스트 한 번. |
| 특정 선물 하나 | TikTok meta.giftId 또는 meta.giftName와 그 수량입니다. | 일치하는 선물마다 가격과 무관하게 꽃을 하나 추가합니다. |
| 비교용 금액 | getDonationValueUSD(data) 출처: currency.js. | 추정 1달러마다 연료 10을 추가하고 25달러면 목표를 달성합니다. |
| 무료 동작 또는 멤버십 동작 | 소스의 실제 event또는 채팅 명령입니다. | 팔로우하면 나무가 자라고 새 구독은 애니메이션을 재생합니다. |
정확한 값, 최솟값, 누적 잔액 중 무엇을 쓸까요?
- 정확한 값:
coins === 10. 25코인 선물은 아무 일도 일으키지 않습니다. - 이벤트별 최솟값:
coins >= 10. - 누적 잔액: 을 로켓이 사용합니다. 25코인이면 부스트 두 번에 5코인이 남습니다.
여러 단계가 있다면 높은 단계부터 검사해 선물 하나가 모든 낮은 단계까지 실행하지 않게 하세요.
TikTok 코인, 선물, 다이아몬드 자세히
- 시청자는 코인을 구매해 선물에 씁니다. 선물 옆에 코인 가격이 표시됩니다. 참조: TikTok 코인과 선물 설명.
- 선물 이름, 선물 개수, 코인, 다이아몬드는 서로 다른 네 가지입니다.
- 본인의 LIVE에서 가능한 선물을 고르고 규칙을 공개하기 전에 캡처 데이터를 확인하세요.
- 코인 값은 SSN 선물 매핑에서 올 수 있습니다. 정확한 가격이 중요하면 현재 LIVE 선물 목록과 비교하세요.
- 선물 목록과 캡처 방법은 다릅니다. 모든 TikTok 메시지에 코인 필드가 보장되지는 않습니다.
플랫폼별로 보내는 데이터
type 은 출처를 나타냅니다. event 이 있으면 일어난 일을 나타냅니다. 수신 내용은 캡처 모드, 설정, 플랫폼에 따라 다릅니다. SSN의 현재 코드 설명이며 모든 계정에 모든 이벤트가 온다는 약속은 아닙니다.
| 플랫폼 | 제공 기능 | 주의할 점 |
|---|---|---|
| TikTok | type: "tiktok", event: "gift". 후원 캡처는 다음을 추가할 수 있습니다: hasDonation 그리고 donoValue. 선물 메타데이터에는 ID, 이름, 개수, 선물당 코인/다이아몬드, 연속 선물 ID가 포함될 수 있습니다. | 코인은 선물을 사는 데 쓰고 다이아몬드는 크리에이터 보상입니다. SSApp WebSocket 캡처는 연속 선물을 확정해 보내며 브라우저 캡처는 누적값을 보낼 수 있습니다. TikTok 후원 캡처를 끄면 선물에 금액 필드가 없을 수 있습니다. |
| Twitch | Cheer는 Bits를 사용합니다. 예: hasDonation: "100 bits". API 캡처는 다음을 보낼 수 있습니다: event: "cheer" 그리고 donoValue: 1. 채팅 캡처에는 이벤트가 없을 수 있습니다. | 구독, 선물 구독, 레이드, 채널 포인트는 별도입니다. 일반 메시지의 구독 배지는 새 구독이 아닙니다. Twitch Extensions의 Bits도 다른 시스템입니다. |
라이브 채팅에 표시된 Stars 행에서 예를 들어 다음을 얻습니다: hasDonation: "100 Stars" 그리고 donoValue: 1이며 다음 필드는 없습니다: event. | 댓글 API 경로는 채팅 글에서 Stars를 읽지 않습니다. 페이지 캡처에 Stars 행이 보여야 합니다. 댓글과 반응은 결제가 아닙니다. | |
| YouTube | superchat 그리고 supersticker 은 원래 통화를 다음에 담습니다: hasDonation. 선물은 다음을 사용합니다: jeweldonation 포함: N Jewels, 또는 1 YouTube Gift 을 금액이 숨겨진 경우 사용합니다. | 시청자는 Jewels를 쓰고 크리에이터는 Rubies를 받습니다. 멤버십과 선물 멤버십은 별도 이벤트입니다. Super Thanks는 별도 제품이며 보장된 채팅 이벤트가 아닙니다. |
다른 소스는 팁, 선물, 멤버십, 구매를 보고할 수 있습니다. 다음을 확인하세요: 이벤트 참고 문서 를 확인한 뒤 템플릿의 isSupport 필터를 확인하세요. 판매나 선물 구독이 자동으로 팁은 아닙니다. YouTube는 선물 구매와 각 수신자 알림을 모두 보내므로 둘 다 세면 같은 선물을 두 번 보상합니다.
플랫폼 참조 링크
TikTok 다이아몬드 · Twitch 비트와 구독 · Meta 스타 개요 · YouTube Super Chat 및 Super Stickers · YouTube 쥬얼, 선물, 루비.
조건 확인일은 2026년 9월 29일입니다. 자격은 최신 플랫폼 페이지에서 확인하세요.
donoValue와 currency.js 올바르게 사용하기
| 필드 | 기능 설명 |
|---|---|
hasDonation | 원래 표시 문자열. 예: €5.00 또는 100 bits. 시청자에게 보여 주세요. |
donoValue | 소스에서 온 선택적 USD 숫자입니다. 0을 포함해 유효하면 라벨 추정보다 우선합니다. |
<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>
피할 방법
donoValue || convertToUSD(...)은 의도한 0값을 버립니다.- 다음에서 숫자 추출하기:
chatmessage으로 결제를 식별하기. - 다음을 필수로 요구하기:
event === "donation"을 요구하지 마세요. Facebook Stars와 일부 Cheer에는 이벤트가 없습니다.
후원 목표 템플릿은 먼저 후원 유형을 고른 뒤 공통 변환기를 호출합니다.
SSN 내장 추정값
| 단위 | 추정값: |
|---|---|
| TikTok 코인 1개 | $0.01 |
| TikTok 다이아몬드 1개 | $0.005 |
| Twitch Bit 또는 Facebook Star 1개 | $0.01 |
| YouTube Jewel 1개 | $0.005 |
| 가격을 모르는 TikTok 선물 | 선물당 코인 1개 |
| Jewel 개수가 없는 YouTube 선물 | 임시값 $0.01 |
다른 통화는 실시간 환율이 아닌 내장 근사 환율을 사용합니다. 후원 규모 비교용이며 시청자 결제액, 수익, 출금액이 아닙니다. 캡처 방법에 따라 추정치가 다를 수 있습니다. 1코인 대체값은 그 선물 가격이 1코인이라는 뜻이 아닙니다.
소스: currency.js 및 페이로드 참조. 선물 메타데이터는 선택 사항이며, 예제는 캡처에 없는 필드를 만들어 내지 않습니다.
연속 선물은 한 번만 계산하기
TikTok은 연속 선물을 1, 2, 3의 누적값으로 보낼 수 있습니다. 선물 여섯 개가 아닌 세 개입니다. 해당 연속 선물의 최댓값을 기억하고 증가분만 더하세요.
// 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');
- 도우미는 TikTok 그룹/발신자/선물 ID로 연속 선물을 맞추고 그다음
meta.tiktokGiftStreakId, 그다음 메시지 ID를 사용합니다. 메시지 ID는 중복 전달도 막습니다. - 다음을 기다리지 않습니다:
repeatEnd을 필수로 삼지 마세요. 브라우저 캡처는 보내지 않을 수 있습니다. 연속 선물이 끝날 때 한 번만 실행하려면 연결이 보내는 필드로 별도 규칙을 작성하세요. - 캡처 경로는 하나만 쓰세요. 같은 채널을 두 번째로 캡처하면 ID가 달라 중복 집계될 수 있습니다.
템플릿의 메모리 제한
- 최대 2,000개 ID를 메모리에만 기억합니다.
- 초기화나 새로 고침은 그 메모리와 게임 진행을 지웁니다.
- 안정적인 ID가 없는 메시지는 확실하게 중복 제거할 수 없습니다.
- 로켓은 플랫폼과 사용자 ID별로 잔액을 나누며 ID가 없으면 표시 이름을 씁니다. 같은 이름의 시청자가 잔액을 공유할 수 있습니다.
- 재시작 후에도 유지할 게임은 유료 보상을 적용하기 전에 상태 저장과 재전달 처리를 추가하세요.
맞춤 게임 없이 보상 주기
다음 위치에서: Event Flow:
- 추가: 속성 비교.
- 다음으로 설정하세요:
donoValue, 크거나 같음과 USD 금액을 지정하세요. - 소리, 애니메이션, OBS 제어 같은 동작을 연결하세요.
소스의 값이 유효하면 사용하고, 아니면 SSN 통화 변환을 사용합니다.
- 특정 TikTok 선물: 비교
meta.giftId또는meta.giftName을 쓰고 흐름을 TikTok 선물 이벤트로 제한하세요. - 다음의 숫자 비교:
hasDonation도 USD로 바뀝니다. 원래 코인 값을 비교하는 것이 아닙니다. 코인 규칙에는 원본 메타데이터나 사용자 코드를 쓰세요. - 각 조건은 메시지마다 검사합니다. 누적 잔액이나 연속 선물 카운터가 아닙니다. 다음을 쓰세요: 상태 노드 이 필요하면 사용하거나 게임 안에 그 로직을 두세요.
유료 동작 연결 전에 테스트
- 샘플 버튼. 1→2→3 연속 선물은 선물 세 개를 더합니다. 0 덮어쓰기 샘플은 USD를 더하지 않습니다. 가격을 모르면 정확한 코인을 더하지 않습니다.
- 실제 소스. 실제 캡처 페이로드에서 선물 이름/ID, 금액, 단위, 개수, 이벤트를 확인하세요. 샘플은 규칙을 테스트하며 실제 캡처를 검증하지 않습니다.
- OBS 장면. 중복 이벤트, 재연결, 새로 고침을 확인하세요. 메모리의 진행 상황을 유지하려면 브라우저 소스를 새로 고침하거나 종료하지 마세요.
| 문제 | 시도할 방법 |
|---|---|
| 아무것도 도착하지 않음 | SSN Dock부터 확인한 뒤 세션, 비밀번호, 전송 방식을 확인하세요. |
| 채팅은 오지만 선물이 일치하지 않음 | 페이로드와 후원/이벤트 필터를 확인하세요. |
| 팔로우나 구독이 없음 | 소스마다 다릅니다. 참조: 이벤트 참고 문서. |
연결 세부 정보: 맞춤 오버레이.