Bots使ってSlack勤怠Bot制作メモ 

## 前書き
YouTubeで`Bots`使用してSlackBotを制作する動画を拝見しましたので、メモとして残します。

## Botsの新規追加
Botsはslack botの一種であります、Appに`bots`で検索していただければ出てきます。
![E02543D7-D417-4723-B921-DC3A9863D38E.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/c928fd38-bf34-7dc8-fb9b-648122685179.jpeg)

`追加`を押して頂けると、`ユーザー名`入力の画面が表示されます、入力して`ボットインテグレーションを追加する`をクリックしましょう。
![3BBE1803-0321-4A27-93B8-8DEA98718FBE.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/2f547582-69db-d67c-5a26-10a302e1c773.jpeg)

追加完了後、APIトークン表示されますので、それをコピーしましょう、後で使用することになります。

![B055BA04-E1A9-4B98-AADD-13BD600769FA.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/fa379942-5479-629f-6a6f-6209c84823ff.jpeg)

ここまでの操作終わっていれば、SlackのApp一覧に追加されたBotsが表示されるはずです。
![23215058-5C9B-49B7-B305-15C90D29D80E_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/2d11020c-c9f1-98f0-d6c2-b5ec35a626d8.jpeg)


## Botsの基本操作

### 下準備
pythonのプロジェクトを新規に作ります、以下のパッケージインストールしましょう。

```
pip install slackbot
```

フォルダ構成は以下になります。

```
|-- slackbot_project
|-- |-- main.py
|-- |-- slackbot_settings.py
```

API_TOKENに`インテグレーションの設定`に表示されてるAPIトークンを入れてあげましょう。
DEFAULT_REPLYはデフォルト返信の文言になります、適当に何かいれてあげましょう。

```python:slackbot_settings.py

API_TOKEN = "xxx"

DEFAULT_REPLY = "botです"
```

```python:mian.py
from slackbot.bot import Bot

bot = Bot()
bot.run()
```
この状態で`main.py`を実行して、slackのAppからBotsにDMしてみましょう、以下の返信帰ってきたら完成です。
![EEF0F09B-604B-4EBE-9D6D-B3BFA83394D7_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/3aa8b8bf-e348-80bb-56f0-bcd0b5b42efe.jpeg)

### 指定メッセージの処理

```python:mian.py
from slackbot.bot import Bot
from slackbot.bot import respond_to

bot = Bot()

@respond_to('練習')
def sample(message):
    message.send("練習です。")

bot.run()
```
追加完了後、再度メッセージを送ってみましょう、特定のキーワードに反応できるようになってるはずです。
![2E2CE313-13AA-4147-A6A9-8E123FD07F06_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/b7d387ff-1b7e-18bd-4f97-f2245573e3d6.jpeg)

### チャンネル内の指定メッセージの処理

まずはBotsを適当なチャンネルに追加します。
![3AF4E2E8-2FD7-4D67-AC9B-BB0D9A8DD736_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/2eec2c12-539b-8e15-1f46-9d22a29db2d0.jpeg)

この状態では、メンションしなければ、Botsはキーワードに反応できません。
![B18B1B2D-B36C-49FB-9078-4F6F502DFF0B_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/e8f441e1-4337-4328-908b-e1910990779d.jpeg)

特定のキーワードを反応してもらうために、`listen_to`使うように修正を行います。

```python:mian.py
from slackbot.bot import Bot
from slackbot.bot import listen_to

bot = Bot()

@listen_to('練習')
def sample(message):
    message.send("練習ですか?")

bot.run()
```
再度slackのチャンネルでメッセージを送信してみます、ちゃんとBotsがキーワード拾えるようになりました。

![F39E1EFB-0A9F-4175-AE04-7E1BDF45DD26_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/656ecfce-c975-8b41-2247-302cadbdeeff.jpeg)

## 打刻時間を記録

`出勤`と`退勤`二つのキーワード拾えて、Excelに記録できるBotsを作ります。
ファイル構成は以下になります。

```slack_bot
|-- slackbot_project
|-- |-- plugins
|-- |-- |-- __init__.py
|-- |-- |-- my_mention.py
|-- |-- run.py
|-- |-- slackbot_settings.py
```

```python:run.py
from slackbot.bot import Bot

def main():
    bot = Bot()
    bot.run()

if __name__ == "__main__":
    print('start bot')
    main()
```

```python:
from datetime import datetime

from slackbot.bot import respond_to
import openpyxl


@respond_to('出勤')
def punch_in(message):
    print('出勤時刻登録します')
    timestamp = datetime.now()
    wb = openpyxl.load_workbook('勤怠管理.xlsx')
    ws = wb.worksheets[0]
    max_row = ws.max_row
    ws[max_row + 1][0].value = timestamp.strftime("%Y/%m/%d")
    ws[max_row + 1][1].value = timestamp.strftime("%H:%M")
    wb.save('勤怠管理.xlsx')
    message.send(f'出勤時刻登録完了しました:{timestamp.strftime("%H:%M")}')


@respond_to('退勤')
def punch_out(message):
    print('退勤時刻登録します')
    timestamp = datetime.now()
    wb = openpyxl.load_workbook('勤怠管理.xlsx')
    ws = wb.worksheets[0]
    max_row = ws.max_row
    ws[max_row][2].value = timestamp.strftime("%H:%M")
    wb.save('勤怠管理.xlsx')
    message.send(f'退勤時刻登録しました:{timestamp.strftime("%H:%M")}')

```


`__init__.py`は空でオーケー、slackbot_settings.pyに変更加えません。

この状態でslackbotを起動します。
![30C91F2D-2F2D-47E4-85AA-A6B596F6F1CE_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/467c56ae-812a-dd68-8186-004c9152f6f5.jpeg)
作られたエクセルファイルにもちゃんと記録が残りました。
![429462BF-9F0D-48D9-A200-9CB7D3741048_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320164/9d44aedb-a5d0-8056-ec7e-fd1d0aea0ea1.jpeg)

## 後書き
Botsを使ってみて、主流のBoltと比べて、どうしてもドキュメントが少ないため、多少使いづらいと思いました。