はじめに

私は趣味でバンドをやっているのですが、 バンド用のメールアドレスに届いたメッセージの内容を共有することや確認する手間が発生しました。

今回は、 GoogleAppsScript を使用して新着メールを Discord のチャンネルへ転送するようにしてみました。

手順

Discord のチャンネルの Webhook のURLを取得する

新着メールの内容を転送したい Discord のチャンネルの Webhook の URL を取得します。 チャンネルの設定から連携サービスのメニューを選択し Webhook をクリックすると、 Webhook の URL が作成されます。

Discordチャンネル編集

DiscordWebhook作成

Googleスプレッドシートを作成する

メッセージを転送したいメールアドレスを所有する Google アカウントで Google スプレッドシートを作成し、先程作成された Webhook の URL を A1 セルに貼り付けします。

スクリプトを作成する

スプレッドシートのメニュー > 拡張機能から Apps Script を選択します。

Googleスプレッドシート

下記スクリプトをエディタに貼り付けて保存します。

function hook() {
  // 未読のメッセージを取得する
  const threads = GmailApp.search('label:unread');

  // 未読のメッセージが存在しなかった場合処理を終了する
  if (threads.length == 0) {
    return
  }

  threads.forEach(function (thread) {
    const messages = thread.getMessages();

    const payloads = messages.map(function (message) {
      // メッセージを既読に設定する
      message.markRead();

      const from = message.getFrom();
      const subject = message.getSubject();
      const plainBody = message.getPlainBody();
      const webhook = getWebhookUrl();
      const payload = {
        content: subject,
        embeds: [{
          title: subject,
          author: {
            name: from,
          },
          description: plainBody.substr(0, 2048),
        }],
      }
      return {
        url: webhook,
        contentType: 'application/json',
        payload: JSON.stringify(payload),
      }
    })
    UrlFetchApp.fetchAll(payloads);
  })
}

function getWebhookUrl() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getActiveSheet();
  // スプレッドシートのA1セルからDiscordのWebhookURLを取得する
  return sheet.getRange(1, 1).getValue();
}

スクリプト作成

実行確認

予め対象のメールアドレスにメッセージを送り未読の状態にしておきます。

関数の選択のメニューから hook を選択している状態で実行をクリックします。

実行許可の確認ウィンドウが出てくるので、許可します。

先程送ったメッセージがチャンネルに届けば実行確認完了です。

確認完了

定期的にメッセージを転送する設定

画面左横のトリガーをクリックし、遷移した画面でトリガーを追加をクリックします。

トリガー

イベントのソースを時間主導型にし、任意の時間を設定することで、定期的に関数が実行され未読のメッセージが転送されます。

スケジュール設定

まとめ

ひとまず、メッセージを確認した人が Discord に内容を添付する手間や、一人一人がメッセージを確認する手間がなくなりました。 Google Apps Script は日常的に活用できる場面が多そうなので、色々なことを自動化できるようにしたいです。