Open6
Discord botを作りながらCloudflare Workersに入門する

最近、Discordを使う機会が増えてきた。そこで、DIscord botを作ることで、Discordとそのエコシステムについて学んでみる。動くソフトウェアを作りながらプラットフォームについて理解を深められるのは、ソフトウェア技術者の特権だと思う。
軽く調べたところ、前々から気になっていたCloudeflare Workersでbotが作れるようなので、触ってみる。
最終的には、生成AIを使ってクイズを作るbotにしようと思う。Workersは実行時間の制約が非常に厳しく、生成AIの呼び出しが間に合わないのが目に見えているんだけど、そこをどうクリアするかが課題になる。

まずはcloudflare discord
で検索。
-
Hosting a Reddit API Discord app on Cloudflare Workers
- 公式ドキュメント。まずやるべきかこれかな。
-
cloudflare-workers で動く claude3 の discord-bot を作ってみた
- バックエンドプロセスは30秒まで待たせられるらしい。
- 疑似ストリームで体感待ち時間を改善しているのはさすが。

そもそものcloudflare workersとは
で検索。
-
入門Cloudflare Workers
- 記事とは違って、
workers.dev
のサブドメインは、一度 Workers を作ってからでないと変更できない。変更後のサブドメインは、他の人が未取得でないといけない。 - 制限はCPUが動いている時間なので、sleepや他のURLにfetchした後の待ち時間はカウントされない。
- 記事とは違って、

そういえば、LINE botも作れるのかな?と思って、cloudflare workers line bot
で検索。
-
Cloudflare Workersでコピペだけで作れるLINE Bot(手軽にAIを入れる編)
- CloudflareのWorkers AIなら無料で生成AIを使えるの!?
- 実行時間の制約をどうかわすかが気になるけれど、入門にはめちゃくちゃいいのでは。

得意技のGoogle Apps Scriptが使えるかな?と思って、discord http interactions google apps script
で検索。
-
Cloudflare Workers に Google Apps Script を挟んで処理に時間の掛かる Discord Bot を作る
- Google Apps ScriptでDiscord botを作ることはできない、とあったけれど、DiscordのAPIを呼び出すのにヘッダーを設定しないといけないのが原因らしい。Workersを間に挟めば大丈夫そう。
- Workersが呼び出されたらまずレスポンスを返しつつ、Apps Scriptを呼び出して終了。
- Apps Scriptの処理がおわったら、Workers経由でDiscordのWebhookを呼び出す。
- https://discord.com/developers/docs/resources/webhook#execute-webhook によると、DIscordのWebhookでスレッドを指定して返信できそう。

https://discord.com/developers/docs/tutorials/hosting-on-cloudflare-workers をやってみる。
- wranglerのインストールはグローバルの前提だが、案内されているページ https://developers.cloudflare.com/workers/wrangler/install-and-update/ ではローカルにインストールすることになっている。
git clone https://github.com/discord/cloudflare-sample-app
mv cloudflare-sample-app awwbot
cd awwbot
npm install
npx wrangler secret put DISCORD_TOKEN
npx wrangler secret put DISCORD_PUBLIC_KEY
npx wrangler secret put DISCORD_APPLICATION_ID
npx wrangler secret put DISCORD_TEST_GUILD_ID
mv example.dev.vars .dev.vars
vi .dev.vars
npm run register
npm run publish
Guild Install URLを踏んでbotをサーバーに追加。
/awwww
でかわいい画像を表示。
/invite
でbotを追加するURLを表示。