raspberryPi を使って作るslack bot (cron を使った定期実行まで)

# はじめに
今回コロナの影響で大学に長期間行くことができなくなったため、家にあるRaspberryPi 3B を使って遊ぼうと思い、slackBotを作ってみようと思いました。
今回の記事ではインストールパートは扱いません。

# 環境
* RaspberryPi 3B 
* slackアカウント
* python3x

# 本題
今回作るのは、定期的にローカルに保存してある画像をSlackの特定チャネルに送りつけるbotをPython3xを用いて作りました。
大まかな流れとしましては

* [slackAPP](https://api.slack.com/apps)からAPIを作成します
* python を使って簡単なファイル送信プログラムを記述
* cronを用いて任意の時間帯に処理するように設定

では、行ってみましょ！
写真付きでイメージつきやすいと思います

まずは、[こちら](https://api.slack.com/apps)のサイトにて、以下の赤丸のボタンをクリックすることで、新規のアプリを開発することができます。

<img width="1433" alt="Screen Shot 2020-05-01 at 12.06.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328277/8407cd09-9fe9-c3c8-e9e6-f64b7d3d496d.png">

クリックしていただいたら、アプリの名前や働かせるワークスペースの選択をさせられます。
<img width="1430" alt="Screen Shot 2020-05-01 at 12.08.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328277/566c667f-6d75-67cd-4a75-ee5f06ed8709.png">

ここまでとても簡単ですね？
次は、アプリに権限を持たせていきます。赤丸で囲んでいるとこで権限を設定できます。
他の設定部分は今回は扱いませんので、他のサイトなどで確認してください。
<img width="1436" alt="Screen Shot 2020-05-01 at 12.10.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328277/e8184e5e-a238-6893-587d-375218905617.png">

先ほどのpermissionsをクリックしていただくと、以下の設定項目が現れます。
ここで詳細な権限を与えることができます。
今回はファイルをアップデートすることが目的ですので、以下の4つでよろしいでしょう。
<img width="1435" alt="Screen Shot 2020-05-01 at 12.11.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328277/6035a125-1dda-d8a4-06fc-cf3bd04e43d5.png">
<img width="724" alt="Screen Shot 2020-05-02 at 11.58.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328277/91e37ea9-3893-8e23-494f-27dea0146af2.png">


権限を与え終わったら、permissions のページトップにinstall ボタンが表示されますので、
クリックしてください。これで、アプリを使うことができるようになります。
以後、アプリの権限を変更された場合は毎回インストールし直すようにポップアップが出ますので
その都度更新してください。
<img width="1434" alt="Screen Shot 2020-05-01 at 12.14.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328277/addbb2fa-b3f6-7820-8c1b-eecd1a2fa6fc.png">

ここでは与える権限の確認がされます。
特に問題がなければ、許可してあげてください。
<img width="1429" alt="Screen Shot 2020-05-01 at 12.15.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328277/780730b5-d2e2-aa5b-3c05-ac53c2c9c9b7.png">

インストールが終了しますと、Tokenが発行されます。
これからTokenを用いて操作しますので、コピーしておくと良いかと思います。
<img width="1433" alt="Screen Shot 2020-05-01 at 12.15.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328277/f0fdbe11-4810-76bf-1119-a653ffffc838.png">

最後にbotを常駐させたいチャネルのIDを取得する必要があります。
[こちら](https://api.slack.com/methods/channels.list/test)にアクセスし、tokenを用いて取得できます。
以下の赤丸に先ほどコピーしたtokenを入力してください
<img width="1437" alt="Screen Shot 2020-05-02 at 13.12.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328277/50064167-4b0c-fba1-1119-360a74912692.png">

下にスクロールした際に Test Method をクリックすることで、json が生成され、チャネルの情報などが得られます。以下の写真のチャネルIDを取得しておいてください。後ほどpythonコードを書くときに使います。
<img width="832" alt="Screen Shot 2020-05-02 at 13.14.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328277/a9e509b5-9b9b-0012-4e84-42b8fe9582d5.png">


以上がSlackAPIで行う作業でした。
簡単すぎましたね。便利便利

次からはPythonで簡単なコードを書いていきましょう
まず、pythonにrequestsモジュールを導入しましょう

```
pip install requests
or
pip3 install requests
```

requestsモジュールはHTTP通信ができるライブラリだと思っています。
画像ファイルを送信するコードは以下です

```python
import requests
    data = {
            "token": "token HERE",
            "channels": "channel ID",
            "title": "posted from bot",
            "initial_comment": "something"
            }
    files = {'file': open("hoge.png", 'rb')}
    requests.post(url, data=data, files=files)
```

このコードでは、botを作成した際に生成したtokenを "token HERE" に入力してください。
また、botを常駐させたいチャネルのIDを "channel ID" に設定してください。
以上です。

# 自動化
自動化にはcrontabを用いようと思います。
crontabは定期的にジョブを実行するようスケジュールするcronを設定するコマンドです。

以下のテキストファイルを生成し、自動的に実行するスクリプトを指定します。
私は毎朝7:00に実行したいので以下のファイルになりました。

```
0 7 * * * /bin/bash /home/hoge/fuga.sh
```

フォーマットなどはcrontabと調べていただければいくらでも出ますのでそちらを参考に。
# おわりに
簡単にslackbotを作成できました
後半記述がめんどくさくなり、抜けてるとこがあったらコメントお願いします。