Google Cloud 上での Discord ボットの構築と実行

Google Cloud Japan Team
※この投稿は米国時間 2021 年 9 月 30 日に、Google Cloud blog に投稿されたものの抄訳です。
この 732 か月間、家に閉じこもっていた私は、思っていた以上に Discord(音声、動画、テキストによるオンライン コミュニケーション サービス)に時間を費やしていました。遠く離れた友人とチャットしたり、ゲームをしたり、探索したり、できる範囲でコミュニティを見つけたり、パンデミック前にはあまり使っていなかったプラットフォームについて学んだりしています。また、ほかの人が Discord で作った、場を盛り上げるクールなボットを見ることが私の楽しみでした。モデレーション、トリビア、ゲームなどです。小規模で、不思議な感じのランダムなゲームが数多とあります。
そこで、私にも作れないだろうかと考えました。
ボットは Discord の API と連動するコードなので、実行するためにはパソコンが必要です。パソコンは持っています。でも、パソコンの電源が切れているからといって、ボットが消えてしまうのは困るので、もっといいもの、つまり常に電源が入っているパソコンが必要です。信頼性の高いインフラストラクチャが必要です。それをどこかで見つけられればと思いました。
実際に他人(つまり Google)のパソコン上でボットを実行するにはどうすればよいのでしょうか?


ここでは、Discord のデベロッパー アカウントを設定し、新規アプリケーションを作成し(それにクールな名前を付けて)、「構成」→「ボット」→「トークン」のメニューからボットトークンを取得し(コピーまたは公開が必要です)、それを机のそばの付箋で安全に保管していると仮定します。
さて、次は Google Cloud です。まず、アカウントが設定されていて、新しいリソースを作成できることを確認します。Google Compute Engine の一部である仮想マシン(VM)が必要になります。Google Cloud で、新しいプロジェクトを作成し、コンピューティングで新しいインスタンスを作成します。今回の Hello, World の例では最小のインスタンスで十分なので、f1-micro インスタンスを使ってみましょう。無料だからです。これを実現するために、リージョンとして us-east1 を選び、シリーズ N1、そしてマシンタイプ f1-micro を選びました。


クリックして拡大
私はサーバーレス・アーキテクチャが好きで、通常、オーバーヘッドもはるかに少ないです。しかし、今回は永続的なインスタンスを用意して、Discord API 経由のリクエストに応答できるプロセスを常に用意しておきたいと思います。サーバーレス ソリューションがリスナーを起動するのに時間がかかる場合に発生しうるタイムアウトを回避すべきです。同時に、複数のプロセスを実行することは避けなければなりません。そうしないと、Discord のシグナルに対して複数のレスポンスが発生してしまい、混乱してしまうからです。
VM を選ぶ際には、Discord のボットコードをサポートするために、Python 3.5 以降が動作するものが必要です。デフォルト(私が書いている時点)では、Debian GNU/Linux 10 (buster) で、Python 3.7 が動作しています。今回の目的には十分です。VM が稼働したら、そこにコードをセットアップしていきます。Linux VM への接続にはいくつかの選択肢があります。 それができたら、コードをインストールして実行してみましょう。
コードを実行するためには、以下を使用して pip (Python 用パッケージ インストーラ)をインストールしてセットアップします。
次のコマンドを実行します。
上記のコマンドで Discord ライブラリをサーバーにインストールします。
コードを新しい bot.py ファイルに直接ドロップできます。より構造化されたファイルに整理するのは、Hello, World のステージ以降です。今のところ、ボットトークンを bot.py にハードコードしていますが、これは大変です。
これでボットを実行する準備が整いました。
また、Discord デベロッパー ポータルに戻って、アプリを選択し、「設定」の中の「OAuth2」を見ることで、サーバーに追加できます。適切なスコープを選択すると(ここではボットだけにしておきます)、スコープ ボックスの下に新しいリンクが表示され、以下のように始まります。
これをブラウザで読み込むだけで、管理権限のあるサーバーに新しいボットを追加できます。これで準備完了です。メッセージ「..hello」をサーバーに送信してテストしてみましょう。
また、Compute Engine の無料枠やその他のサービスについてもご覧ください。次回は、Google Cloud を利用した Discord ボットのオペレーションについて詳しく紹介します。
- Developer Relations エンジニア、Max Saltonstall
- Developer Relations エンジニア、David Stanke