見出し画像

企画枠を盛り上げるコマンド作ってみた! REALITY Advent Calendar 2023

REALITY Advent Calendar 18日目担当のサーバーエンジニアの@sola-msrです!
合宿は11月に行ってきたのですが、11月はREALITY CONもあって、忙しいやら楽しいやら、なんだかわちゃわちゃしていた月になりました。
(両方ともとても楽しかったです!)

さて、今年もアドベントカレンダーの季節がやってきましたね!
ついこないだアドベントカレンダーの記事を書いたような気がしましたが、あれからもう一年経つなんて時の流れは早すぎる・・・。

去年の合宿ではコマンドを作ったのですが、実は今回もコマンドを色々作りました!こんなんなんぼあっても良いですからね。
今年のテーマは「企画枠で使えそうなコマンドを作る!!」ということで、合宿で作ってみた4つのコマンドを、今回もご紹介していきたいと思います・・・!


まずはおさらい:REALITYのコマンド機能とは

REALITYには配信画面のコメント欄に「/」から始まるコマンドを入力して送信すると、色々な機能を実行できるコマンド機能というものが存在します。
(※コマンド機能はREALITYの非公式な隠し機能です)
例えば、みなさんがよく使っているであろう配信時間を表示してくれるコマンド「/uptime」コマンドも、このコマンド機能の一部ですね。

上記のブログ記事は、コマンド機能実装秘話や翻訳コマンドについても書いてありますので、読んだことない方はぜひ読んでみてください!

最近では突撃!REALITY運営がX(旧Twitter)でこっそりと教えてくれたりもしてますね!フォローして要チェックです。

ここもおさらい:コマンド機能が実行される仕組み

REALITYには、配信中のコメントに関する機能を実現する、コメントシステムというサーバーがあります。コマンドの一部もこのコメントシステムで処理されています。
コメントシステムは主にnode.js(Express)、TypeScriptで構成されていて、今回作ったコマンドも、入力して実行するとここで処理されて、コマンドの結果が返ってくる、という仕組みになっております。
去年の記事の中でもう少し詳しく解説してありますので、よろしければそちらをご覧ください。)

まぁ小難しい話は置いておいて、早速作ったコマンドをお見せしていきたいと思います!GOGO!

1️⃣ 早口言葉コマンド 「/hayakuchi」

/hayakuchi :早口言葉を表示する
ぴょこぴょこ

早口言葉コマンドは「/hayakuchi」とコマンドを打つと、
ランダムで早口言葉が表示されるコマンドです。(※日本語のみ)

配信中の罰ゲームや特技を披露するきっかけとして使用されることを想定して実装してみました!

2️⃣ トランプコマンド 「/trump」

/trump             : トランプのカードをランダムで1枚表示する
/trump r           : トランプの赤カード(❤️♦)をランダムで1枚表示する
/trump b           : トランプの黒カード(♠️♣️)をランダムで1枚表示する
/trump [1~5]       : トランプのカードを指定した枚数分、ランダムで表示する (ex:/trump 3)
/trump [r|b]d[1~5] : 指定した色のデッキからカードを枚数分、ランダムで表示する (ex:/trump rd3)
 
※ジョーカーは出ません。ジョーカーを除く52枚のカードから引くようになっています。
※コマンド実行ごとにカード(デッキ)はリセットされます。(イメージとしては毎回シャッフルし直して引くという感じです。)
コマンド単体のパターンと色と枚数を指定したパターン
色だけ指定のパターンと枚数指定だけのパターン

トランプコマンドは「/trump」とコマンドを打つと、ランダムで
「❤️8」や「♠️A」など、カードを1枚引くことができます。

色(スート)を指定することもでき、[ r | b ] の英語一文字をどちらか付けると、色を絞ったデッキからカードをランダムで引くことができます。
(引数は「r = red = 赤(❤️♦)」「b = black = 黒(♠️♣️)」としてます)

枚数も指定でき、1~5 を引数でつけると、その枚数分、デッキからカードをランダムで引くことができます。

色も枚数も両方指定でき、その場合はコマンドの後の引数を
「/trump rd3」(赤のデッキから3枚)
というふうに書き込みコマンドを打つと、赤のみのデッキから3枚カードをランダムで引くということができます。

このコマンドはリスナーも実行できるようにしてありますので、推しとトランプで勝負!なんてことも出来たりしちゃいます・・・!

3️⃣ 指名コマンド 「/nominate」

/nominate :配信者を含むコラボメンバーの中から一人、ランダムで名前を表示する
枠主も指名されます

「/nominate」とコマンドを打つと、今コラボしている枠主を含む配信者の名前がランダムで表示されます。

例えば、コラボ枠で4人のうち誰が罰ゲームを受けるか等を決める時などで、使えるようにコマンドで名前を出せるようにしてみました!

4️⃣ いつどこコマンド 「/itsudoko」

/itsudoko :「いつどこで誰が何をした」を表示する(「誰」の部分は配信者含むコラボメンバー内の誰かの名前が入る)
謎すぎる

「/itsudoko」とコマンドを打つといわゆる「いつどこで誰が何をした」のフレーズが表示されるコマンドです。

「誰が」の部分は指名コマンド同様、今コラボしている枠主を含む配信者の名前がランダムで表示されます。

コラボしていて話題が尽きた時などに唐突に使ってみてはいかがでしょう・・!?

考えついた時は良いと思ったのにいざ作ってみると
「なんだこれ」ってなってます

おわりに

今年も色々できました!

前回に引き続き、今回もコマンドを色々と作ってみました!!
今回はコマンドを実装するにあたって、バックエンドから情報を取得したり、JestというJavaScriptテスティングフレームワークを使ってコマンドに対してのテストコードを書いてみたりと、前回と少しだけ+αなことに挑戦してみることができたので、いい経験になったかなと思います。

さて、他の記事のものは大抵、試験的なもので、基本的にリリースされる予定はないものばかりなんですが、これらのコマンドに限り、今年もしれっとリリースしてありますので、ユーザーの皆さんにも実際に使ってもらうことができます!わいわい!!
みんなと遊ぶのも良し、もちろん一人で楽しむのも良し!配信をする際や、誰かの枠に遊びに行った際に、これらのコマンドを使って、よりREALITYを楽しんでもらえたら幸いです。

明日のアドベントカレンダーは!

明日の19日目はますずみさんによる
Vertex AI Searchで社内ドキュメントを生成AI検索してみる」です!
お楽しみに!