グーグルカレンダーの一週間の予定をDiscordのbotで送信してみた Google Apps Script(GAS)

グーグルカレンダーの中身通知してくれ~~~!!!

ディスコード使いまくるからそこに通知くれ~~~!!!

 

ということで、作りました。

Google Apps Script(GAS)を用いてグーグルカレンダーを取得し、その後webhookを叩き、ディスコードにbotとして予定を送信します。

 

2点メモを取ろう

まずメモをしてほしいものが2つあります。

 

予定を送信したいテキストチャットを選択して設定に入ります。
連携サービスから新しいウェブフックを選び、ウェブフックURLをコピーしてメモしてください。後に使用します。

もう一点




グーグルカレンダーから取得したいカレンダーを選択し、カレンダーの統合タブからカレンダーIDをメモしてください。

 

その後、https://script.google.com/homeに移動してください。そして新しいプロジェクトを制作します。

名前はなんか「たこ焼きまんぼ」とかでいいんじゃないですか?

 

その後、下にあるソースコードをペタっと貼って実行すれば・・・!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

完璧ですね

芋煮が大好きなあたしンちのママみたいな化け物が予定を通知してくれます。

僕の予定は井戸を作ったり花壇を荒らしたりするようですね。

後にヨネスケを襲名しますが、その後すぐに引退する予定です。

あくまで予定なのであしからず。

 

 

 

 

ソースコード

 

const CALENDAR_ID = '???????'; //カレンダーIDを入れてください
const WEBHOOK_URL = 'https://hogehoge';//ウェブフックのURLをいれてね
var weekday = ["日", "月", "火", "水", "木", "金", "土"];

function notifyWeekly() {

var dt = new Date()
var message = "来週の予定だよ!\n\n";

for ( var i = 0; i < 7; i++ ) {

dt.setDate(dt.getDate() + 1);
message += Utilities.formatDate(dt, 'JST', '★ MM/dd(' + weekday[dt.getDay()] + ')') + "\n";
var dayText = "";
var calendar = CalendarApp.getCalendarById(CALENDAR_ID);
var events = calendar.getEventsForDay(dt);

var calendarName = calendar.getId()
if ( calendarName == undefined ) {
message +="予定はありません\n\n";
continue;
}

var events = calendar.getEventsForDay(dt);
if( events.length == 0 ) {
message +="予定はありません\n\n";
continue;
}

dayText +="-----------------------" + "\n";

for ( var j = 0; j < events.length; j++ ) {
dayText += String(Utilities.formatDate(events[j].getStartTime(), "JST", "HH:mm"));
dayText += "-"
dayText += String(Utilities.formatDate(events[j].getEndTime(), "JST", "HH:mm"));
dayText += "\n"
dayText += String(events[j].getTitle()+'\n');
}

 dayText += "\n"
message += dayText;
}


const payload = {
username: "芋煮だいすき❤",
content: message,
};

UrlFetchApp.fetch(WEBHOOK_URL, {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload),
});
}

 

 

 

 

 

 

よくわかりそうな解説

補足程度に説明をします。

最初の二行はカレンダーIDとウェブフックのURLに差し替えてください。

もうこれで動くと思います。

 

以下気になる人だけ見てくださいな

 

dt.setDate(dt.getDate() + 1);
実行した次の日から見てます。今日が日曜日なら月曜日から日曜日まで探索します。

 

 

message += Utilities.formatDate(dt, ‘JST’, ‘★ MM/dd(‘ + weekday[dt.getDay()] + ‘)’) + “\n”;

日付を~月~日(曜日)の形式で出力します。

 

var calendar = CalendarApp.getCalendarById(CALENDAR_ID);
var events = calendar.getEventsForDay(dt);

カレンダーを読み込んで、一日の予定を取得します。

 

 

var events = calendar.getEventsForDay(dt);
if( events.length == 0 ) {
message +=”予定はありません\n\n”;
continue;
}

イベントの数が0ならば予定はありませんと表示します。

 

 


dayText +=”———————–” + “\n”;

for ( var j = 0; j < events.length; j++ ) {
dayText += String(Utilities.formatDate(events[j].getStartTime(), “JST”, “HH:mm”));
dayText += “-“
dayText += String(Utilities.formatDate(events[j].getEndTime(), “JST”, “HH:mm”));
dayText += “\n”
dayText += String(events[j].getTitle()+’\n’);
}

線を引いてから無理やりゴリ押しで表示してます。
開始時間を代入して、ハイフン入れて、終了時間を代入して、改行して、予定の名称を代入しています。関数にしていないのは、もうなんか勢いで書いてしまってめんどくさくなったからです。それだけです。

 

const payload = {
username: “芋煮だいすき❤”,
content: message,
};

UrlFetchApp.fetch(WEBHOOK_URL, {
method: “post”,
contentType: “application/json”,
payload: JSON.stringify(payload),
});
}

usernameに好きな名前を入れることができます。
無難に「予定bot」とかにしてもいいですし、なんでもいいですよ。
変更しないと芋煮だいすきな奴が予定を通知してきます。

その後ウェブフックを叩いてjson形式でメッセージをディスコードに送ります。

 

以上です

 

 

最後に私の本当の予定を晒したいと思います。

 

 

 

 

 

 

 

 

 

 

 

 

ふつうにかなしい

 

おわり

 

 

 

 

参考にしたウェブサイト

https://qiita.com/monoqlock/items/55bf4860003ab1405a7f

https://zenn.dev/tamfoi/articles/18c4a815cc3449

The following two tabs change content below.

ぬるきん(あずま)

身売り顔出し担当偏差値6億.com
無職で自分を切り売りしているおじさん。 女装したりタンバリンを叩いたりしながら生きています。 ワインで頭を洗えば、僕のファンができた時にファンの皆様が飲シャンしやすいと思うのでずっとワインで頭を洗っています。

コメントする

CAPTCHA