Да, ваша игра может реагировать на подарки TikTok
Social Stream Ninja получает событие и отправляет его вашей странице. JavaScript решает, что произойдёт: ускорение ракеты, рост сада, появление врага или продвижение общей цели. Действие и порог задаются в игре. SSN не меняет цены подарков платформы.
Начните здесь: попробуйте три шаблона, затем выберите, что измеряет правило: единицы платформы, идентификатор подарка или оценочные USD.
Для звука, уведомления, действия OBS или webhook начните с Event Flow. Собственная HTML-страница подходит для игрового поля или собственного состояния игры. Готовые игры есть в галерее игр.
Три небольших редактируемых шаблона
В каждом предпросмотре есть кнопки примеров и просмотр последних полученных данных. Это вымышленные события, а не покупки. Предпросмотр не подключается к вашему живому сеансу.
- Монетная ракета: 10 монет TikTok, 100 Bits Twitch или 100 звёзд Facebook дают одно ускорение. Остатки копятся отдельно по зрителям и платформам. Измените
COSTв HTML для настройки сумм. - Общая цель поддержки: объединяйте оценочную поддержку USD четырёх платформ для строительства лунной базы. Измените
GOAL_USDили замените индикатор прогресса уроном, топливом либо таймером. - Сад подарков и событий: выбранный подарок TikTok добавляет цветы, полученное событие нового подписчика — дерево, а бесплатная команда
!waterв чате добавляет воду. УстановитеGIFT_IDв полученный ID, либо задайтеGIFT_NAMEравным точному имени. «Demo flower» — вымышленный пример.
Откройте HTML-код и найдите EDIT THIS RULE или EDIT THESE RULES. receive(data) — функция, в которой пример действия заменяется логикой игры. Помощники подключения и подсчёта находятся в starter.js; оформление находится в starter.css.
Подключите шаблон к трансляции
- Запустите SSN и подключите источник чата. Убедитесь, что чат и подарки/поддержка доходят до dock. Настройка TikTok: режимы подключения.
- Откройте шаблон без
?demo, с вашим ID сеанса SSN. Укажите пароль сеанса, если он задан. - Проверьте страницу в браузере и добавьте тот же URL как источник «Браузер» в OBS, например 1000 × 800. Добавьте
&clean, чтобы скрыть инспектор, состояние подключения и кнопки ведущего.
https://socialstream.ninja/games/templates/coin-rocket.html?session=YOUR_SESSION&password=YOUR_PASSWORD&clean
На сайте beta сохраните /beta/ перед games/. Если пароль не задан, пропустите его параметр. Не публикуйте ссылки сеанса.
По умолчанию используется тот же мост iframe, что у оверлеев SSN. Для размещённого WebSocket-канала захваченного чата включите в SSN Отправлять сообщения от расширения в док-панель через сервер и добавьте &server2. См. Руководство по WebSocket для локальной настройки; шаблоны также принимают &server2&localserver и &localserverport=3000. localserver сама по себе не включает канал. Старый server использует другой канал и может зависеть от публикующего в него dock.
Создайте собственную копию
Скачать исходники beta в ZIP и распакуйте. Редактируйте файлы в games/templates/, сохраняя структуру папок: шаблоны также загружают js/local-server-url.js, а цель поддержки загружает currency.js из корня репозитория.
Раздавайте распакованную папку через локальный веб-сервер. Если установлен Python, выполните в этой папке:
python -m http.server 8080 --bind 127.0.0.1
Затем используйте http://127.0.0.1:8080/games/templates/coin-rocket.html?session=YOUR_SESSION в браузере или OBS. При размещении в другом месте сохраняйте относительные пути. Сборка не требуется.
Как выбрать число монет для действия?
Прежде чем выбирать число, решите, что измерять:
| Правило | Прочитайте | Пример |
|---|---|---|
| Единицы платформы | TikTok meta.coinsPerGift × meta.tiktokGiftCount , если передано, либо явное значение hasDonation с подписью, например 10 coins, 100 bits, или 100 Stars. | Каждые 10 монет дают ускорение. |
| Конкретный подарок | TikTok meta.giftId или meta.giftName, и его количество. | Каждый подходящий подарок добавляет цветок независимо от оценки в USD. |
| Сопоставимая ценность поддержки | getDonationValueUSD(data) из currency.js. | Каждый оценочный доллар добавляет 10 топлива; 25 долларов завершают цель. |
| Бесплатное действие или членство | Фактическое значение источника в event, или команду чата. | Подписка на обновления выращивает дерево; новая платная подписка запускает анимацию. |
Определите, означает ли сумма точное совпадение (coins === 10), минимум за событие (coins >= 10), или накопленный баланс. Ракета накапливает остаток: 25 монет дают два ускорения и оставляют пять монет. Правило «ровно 10» пропустит 25 монет. Если событие выбирает одно из нескольких действий, сначала проверяйте самый высокий порог, чтобы не сработали все нижние уровни.
В TikTok зрители покупают монеты и тратят их на подарки с указанной ценой. Выберите доступные в вашем LIVE подарки и проверьте захват до публикации правила. Название подарка, количество подарков, монеты и алмазы — разные меры. Не вычисляйте «точные монеты» делением оценки USD и не приравнивайте алмазы к монетам. Объяснение монет и подарков TikTok.
Если источник даёт только название/количество подарков или алмазы, монетный шаблон пропускает событие без явных метаданных монет. Используйте правило конкретного подарка или шаблон оценочных USD. Метаданные могут происходить и из таблицы подарков SSN; когда важна точная цена, сверяйтесь с текущим меню подарков LIVE. Каталоги и способы захвата различаются; общего поля монет, гарантированного в каждом сообщении TikTok, нет.
Что отправляет каждая платформа
type обозначает источник; event обозначает действие, если присутствует. Доступность зависит от режима захвата, настроек и данных платформы. Примеры описывают текущий код SSN, не гарантируя все события каждому аккаунту.
| Платформа | Данные поддержки и событий | Различайте |
|---|---|---|
| TikTok | type: "tiktok", event: "gift". Захват пожертвований может передавать hasDonation и donoValue. Метаданные могут содержать ID, название, количество, монеты или алмазы за подарок и идентификатор серии. | Монеты покупают подарки; алмазы — награды авторов. Захват WebSocket в SSApp завершает серии перед передачей; браузер может отправлять накопительные обновления. Отключение захвата пожертвований TikTok может оставить подарки без денежных полей. |
| Twitch | Cheers используют Bits, например hasDonation: "100 bits". Захват через API может использовать event: "cheer" и donoValue: 1; захват отображаемого чата может не содержать метки события. | Подписки, подарочные подписки, рейды и баллы канала — отдельные действия. Значок подписчика у обычного сообщения не означает новую подписку. Прямые Cheers и Bits в расширениях Twitch — разные интеграции. |
Видимые строки звёзд Live Chat содержат, например, hasDonation: "100 Stars" и donoValue: 1, без event . | API комментариев не выводит звёзды из текста чата. Захват DOM требует видимую строку звёзд; обычные комментарии и реакции не подтверждают оплату. | |
| YouTube | superchat и supersticker передают сумму в исходной валюте в hasDonation. Подарки используют jeweldonation с N Jewels, или 1 YouTube Gift , когда сумма скрыта. | Зрители тратят Jewels на подарки, авторы получают Rubies. Спонсорство и подаренное спонсорство — отдельные события, не Jewels. Super Thanks — отдельный продукт без гарантии события пожертвования в живом чате. |
Материалы платформ: Алмазы TikTok; Bits и подписки Twitch; Обзор звёзд Meta; YouTube Super Chat и Super Stickers; YouTube Jewels, Gifts и Rubies. Термины проверены 29 сентября 2026 года; актуальные условия и доступность смотрите на сайтах платформ.
Другие источники могут сообщать чаевые, подарки, членства или покупки. Изучите справочник событий перед добавлением в фильтр шаблона isSupport . Продажа товара или подарочная подписка не обязательно чаевые. Например, YouTube различает покупку подарка и уведомление о получении; подсчёт обоих дважды вознаградит один подарок.
Правильно используйте donoValue и currency.js
hasDonation — исходная отображаемая подпись, например €5.00 или 100 bits. donoValue — необязательная числовая сумма USD от источника. Учитывайте корректное заданное значение, включая ноль, до оценки по подписи. Сохраните исходную подпись для отображения.
<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>
Существующее поведение пересчёта: Сейчас SSN оценивает монету TikTok в 0,01 USD, алмаз в 0,005 USD, Bit Twitch или звезду Facebook в 0,01 USD, а Jewel YouTube в 0,005 USD. Подарок TikTok без цены по умолчанию считается одной монетой за штуку; подарок YouTube без числа Jewels имеет отдельную временную оценку 0,01 USD. Валюты тоже пересчитываются по внутренним приблизительным курсам, а не через сервис актуальных курсов.
Это сравнительные значения SSN, а не единое определение расходов зрителя, чистого дохода автора или доступного вывода. Разные способы захвата могут давать разные оценки. В частности, подстановка одной монеты для неизвестного подарка TikTok не доказывает его цену.
Не используйте donoValue || convertToUSD(...): это отбросит намеренно заданный ноль. Не извлекайте цифры из chatmessage для обнаружения оплаты и не требуйте метку event === "donation": у звёзд Facebook и некоторых Cheers нет метки события. Шаблон цели сначала выбирает виды поддержки, затем вызывает общий конвертер.
Исходник: 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');
Вспомогательная функция сначала использует доступные нативные ID группы/отправителя/подарка TikTok, затем meta.tiktokGiftStreakId или ID сообщений. Обычные ID тоже подавляют повторную доставку. Функция не ждёт repeatEnd , поскольку браузерный захват может никогда его не передать. Для единственного действия после завершения серии нужна отдельная логика завершения по полям, которые реально посылает соединение.
Учебные шаблоны хранят в памяти до 2000 идентификаторов. Сброс и перезагрузка стирают память и прогресс. Без стабильных ID нельзя надёжно убрать дубли; второй захват того же канала может использовать другие ID. Начните с одного пути захвата. Ракета группирует баланс по платформе и ID пользователя, а при его отсутствии — по отображаемому имени; одноимённые зрители могут делить баланс. Для постоянной игры добавьте сохранение состояния и обработку повторов, прежде чем полагаться на сохранность платных наград после перезапуска.
Награды без собственной игры
В разделе Event Flow, используйте Сравнить свойство с donoValue, больше или равно, и порог в USD, затем подключите звук, анимацию или управление OBS. Сравнение учитывает корректное значение источника и при необходимости использует существующий пересчёт валют.
Для конкретного подарка TikTok сравните meta.giftId или meta.giftName, и ограничьте поток событиями подарков TikTok. Числовые сравнения поля hasDonation также приводятся к USD; это не сравнение сырых монет. Для правил в монетах используйте нативные метаданные или свой код.
Порог для каждого сообщения отличается от накопленного баланса или счётчика серии. Не считайте, что порог Event Flow автоматически повторяет накопление и удаление дублей из шаблона. Используйте узлы состояния , когда потоку нужно состояние, или оставьте эту логику в игре.
Проверьте до подключения платного действия
- Нажмите кнопки примеров. Серия 1 → 2 → 3 должна добавить стоимость трёх подарков; явный ноль не должен добавлять USD; неизвестная цена не должна давать точное число монет.
- Подключите настоящий источник и изучите полученные данные. Проверьте название/ID подарка, сумму/единицу, количество и ожидаемое событие. Пример проверяет правило, а не живой захват платформы.
- Проверьте в сцене OBS повторы событий, переподключение и перезагрузку. Не отключайте и не обновляйте источник «Браузер», если нужно сохранить текущую игру в памяти.
Для игры без присмотра или AFK должны постоянно работать SSN, захват источника и страница игры. Сон компьютера, истёкший вход или разрыв связи прерывают действия; шаблоны не восстанавливают пропущенные события и не обрабатывают возвраты. Автоматические реакции не разрешают монетизацию трансляции без присмотра: проверьте текущие правила LIVE и монетизации для вашего формата.
Если ничего не приходит, проверьте dock SSN, затем сеанс/пароль и транспорт. Если чат приходит, а подарок не подходит, проверьте данные и фильтры пожертвований/событий. Доступность подписок и новых подписчиков зависит от источника; см. справочник событий. Подробнее о подключении: собственные оверлеи.