0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita全国学生対抗戦Advent Calendar 2024

Day 8

GASでDiscordにGoogleDrive変更通知を飛ばす

Last updated at Posted at 2024-12-14

概要

GoogleDriveの変更通知をDiscord Webhookで通知する機能の作成

Google App Script (以下gasと表記する)を利用し、定期的に処理を実行する事で変更履歴を監視し更新があった場合通知する

  • Google App Scriptとは

    Googleが提供しているサービス(Google Driveやスプレッドシートなど)を操作したり、拡張することが出来る機能

    .gs という拡張子を利用する、書式はJavaScript

環境構築

gasはブラウザ上のgas管理画面上でコーディングする事は可能だが、

バージョン管理やショートカット、インテリセンスなどを利用したいので、vscode上で開発する

Googleが提供しているgasのCLIツールを利用する事でローカルで開発できる

vscodeでの環境構築は下記参照

実装

今回のプロジェクト

JavaScriptの言語仕様などは割愛

Driveのアクティビティ取得

Googleが提供しているDriveActivityAPIという機能を利用する事で、Google Driveのアクティビティを取得する事が出来る

DriveActivity.Activity.query(parameter)関数を利用する事で引数のパラメータに当てはまるActivityを取得できる

今回使っていないパラメータや、詳細を知りたい場合は公式のリファレンスを参照

const request = {
  // アクティビティの取得範囲を指定 (直前10件サーチ)
  pageSize: 10,
  // アクティビティを取得するフォルダのIDを指定 (items/フォルダID)
  ancestorName: "items/" + rootFolderId,
  // アクティビティの取得範囲を指定 (since: 直前10分)
  filter: since ? `time > ${since}` : "",
  consolidationStrategy: { legacy: {} },
};
console.log(request);

try {
  // Activity.queryメソッドはGoogle Driveの過去のアクティビティをクエリします。
  const response = DriveActivity.Activity.query(request);

Discordへのメッセージ送信

UrlFetchApp.fetch()関数を利用する事で、HTTPリクエストを送信できます

Discord Webhookについては調べるか

/**
 * Google Drive 更新通知をDiscordに送信
 * @param {Discord送信メッセージ} message
 */
function postToDiscordWebhook(message, folderId) {
  const url = PropertiesService.getScriptProperties().getProperty(
    "DISCORD_WEBHOOK_URL"
  );
  // フォルダのURLと名前を取得
  let driveLink = DriveApp.getFolderById(folderId).getUrl();
  let driveName = DriveApp.getFolderById(folderId).getName();

  UrlFetchApp.fetch(url, {
    method: "post",
    contentType: "application/json",
    payload: JSON.stringify({
      content: "Google Drive 変更通知",
      embeds: [
        {
          title: driveName,
          url: driveLink,
          description: message,
          color: 5620992,
        },
      ],
    }),
  });
}

Google Driveの設定

ドライブの情報を読み取るためには フォルダID を利用する事で、ドライブ内のどのフォルダを読み込むかを設定できます

GAS管理画面での設定

利用するサービスの登録と認証

上記のAPIなどを利用するには、アプリケーション設定に追加する必要があります

画面左のサービスの+ボタンから、Googleが提供しているAPIを利用する事が出来ます

image.png

今回は DriveDriveActivity をバージョンとIDはデフォルトそのままで利用します

これらを追加して関数を実行すると、初回実行時は権限の認証画面が出てくるので、Googleアカウントでログインして許可します

image.png

正常に実行されると、Discordへ結果が送信されます

image.png

環境変数の登録

gasにはスクリプトプロパティという機能があり、環境変数のようなものを定義できます

画面左のプロジェクトの設定タブから設定し、今回はこれらのプロパティを使用しています

image.png

トリガー登録

gasはトリガーを設定する事で、定期的に実行することが出来ます

image.png

今回は10分おきに関数を実行するトリガーを設定しています

無料分で使える量には限りがあるので注意してください

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?