はじめに
私は趣味でバンドをやっているのですが、 バンド用のメールアドレスに届いたメッセージの内容を共有することや確認する手間が発生しました。
今回は、 GoogleAppsScript を使用して新着メールを Discord のチャンネルへ転送するようにしてみました。
手順
Discord のチャンネルの Webhook のURLを取得する
新着メールの内容を転送したい Discord のチャンネルの Webhook の URL を取得します。 チャンネルの設定から連携サービスのメニューを選択し Webhook をクリックすると、 Webhook の URL が作成されます。
Googleスプレッドシートを作成する
メッセージを転送したいメールアドレスを所有する Google アカウントで Google スプレッドシートを作成し、先程作成された Webhook の URL を A1 セルに貼り付けします。
スクリプトを作成する
スプレッドシートのメニュー > 拡張機能から Apps Script を選択します。
下記スクリプトをエディタに貼り付けて保存します。
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 は日常的に活用できる場面が多そうなので、色々なことを自動化できるようにしたいです。