Unity上でTwitchのチャットコメントを取得・Console出力する

Unity上でTwitchのチャットコメントやフォロー通知などを受け取るためのライブラリ『UniTwitchClient』を自作したので、今回はこれを利用してUnityプロジェクト上でTwitchのチャットコメントを取得し、実際にConsoleに出力するまでの最短の導入手順について解説いたします。

https://github.com/mojopon/UniTwitchClient


## 1. Unityプロジェクトを作る
まず、導入するためのUnityプロジェクトを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107527/f6edeb07-d404-a5fb-2a41-6d589d307456.png)
エディターバージョンは、2021.3以降が望ましいです。
それ以前のバージョンでは、動作確認しておりません。

## 2. 依存ライブラリをUPMでインストールする
UniTwitchClientはUniRx、UniTask、Newtonsoft.Json-for-Unityに依存しているので、これらのインストールを行います。
UPMを使って以下の手順でインストールしていけばOKです。

### UniRx( https://github.com/neuecc/UniRx )をインストール
1. Package Managerウィンドウの左上の+を押す
2. Add package from git URLで以下URLを入力

```https://github.com/neuecc/UniRx.git?path=Assets/Plugins/UniRx/Scripts```

### UniTask( https://github.com/Cysharp/UniTask )をインストール
UniRxと同様の手順で以下のURLを入力してインストール
```https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask```

### Newtonsoft.Json-for-Unityをインストール
1. Package Managerウィンドウの左上の+を押す
2. Add package by nameで以下を入力してAddを押す
```com.unity.nuget.newtonsoft-json```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107527/51ac6025-2dd1-291d-2cb1-3174226bc6fa.png)


## 3. UniTwitchClientをUPMでインストール
UniRxやUniTaskと同様、Package Managerウィンドウ左上の+から、Add package from git URLで以下のURLを入力して、UniTwitchClientをインストールします。
```https://github.com/mojopon/UniTwitchClient.git?path=Assets/UniTwitchClient```

## 4. Twitchのアクセストークンを取得する。
Twitchのサービスを認証する際、アクセストークンが必要となります。
今回はTwitchTokenGenerator.comというサイトを使ってアクセストークンを生成します。
まずTwitch.tvで認証したいアカウントにログインしたのち、以下のサイトにアクセスしてください。
[https://twitchtokengenerator.com/](https://twitchtokengenerator.com/)

サイトを開くとポップアップがでますが、赤枠の部分をクリックでOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107527/414be7ee-3d67-9f88-8188-b3576f646520.png)

今回Twitchチャットのコメントを取得する上で必要となるスコープは、chat:read及びchat:editです。
Available Token Scopesの中のchat:read及びchat:editのAdd Scope欄をYesにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107527/1b242b9b-70da-39f8-a25e-093669ab0236.png)

選択を終えたら右下の方にあるGenerate Token!という緑色のボタンを押します。
TwitchのOAuth認証サイトに移動して、許可を求められると思いますので「許可」ボタンを押してください。
するとTwitchTokenGenerator.comに再びリダイレクトされるので、Generated Tokens欄にあるACCESS TOKENをメモしておいてください。
後で使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107527/4705b0b4-103c-970b-225c-919df5fea43a.png)

赤で塗りつぶしてある箇所にアクセストークンが表示されているはずです。

## 5. UniTwitchClientを利用するスクリプトを作成して、チャットのコメントをConsoleに出力する。
UniTwitchClientを利用して、Unity上でコメントを取得するスクリプトを書きます。
Sampleというスクリプトを新規作成し、以下のコードを書きます。
```
using UnityEngine;
using UniTwitchClient.Chat;
using UniRx;

public class Sample : MonoBehaviour
{
    string accessToken = "ここにアクセストークンを入力";
    string userName = "Twitchユーザーネームを入力";
    string channelName = "コメントを取得するチャンネル名を入力";
    
    void Start()
    {
        var twitchChatClient = new TwitchChatClient(new TwitchIrcCredentials(accessToken, userName)).AddTo(this);
        twitchChatClient.TwitchChatMessageAsObservable
                        .Subscribe(x => Debug.Log($"Name:{x.DisplayName}({x.UserNickname}), Message:{x.Message}"))
                        .AddTo(this);
        twitchChatClient.Connect(channelName);
    }
}
```
accessTokenの部分に先ほど(項目4)で取得したアクセストークンを入力。
userNameはTwitchのユーザーネームを入力。
channelNameはコメントを取得したいチャンネルのチャンネルネームを入力（例：https://www.twitch.tv/anomaloris のコメントを取得したい場合はanomalorisと入力）

準備ができたら、Sampleスクリプトをシーンに配置してシーン再生します。
ログイン時のシステムメッセージがConsoleに表示された後、対象チャンネルのコメントがあればConsoleに出力されます。

![Twitch.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107527/783378c5-22fa-ab5e-7c16-90e9eab2a843.gif)

こんな感じです。Twitchチャット（左）に入力したコメントがConsole（右）に出力されました。

ログイン時のシステムメッセージを表示したくない場合はTwitchChatMessageAsObservableに以下のようなWhere句オペレーターをつけ足せばユーザーメッセージのみ表示されるようになります。
TwitchChatMessageクラスのCommandプロパティには受け取ったメッセージのIRC Commandが格納されていて、ユーザーがコメントした際のIRC CommandはPrivMsgとなります。
```
twitchChatClient.TwitchChatMessageAsObservable
                .Where(x => x.Command == TwitchIrcCommand.PrivMsg)
                .Subscribe(x => Debug.Log($"Name:{x.DisplayName}({x.UserNickname}), Message:{x.Message}"))
                .AddTo(this);
```

## まとめ
必要な手順をまとめると
1. 必要パッケージ(UniRx, UniTask, Newtonsoft-Json-for-Unity,UniTwitchClient)をUPMでインストール
2. 認証に使うアクセストークンを取得
3. UniTwitchClientでコメント取得

といった感じです。

次回はUniTwitchClientを使ってチャンネルフォローされた際の通知を取得する方法の解説記事を書こうと思います。