ローコストでつくる discord bot

ローコストでつくる discord bot
スプラトゥーン3まわりでやってる人が多くて、いろんなクラスタの人たちと遊べて楽しい
ゲームのウデマエの方はてんでなんだけど集まってワイワイゲームするのがシンプルに楽しいので、エンジョイな人たちとスムーズ楽しめるようになんらかのサポートツールを作ってみようかなと
...というのは建前で、discord の新しい API を触ってみたかったのでいろいろ試してみたの巻
discord のこれまでの bot は listen するサーバがどっかに常時建ってないといけないので面倒だったが、ある程度妥協すれば bot っぽいものを作れるようになっていた
じゃあ deno deploy で簡単に bot っぽいものが作れるジャンということで deno で実装する
アプリケーションを作成して、OAuth2 URL Generator から applications.commands にだけチェックをいれた URL を作成して admin の権限をもってるサーバに放り込む
アプリケーションの intersection の endpoint の登録をすると ping が飛んでくるので pong してやらないと登録されなかった
deno deploy の env に discord の public key を登録しておく
コマンドの登録は https://github.com/e-jigsaw/dika3/blob/f07abc07f02440046159380f7d6b3454499402b8/src/register.ts こういう感じで、bot の token と guild(サーバ) の ID を指定して登録する
グローバルに登録ということもできるらしいが、時間がかかったりすることもあるらしい
すると、メッセージのところで右クリックした際に アプリ ってセクションのところに任意のコマンドを生やすことができる
今回は各種バトルの今と次のマップを返すコマンドをつくる
えむおんセンパイが突貫で API https://spla3.yuu26.com/ を作ってくれているのでこいつを使わせてもらう
まずはコマンドが実行されたらレスポンスを返す部分で
ApplicationCommand = 2 でリクエストが飛んでくるので適切な json を返してやるとそれがメッセージとして表示される仕組み
なるほどね
レスポンスに components ってのをつけてやるとボタンやセレクトメニュー、テキスト入力なんかを返せる
ので、最初は select を2つ返してそれぞれほしい組み合わせを選ぶ式にしてみたが、interaction として返ってくるのは選択されたソレだけなので選択されてない方が何選択されているのかがわからない
どうにかできないものかと調べてみたのだが、調べた限りでは intersection を cache として保存しておいて時限で突合するみたいな仕組みだったのでなんだかなと
しょうがないので Midjourny みたいにボタンのテーブルを作る方式にした
まあボタン6コなら許容だろう...
各ボタンに custom_id を指定しておいて、それを基に spla3 API を叩いて情報を返す
レスポンスには embeds というフィールドがあって、ここに画像やらなんやら仕込める
イイ感じ
ちなみに地図情報は手作業で登録していってここが一番だるかった10マップx5ルールである...
でも毎回右クリックして実行するのもだるいなということに気付いたので
レスポンスには components も同居できるのでアンサーにもボタンを仕込んでやれば(これも midjourney 方式)楽チンになった