{"id":3824,"url":"\/distributions\/3824\/click?bit=1&hash=a0d33ab5520cacbcd921c07a49fc8ac5b78623b57936b992ce15c804b99210d4","title":"\u041a\u0430\u043a\u0443\u044e \u0440\u0435\u043a\u043b\u0430\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0442\u044c \u043d\u0430 DTF \u0438 \u043a\u0442\u043e \u0435\u0451 \u0443\u0432\u0438\u0434\u0438\u0442","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"75ec9ef4-cad0-549d-bbed-1482dc44e8ee","isPaidAndBannersEnabled":false}
Gamedev
newoldmax

Хочу добавить в свою игру интеграцию с Twitch — с чего начать?

Последнее время я получал вопросы под своими статьями по поводу интеграции Twitch в игру. Постараюсь ответить на примере своей игры TD Worlds, где интеграция вполне себе работает.

Первым делом необходимо решить, какого уровня интеграция вам нужна:

  • интеграция при помощи расширения (Twitch Extension), которое отображается в виде панели поверх трансляции. Наверняка вы встречали такие, например для Hearthstone. Игра может передавать в расширение любые нужные данные, а пользователи, в свою очередь, могут взаимодействовать с игрой через панель на трансляции. Является самым трудоемким вариантом интеграции, но, в то же время, даёт много возможностей.
  • интеграция при помощи приложения (Twitch App), которое позволяет использовать REST API твича. Его можно использовать, чтобы, например, залогинить пользователя в игру при помощи его twitch аккаунта, чтобы получить необходимые данные для интеграции с его трансляцией. Так же это можно использовать для создания чат-бота игры. Важное уточнение — у твича нет такого понятия как "бот". По сути своей это просто еще один аккаунт пользователя, иногда разработчика, но чаще специально созданного конкретно для того, чтобы быть ботом (сам твич не против этого).

Итак, в своей игре я использовал второй вариант, но в упрощенном виде.

Пример того, как работает интеграция. Зрители могут голосовать в чате за нужный вариант (сверху), который потом применяется в игре.

Дело в том, что твич позволяет подключиться к любому чату не только с помощью реального аккаунта (нужен логин и пароль/токен для входа), но и анонимно.

Для анонимного подключения нужно использовать аккаунт, начинающийся на justinfan и дальше несколько цифр. Например, justinfan12321. А пароль должен быть пустым.

Таким образом мы получаем возможность принимать в игре все сообщения нужного нам чата и реагировать на них так, как нам нужно. Но при этом интеграция работает только в одну сторону, поскольку анонимное подключение к чату не разрешает отправлять в него сообщения. Если для вас важна возможность писать что-то в чат, то вам следует идти по пути создания бота.

Ну а сейчас рассмотрим работу интеграции с использованием анонимного подключения с примерами кода. Код будет на GDScript и довольно обобщенный, но суть должна быть ясна. Для Godot я использовал аддон godot-twicil.

extends Node2D onready var twicil = get_node('TwiCIL') # имя пользователя для входа var nick = "justinfan1234567" # id вашего приложения, созданного на https://dev.twitch.tv/console/apps var client_id = "123456789qwertyuio" # в данном случае пустой пароль # для реального пользователя будет выглядеть примерно как "oauth:jfui3ehr1783he" (токен пользователя для входа) var oauth = "oauth:" # название канала, к чату которого нужно подключиться var channel = "your_channel" var votes = { 1: 0, 2: 0, 3: 0 } var voted_users = [] func _ready(): setup_twitch() func setup_twitch(): twicil.connect_to_twitch_chat() twicil.connect_to_channel(channel, client_id, oauth, nick) # включаем логирование, чтобы увидеть в консоли статус подключения twicil.set_logging(true) twicil.connect("message_recieved", self, "_on_message_recieved") # ну вот тут и просходит вся магия func _on_message_recieved(user_name: String, text: String, emotes: Array) -> void: if voted_users.has(user_name): return var index = int(text) if index == 1 || index == 2 || index == 3: votes[index] += 1 votedUsers.push_back(user_name)

Собственно основа очень простая: вы подключаетесь к нужному чату нужным пользователем, и дальше решаете сами, что делать с сообщениями зрителей. Можете выводить чат на экран прямо в игре, можете собирать определенные сообщения в качестве голосования и т.д.

Для своего движка вы можете использовать любую библиотеку, позволяющую подключиться к чату твича, либо же написать что-то свое по документации.

Для своей игры я просто проверял сообщение, чтобы оно совпадало с номером варианта для голосования и запрещал голосовать повторно до конца раунда голосования. То, как замерять время голосования, формировать и выводить варианты, сбрасывать результаты перед новым голосованием, остается полностью на вашей совести. Самое главное, сделать достаточно много интересных вариантов взаимодействия с вашей игрой, чтобы как стример, так и зрители получали от этого удовольствие (или ненависть, тут уже как получится).

В принципе, для ознакомления с основами этого хватит, дальше все зависит от ваших желаний и возможностей, но советую начинать с базовых интеграций. По крайней мере, так вы быстро получите что-то работающее, что потом можно будет развить в нечто бóльшее.

Чисто теоретически, механизмы интеграции с любым стриминговым сервисом будут такими же. Главное, чтобы была официальная возможность считывать сообщения чата.

Удачи!

0
6 комментариев
Написать комментарий...
Духнич Дмитрий
Ответить
Развернуть ветку
Andrey Apanasik

А тестировать это нормально можно или через жопу, как и в случае с продажей внутриигровых предметов?

Ответить
Развернуть ветку
Тэцубин

Они сделали тестилку для апи, но не в виде хттп-сервера, а в виде консольной тулзы https://github.com/twitchdev/twitch-cli

Ответить
Развернуть ветку
Andrey Apanasik

Раньше приходилось на почту писать их разрабу, чтобы он на наш акк тестовые покупки накидывал)

Ответить
Развернуть ветку
newoldmax
Автор

В случае интеграции с чатом вообще проблем никаких, подключаешься к своему каналу (сам стрим не обязателен, чат доступен всегда) и отправляешь сообщения

Ответить
Развернуть ветку
Andrey Apanasik

Норм. Мы в своё время у себя реализовывали возможность покупать внутриигровые предметы прям со страницы игры на Твиче. Там с тестированием было всё ооооочень печально.

Ответить
Развернуть ветку
Читать все 6 комментариев
null