フレックス制だとプレミアムフライデーを感じれないからSlackのステータス変更した

この記事は、[ハンズラボ Advent Calendar 2019](https://qiita.com/advent-calendar/2019/handslab) 3日目の記事です🎅

## 自己紹介

19新卒入社の @bakuwarorin です。（[Twitter](https://twitter.com/bakuwarorin)も同じID）
今は、POSレジを作っているPOSチームに所属し、主にSwiftを書いています🔰

好きな食べ物は**しょっぱいもの**（極論塩）
嫌いな食べ物は**えのき**（ノーコメント）
好きな場所は**綺麗なトイレ** （弊社ビルはめっちゃ綺麗）
嫌いな場所は汚い**プールサイド** （濡れてるとより❌）

今回は初めて[**AdventCalendar**](https://qiita.com/advent-calendar/2019/handslab)に参加してみました！

## はじまり

### プレミアムフライデーって知ってますか

*Wikipediaより*
> 2017年（平成29年）に日本国政府と経済界が提唱した個人消費喚起キャンペーンである。博報堂が事務局を受託している。月の最終金曜日に合わせて、民間企業はイベントやセールなどのキャンペーンを行っている。略称はプレ金

`略称はプレ金` ← 知らなかった。

*https://tech-camp.in/note/pickup/66465/ より*
> プレミアムフライデーを簡単に説明すると、「月末の金曜日は15時に仕事を終えましょう」というキャンペーンのことです。

---

らしいです。

なんですが、弊社フレックスタイム制を導入していて、入社から7回のプレミアムフライデーはいつもの金曜となんら変わらず過ごしてしまっています。~~純粋にプレミアムフライデーの陰が薄い説~~
（別に不満はない）

***[記入日11/23]***
11月のプレミアムフライデーの迫ってきてしまっています。
今月は手短なところでプレミアムフライデーを感じようと思っているので、Slackのステータスをプレミアムフライデーだけ変更するプログラムを作成しようと思いました。

## 第一段階

とりあえずステータスを変更してみます。

https://api.slack.com/ を見てみた。
https://api.slack.com/methods/users.profile.set があった。

<img width="683" alt="スクリーンショット 2019-11-22 23.17.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137649/235d567d-26e5-b5e3-1642-2c6207b8e857.png">

- 必要な値
    - token: 発行した
    - user: https://api.slack.com/methods/users.list/test 見つけた
    - profile: ここに変更後の値を書く

できたものが↓です。

```python:change.py
#!/usr/bin/python

import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), "packages"))
import requests
import json

REQUEST_URL = "https://slack.com/api/users.profile.set"
USER_TOKEN = os.environ["USER_TOKEN"]
USER_ID = os.environ["USER_ID"]

def change_status(text, emoji):
  payload = {
    "token": USER_TOKEN,
    "profile": json.dumps({
        "status_text": text,
        "status_emoji": emoji
    }),
    "user": USER_ID
  }

  response = requests.post(REQUEST_URL, payload)
  print(response) # 確認用

if __name__ == "__main__":
  text = "SUSHI食べたい"
  emoji = ":sushi:"

  change_status(text, emoji)
```

実行してみます。

```
<Response [200]>
```

<img width="529" alt="スクリーンショット 2019-11-12 14.43.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137649/9654c521-de42-ddd9-411d-474f3cc68571.png">

無事、🍣 [SHUSHI食べたい](https://www.youtube.com/watch?v=epfPe2U_2Xk) に変更できました🎉

## 第二段階

弊社Slackには大量のカスタム絵文字が登録されていて、もちろん(?)プレミアムフライデーもありました。
カスタム絵文字にできなかったら、この記事は終了してしまうので試しました。

```Python:change.py
text = "プレミアムフライデー"
emoji = ":premiumfriday:"
```

実行してみます。

```
<Response [200]>
```

<img width="530" alt="スクリーンショット 2019-11-22 23.27.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137649/727f0f82-22bc-79ce-3182-6b8878e5672c.png">

できたー！！

## 第三段階

最後にAWS lambdaのトリガーにCloudWatch Eventsを設定します。

<img width="683" alt="スクリーンショット 2019-11-22 23.46.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137649/6c75136e-0c07-f76b-c484-c93b75f6423b.png">

毎月最終金曜日の朝10時に発火するように設定

## 忘れてた

第三段階までで月末の金曜日にステータスが変わるんですが、有効期限(?)を設定していないため次の日も次の週もプレミアムフライデーになってしまいます。（それも悪くない🤩）
textとかemojiを設定したところに`status_expiration`という値（unixtime）を設定すればいいようです。

```python:change.py
from datetime import datetime

~~

now = datetime.now().timestamp()
tomorrow = now + 50400  # 14時間後

payload = {
  "token": USER_TOKEN,
  "profile": json.dumps({
      "status_text": text,
      "status_emoji": emoji,
      "status_expiration": tomorrow
  }),
  "user": USER_ID
}
```

日付が変わる頃には気持ちを切り替えなければならないので14時間後にステータスが削除されるようにしました。

## 結果

***[記入日11/29]***
<img width="529" alt="スクリーンショット 2019-11-29 10.44.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137649/6064c004-a0a7-971f-f915-d2366846df44.png">
成功した。今日は早く帰ろうかな🎉

---

[ハンズラボ Advent Calendar 2019](https://qiita.com/advent-calendar/2019/handslab) 4日目は @yktakaha4 さんです🎉