😎

GASでお手軽にbotを作ってみよう!(Discord)

2023/04/26に公開

GASでお手軽にbotを作る

こんにちは!情報科学専門学校のモノづくりサークル、MakeITのkentyです!
今回は、GAS(Google Apps Script)でお手軽にDiscordのbotを作る方法をご紹介します!

(公式ドキュメントはこちら)
https://developers.google.com/apps-script?hl=ja

前提知識

こちらのbotを作る際には、以下についてある程度知識があると理解がしやすいと思います

  • JavaScript
  • Webについての簡単な仕組み(HTTP methodや、URLなどについて)

Discordの設定をする

まず、自動通知やメッセージを受け取るための設定を行います。

  1. discordアプリを開き、もし自身のサーバーががない、もしくは他の人がいるので開発用に使いたくないという事情があれば、新規にサーバーを作成してください
  2. botからのメッセージを受け取りたいテキストチャンネルで右クリックします
  3. その後、「チャンネルの編集」を選択します
  4. 「連携サービス」を選択し、その中の「ウェブフックを作成」を選択します。
  5. 「新しいウェブフック」を選択し、作成されたウェブフックをURLをコピーしましょう(後ほど使います)

Google Accountを用意する~GASの初期画面

まずは、任意のGoogle Accountをご用意ください。

その後、Google Driveの画面へ行き、

  1. 任意のフォルダ内で右クリック
  2. その他を選択
  3. Google Apps Scriptを押し、スクリプトファイルを作成します
    (今回は、scriptsというフォルダを作成し、その中でスクリプトファイルを作成しました)

その後、「無題のプロジェクト」としてエディタ画面が表示されればセットアップは終了です!

コードを書いていく

それでは、コードを書いていきましょう!
今回は、起動したら"Hello, World!"とDiscordにメッセージを送るようにしてみましょう。

エディタを以下のように編集し、先ほどのウェブフックURLに対してメッセージ情報を含んだPostリクエストを送信するような処理を追加します。

const WEBHOOK_URL = "https://xxxxxxxxx" //ご自身のウェブフックURLに置き換えてください

function myFunction() {
   let payload =
  {
    "content": "Hello, World!"
  };

  let options =
  {
    "method": "post",
    "payload": payload
  };

  UrlFetchApp.fetch(WEBHOOK_URL, options);
}

実行!

それではさっそく上記実行ボタンを押し、実行してみましょう!

このアプリはGoogleで確認されていませんと表示されたら、「詳細」を選択し、
「無題のプロジェクト(安全ではないページに移動)」を選択してください。
※こちら少々仰々しいですが、GASでアプリを作る以上必ず出てくるものです。

ここまで行ければ、Hello, World!というメッセージがさきほど設定したチャンネルに来ているはずです!!

今後について

ここからさらに発展させる場合について、下記で何点か触れさせていただければと思います!

定期実行させたい

定期実行させたい場合は、「トリガー」という仕組みを使うことになります。「GAS トリガー」などで検索してみるとたくさん記事が出てくると思います。

スプレッドシートとの連携

GASはスプレッドシートとの連携が可能です!
例えば、スプレッドシートにお買い物メモを書いておいて、スクリプトを定期実行し、スクリプトからそのスプレッドシートを読み込みその内容を通知する...というようなことも可能です!

ユーザーのメッセージに対して検知・反応したりしたい

残念ながら、「Discordでのユーザーの入力に対して反応し、処理をする」というような行為は、GASではできません。あくまで、GAS側からの一方的な送信のみです。
もしこの仕組みを実現したい場合は、PythonやRubyといった言語を用いて、Discord Botのための外部ライブラリを使用し作成することになります。
その場合は、「Python DiscordBot」や「Ruby DiscordBot」などと検索してみてください。
(ただし、これらは本記事に比べればかなり複雑な内容になります。)

Discussion