Twitchの配信をしていて配信開始をMastodonに一々書いたりするのはめんどくさい。
特に私のWin10環境はバグっているのかChromeを開いていると著しくゲームの動作が遅くなるので、先に閉じてしまうので余計に。
ってことで、配信開始通知をn8nを利用してMastodonに投稿できないかなぁとか言う話になります。
どうやってやるか考える
Twitchの配信開始通知といえば、
定期的にAPIを叩いて配信していないかチェックする方法。
EventSubを利用して受け取る方法。
大体この2つかなって思っています。
で、n8nなんですが残念ながらTwitchと連携するトリガーノードはありません。
以前なら自力で色々やる必要があったんですが、ちょっと前にTwitchのトリガーノードを作ってくれた方がいたので、今回はそれを使います。
トリガーから受け取ったらそのままMastodonに。
うん。言葉だけなら簡単そうです。
やってみた
で、完成図ですがこんな感じ。
Twitchのノードはカスタムノードなので事前にこちらを導入しておく必要があります。
私はDockerを使っているのでビルドし直す方法を取りました。(と言うか今はそれしか無いらしい)
Dockerfileはこんな感じ。(フォーラムで公式も勧めてた)
FROM n8nio/n8n:latest
RUN cd /usr/local/lib/node_modules/n8n && npm install n8n-nodes-twitch
細かいノードについてはこんな感じ。
Twitchノード
Credential for Twitch APIで事前にとってきていたClient ID、Client Secretを設定しておきます。
EventはStream Onlineで、Channelは自分のチャンネル名を。
ここでは配信が開始された旨とそのユーザのIDを取得できます。
Functionノード
これはアクセストークを保存しておくためだけのやつです
この後アクセストークンの取得を行うんですが、毎回取得するよりは保存しておいて・・・みたいにしたほうが良いかなって思ったんですが、頻繁に動かないのでこれいらない説もあります。。
IFノード
保存されているアクセストークンの有無で処理を分けます。
なければ取得(True)、あればそのまま実行(False)になっています。
2回目の実行であればありになります。
GET Token(HTTP Request)ノード
IFノードでトークンがなかったときに取得するノードです。
https://id.twitch.tv/oauth2/token
を叩いています。
ここは直でClientIDを指定してしまっているので改善予定です。
Function1ノード
取得したアクセストークンを保存するためだけのノードです
GET ChannelData (HTTP Request)ノード
ここではhttps://api.twitch.tv/helix/channels
を実行してストリームのタイトルを取得します。
IF2ノード
GET ChannelDataが認証エラーしていないかをチェックしています。
認証エラーの場合はGetTokenに移ります
なお、GET ChannelData2は認証エラーでも再実行させないようにしてます。
Discordノード
最後にDiscordにタイトルとURLを送っています
POST Mulukhiya
これはモロヘイヤのWebhookにポストすることでMastodonに投稿しています。
内容はDiscordと同様です
余談
以前はTwitchノードがなかったのでこのサイトのようにやる必要がありました。
Automate Tweets for your Twitch Live Stream using n8n
(試したけどこれはだるい)
まだ改善点はありますが、とりあえず動いているので満足しました。
せっかくn8n導入しているので他もなにかできないか模索中です。
おまけ。
最小構成
他の人の配信通知をIMAP Emailを使ってMastodonに送ってる図