Last active
May 2, 2017 13:59
-
-
Save tamanugi/eaf859120744de38c08d00d440cb4a77 to your computer and use it in GitHub Desktop.
GASを使ってGoogle CalendarとSlack Statusを同期する ref: http://qiita.com/tamanugi/items/1c083dac5d35f65092d9
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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