Open6
Discord Streamkit Overlay の仕組み
配信画面で Discord の VC で発話している人のアイコンをぴょこぴょこ動かすのに使える便利ツール
「VC に誰がいるか?」や「今発話しているのはどのユーザーか?」は RPC を使って取得されている
この RPC は WebSocket で通信を行う仕組み
以下の流れで接続が確立される
- Discord のアプリは起動時に 6463 ポートを listen する
- Discord Streamkit Overlay は ws://127.0.0.1:6463 に接続する
余談
6463 が使用済みだった場合に備えて他のポートに fallback する仕組みも実装されている

この挙動なので、以下のような使い方はできない
- アカウントA で Discord アプリを開いて VC に入る
- アカウントB でブラウザで Discord を開いて VC に入る
- アカウントAの VC を Discord Streamkit Overlay を使って配信画面に表示する
- アカウントBの VC を Discord Streamkit Overlay を使って配信画面に表示する (←これが無理)
- Discord アプリ (アカウントA) の RPC に接続してしまうため
Discord Streamkit Overlay は x-frame-options: SAMEORIGIN ヘッダーを返しているため、iframe で VC の画面を Web ページに埋め込むことができない
これは例えば配信画面を OBS のブラウザソースで作成していて、その画面に iframe で Discord Streamkit Overlay を表示できないことを意味する
OBS に Discord Streamkit Overlay を表示する場合は直接ブラウザソースで扱う必要がある
Discord には Testing Client が存在する
これは Discord アプリとは別のアプリ扱いになっていて、それぞれの起動や別アカウントでのログインもできる

当然 RPC のエンドポイントも独立に listen している
# 普通の Discord アプリ
$ lsof -i:6463 | grep Discord
Discord 39431 odan 49u IPv4 0xc09d1a7ecd8a9365 0t0 TCP localhost:6463 (LISTEN)
# PTB の Discrod アプリ
$ lsof -i:6464 | grep Discord
Discord 87855 odan 42u IPv4 0xcf8dd03a0562a01f 0t0 TCP localhost:6464 (LISTEN)
なので、Discord Streamkit Overlay を2つ起動して片方は 6463、もう片方は 6464 に接続されるようにすれば↑↑で難しいと書いていたアカウント2つでの運用が可能になる可能性がある