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に送ってる図