Google Cloud: Cloud RunでDiscord Bot作る
#Cloud_Run #Google_Cloud #Discord
Google CloudのCloud Runを使ってDiscord Botを作ろうぜ
要件
Cloud Run使う いわゆるサーバーレス
サーバにジョインできるBot
Discord: Application Commandで動く
レポジトリの用意
今回のサンプルプロジェクトです
https://github.com/0b5vr/node-discord-bot-cloud-run
中身はただのFastifyを使ったNode.jsサーバなので、実はローカルでも動くよ
Discord Application作る
https://discord.com/developers/applications
Cloud Run サービスを作る
https://console.cloud.google.com/run
サービスを作る際に、「ソース リポジトリから新しいリビジョンを継続的にデプロイする」を選ぶと、Cloud Buildを使ってGitHubからの継続的デプロイを行えます
ビルド構成のビルドタイプは「Google Cloud の Buildpacks を使用」を選ぶ。設定はデフォルトのままでOK
DiscordからのリクエストがGoogleのus-east1あたりから来ている様子があるので、リージョンはそれに合わせてus-east1にしておくと良いかもしれない 確信度低
認証の「未認証の呼び出しを許可」を選択しておく
環境変数に、 DISCORD_BOT_TOKEN ・ DISCORD_APPLICATION_ID ・ DISCORD_PUBLIC_KEY を設定しておく
.env.example を参考にしてね
サービスを作成したら、サービスのURL( .run.app で終わるやつ)をコピー
Interactions Endpoint URL
Discordのアプリ管理画面に行き、
Interactions Endpoint URLに先ほどコピーしたCloud FunctionsのURLを貼り付け
アプリケーションが正常に動いていないと、リクエストの認証が通らずURLが登録できないので注意
Botの招待
Botの招待は以下のURLを使う
https://discord.com/api/oauth2/authorize?client_id=<appId>&permissions=0&scope=bot%20applications.commands
https://discord.com/developers/applications/<appId>/oauth2/url-generator で作れるURLだよ
コマンドリストの更新
招待したばかりの状態だと、コマンドの一覧が登録されておらず、botを叩けない
サービスのURLの /update をクエリに ?guild_id=<guild id> をつけて叩くと、コマンドリストが更新される
コマンドを叩く
Botが発言できるチャンネルで /ping を叩いてみる
https://gyazo.com/6022cc66c84a4b10108faee7a216f0e8
こんな感じで "pong" が帰ってくる
https://gyazo.com/5fc8535061c59b0be261a6d92566731c
オケー
ローカルで開発する
プロジェクトルートに .env を置くと、dotenv-cliを使って環境変数を読めます
.env.example を参考にしてね
code:sh
npx dotenv-cli npm start