ローコストでつくる discord bot

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

関連ページとランダムに選ばれたページ

筆者について

jigsaw(ジグソウ、1991年6月12日-)は日本のプログラマ、会社代表。本名は小林貴也(こばやし たかや)。主にウェブ、フロントエンド領域で活動している。カミング・スーン合同会社の代表社員。
さらに詳しく

寄附について

面白かったらBTCETHでの寄附をお待ちしております。
寄附のきろく