Skip to content

Instantly share code, notes, and snippets.

@tamanugi
Last active May 2, 2017 13:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tamanugi/eaf859120744de38c08d00d440cb4a77 to your computer and use it in GitHub Desktop.
Save tamanugi/eaf859120744de38c08d00d440cb4a77 to your computer and use it in GitHub Desktop.
GASを使ってGoogle CalendarとSlack Statusを同期する ref: http://qiita.com/tamanugi/items/1c083dac5d35f65092d9
var calendarId = "Calendar ID を入力";
var slackToken = "Slack API Token を入力"
function onTrigger() {
var event = getCurrentEvent(calendarId);
updateSlackStatus(event);
}
/*
* 指定のカレンダーから現在時刻のイベントを取得する
*/
function getCurrentEvent(calendarId) {
var now = new Date();
var events = CalendarApp.getCalendarById(calendarId).getEventsForDay(now);
Logger.log(events)
var currentEvent = {
emoji: ":smile:",
text: ""
};
if (events && events.length > 0) {
for (var i = 0; i < events.length; i++) {
var event = events[i];
if (event.isAllDayEvent()) {
// 終日イベントの場合
if(/休暇/.test(event.getTitle())){
// 休暇 が含まれている場合
currentEvent.text = event.getTitle();
currentEvent.emoji = ":kyuuka:"
break;
}
} else {
var start = new Date(event.getStartTime())
var end = new Date(event.getEndTime())
if(start < now && now < end){
// 現在時刻がイベント中の場合
var title = event.getTitle();
var emoji = "";
if(/(会議|MTG|mtg|打ち合わせ|定例)/.test(title)){
// 会議中 の絵文字を設定
emoji = ":kaigi_tyu:";
}else if(/(外出|訪問)/.test(title)){
// 外出中 の絵文字を設定
emoji = ":gaishutsu_tyu:";
}else{
// なんかしてます の絵文字を設定
emoji = ":nankashitemasu:";
}
currentEvent.text = title;
currentEvent.emoji = emoji;
break;
}
}
}
} else {
Logger.log('No events found.');
}
return currentEvent;
}
function updateSlackStatus(event){
try {
var profile = {
"status_emoji": event.emoji,
"status_text": event.text
}
// Slack APIの仕様に従ってURL enociding する
var encodedProfile = encodeURIComponent(JSON.stringify(profile))
// Slack API を叩いてprofileを更新する
var result = UrlFetchApp.fetch("https://slack.com/api/users.profile.set?token=" + slackToken + "&profile=" + encodedProfile);
Logger.log(result)
} catch(ex) {
Logger.log(ex)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment