Skip to content

Instantly share code, notes, and snippets.

@dais0n
Created December 29, 2021 12:31
Show Gist options
  • Save dais0n/341df70fa4f65c67ceeb23b9fa2d8495 to your computer and use it in GitHub Desktop.
Save dais0n/341df70fa4f65c67ceeb23b9fa2d8495 to your computer and use it in GitHub Desktop.
update_slack_status_by_oura_score
interface OuraReadinessResponse {
readiness: Array<OuraReadiness>
}
interface OuraReadiness {
summary_date: string
score: number
}
interface OuraSleepResponse {
sleep: Array<OuraSleep>
}
interface OuraSleep {
score: number
duration: number
}
function main() {
// get oura readiness
const OURA_API_TOKEN = PropertiesService.getScriptProperties().getProperty("OURA_API_TOKEN");
const ouraReadinessApiRawResponse = UrlFetchApp.fetch(
`https://api.ouraring.com/v1/readiness`,
{
method: "get",
headers: { "Authorization": `Bearer ${OURA_API_TOKEN}` },
}
);
const ouraReadinessApiResponse: OuraReadinessResponse = JSON.parse(ouraReadinessApiRawResponse.getContentText());
const lastReadiness: OuraReadiness = ouraReadinessApiResponse.readiness[ouraReadinessApiResponse.readiness.length - 1];
// get oura sleep info
const ouraSleepApiRawResponse = UrlFetchApp.fetch(
`https://api.ouraring.com/v1/sleep`,
{
method: "get",
headers: { "Authorization": `Bearer ${OURA_API_TOKEN}` },
}
);
const ouraSleepApiResponse: OuraSleepResponse = JSON.parse(ouraSleepApiRawResponse.getContentText());
const lastSleep: OuraSleep = ouraSleepApiResponse.sleep[ouraSleepApiResponse.sleep.length - 1];
// format slack status
const sleepMin = Math.floor(lastSleep.duration / 60) % 60;
const sleepHour = Math.floor(lastSleep.duration / 3600);
const lastReadinessSlackEmoji = getReadinessSlackEmojiFromScore(lastReadiness.score);
const statusText = `前日睡眠時間: ${sleepHour}時間${sleepMin}分`
// update user profile status
const slackApiToken = PropertiesService.getScriptProperties().getProperty("SLACK_API_TOKEN");
UrlFetchApp.fetch(
`https://slack.com/api/users.profile.set`,
{
method: "post",
contentType: "application/json; charset=utf-8",
headers: { "Authorization": `Bearer ${slackApiToken}` },
payload: `{"profile":{"status_text":"${statusText}", "status_emoji":"${lastReadinessSlackEmoji}", "status_expiration":0}}`,
}
);
}
const getReadinessSlackEmojiFromScore = (score: number): string => {
if(score >= 85 ) {
return PropertiesService.getScriptProperties().getProperty("ZEKKOUCHO_STATUS_SLACK_EMOJI");
}
if(score >= 80) {
return PropertiesService.getScriptProperties().getProperty("KOUCHO_STATUS_SLACK_EMOJI");
}
if(score >= 70) {
return PropertiesService.getScriptProperties().getProperty("FUTSUU_STATUS_SLACK_EMOJI");
}
if(score >= 60) {
return PropertiesService.getScriptProperties().getProperty("HUCHO_STATUS_SLACK_EMOJI");
}
return PropertiesService.getScriptProperties().getProperty("ZEFFUCHO_STATUS_SLACK_EMOJI");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment