Google スプレッドシートとDiscord webhookで誕生日お祝いBotを作ろう
みなさんこんにちは、あまみです。
今回はdiscordのWebhook(ウェブフック)機能を使った、『条件(日付)が一致した際にDiscordにメッセージを送信する機能を作っていきたいと思います。』
用意するもの
Google スプレッドシート(以下、Google SS)
Discord アカウント
誕生日やイベント情報をまとめたもの(Google SSで作成)
今回は誕生日で作るのでこんな感じで(表のBirthdayの部分)
使用ファイル
1.概要
今回の大まかな流れを説明します。
今回はGoogle SSからdiscordのwebhookへ一方通行にデータを送りBotとしてメッセージを送信します。
Google SS -> Google Apps Script -> Webhook -> Discord「今日は〇〇の誕生日!」
2.Discord でWebhookの設定を
Discordで「ウェブフックの管理」って権限がいるので注意。
サーバー設定 > 連携サービス > ウェブフック で新しいWebhookを追加できる。urlは後で使う。
(Discordの設定画面は頻繁に変わるから正しいことは公式で)
3.Google Apps Script
さて、情報が揃ったので次にコードの時間を
今回はGoogle Apps Scriptを使用します
// WebhookのURLリスト
const Birthday_Notice_Webhook_List = [
"##DiscordのWebhookのURLをここに貼る##"
];
// botメッセージの設定
const Birthday_Notice_Webhook_Payload = {
"username": "誕生日bot", // メッセージの送信者名
"content": "今日%sは%sの誕生日です!" // メッセージ本文
};
// この関数を毎日0-1時(JST)に起動
function main_everyday() {
checkBirthday();
}
function checkBirthday() {
// 検索対象の列番号(10列目=J列)
const Day_Column = 10;
// "Google SSのシート名"
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("##シート名##");
// 今日の日付
today = Utilities.formatDate(new Date(), "JST", "MM/dd");
Logger.log(`today: ${today}`);
// 日付を検索
var textFinder = sheet.createTextFinder(today);
textFinder.matchEntireCell(true) // 全体一致
var ranges = textFinder.findAll();
Logger.log(`検索結果: ${ranges.length}件`);
// 該当セルをひとつづつ
for (var i = 0; i < ranges.length; i++) {
if (ranges[i].getColumn() == Day_Column) {
var webhook_payload = Object.assign({}, Birthday_Notice_Webhook_Payload); // オブジェクトの参照渡しを回避
// メッセージに日付と名前を埋め込み
webhook_payload["content"] = Utilities.formatString(
Birthday_Notice_Webhook_Payload["content"],
today, ranges[i].offset(0, ##誕生日から名前までの距離##).getValue()
// "-8"は今いるところから左に8ということ。(-1は左に1つ隣のデータ)
);
// メッセージを送信
postWebhook(Birthday_Notice_Webhook_List, webhook_payload);
}
}
}
function postWebhook(url_list, payload) {
var options = {
"method": "POST",
'contentType': 'application/json',
"payload": JSON.stringify(payload)
};
Logger.log(`Payload for webhook: ${options["payload"]}`);
for (var i = 0; i < url_list.length; i++) {
// HTTPリクエストを送る
var r = UrlFetchApp.fetch(url_list[i], options);
Logger.log(`Response from webhook: (${r.getResponseCode()})${r.getContentText("UTF-8")}`);
}
}
こんな感じ〜## ##で3箇所囲っているところは人によって違ったりするので調節を。
完成!
Google SSの下の方にテストデータ(誕生日が今日)とかいれて実行するときちんと動くと思います。
例えば誕生日のところをイベント開催日にしたり、タスク管理表と組み合わせたり使い方は人それぞれです。また今回は日付が変わった頃に実行しましたがこういった『タイミングを決めて自動で実行するBot』というのはDiscord用にDiscord.pyなどのBotをいちいち作る必要がなくかなり楽です。
いいなと思ったら応援しよう!
もし満足いただけたらサポートの方、お願いします!
いただいたサポートは今後の活動を支える重要な資産になります!