pythonのslackbotを使ったslack botの開発

windowsでのpythonのslackbot apiを使ったslackbotの開発について備忘録として書いていきます。

前回の記事でvsCodeとpythonのインストールまでやりました。
https://qiita.com/tokoroten_346/items/008a560272fe16f384f2

今回はslackbotのインストールとslack側の設定をやっていきます。

まずはSlackbotライブラリのインストールを行います。

```
pip install slackbot
```
を実行してインストール…素直にインストールしてくれればいいのですが自分の環境ではプロキシの設定が上手くいかずにはじかれてしまった。というわけで以下のようにプロキシの設定を。

```
set HTTPS_PROXY=xxx.xxx.xxx.xxx:8000
set HTTP_PROXY=xxx.xxx.xxx.xxx:8000
```
ちなみにプロキシの設定を削除する時はこのコマンドが必要

```
unset HTTPS_PROXY=xxx.xxx.xxx.xxx:8000
unset HTTP_PROXY=xxx.xxx.xxx.xxx:8000
```
プロキシの設定が終わったら再度slackbotライブラリのインストールに挑戦。

```
Collecting slackbot
  Downloading https://files.pythonhosted.org/packages/1c/99/2b11c69e35aec1a2c8aac9268009a4a84cd1a07caad64662fe5d1026d0e0/slackbot-0.5.5-py2.py3-none-any.whl
Collecting slacker>=0.9.50 (from slackbot)
  Downloading https://files.pythonhosted.org/packages/cc/71/7ef8a02070d75539e7ea5c9663951062669d101663051ad9f19abd6d2543/slacker-0.13.0.tar.gz
Collecting six>=1.10.0 (from slackbot)
  Downloading https://files.pythonhosted.org/packages/65/26/32b8464df2a97e6dd1b656ed26b2c194606c16fe163c695a992b36c11cdf/six-1.13.0-py2.py3-none-any.whl
Collecting requests>=2.4.0 (from slackbot)
  Downloading https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl (57kB)
     |████████████████████████████████| 61kB 2.0MB/s
Collecting websocket-client<=0.44.0,>=0.22.0 (from slackbot)
  Downloading https://files.pythonhosted.org/packages/db/38/8f3582eb075c3eaf2a5f2a97d8ebcf67f50dc94309d5b78707a13ffc1802/websocket_client-0.44.0-py2.py3-none-any.whl (199kB)
     |████████████████████████████████| 204kB 2.2MB/s
Collecting certifi>=2017.4.17 (from requests>=2.4.0->slackbot)
  Downloading https://files.pythonhosted.org/packages/b9/63/df50cac98ea0d5b006c55a399c3bf1db9da7b5a24de7890bc9cfd5dd9e99/certifi-2019.11.28-py2.py3-none-any.whl (156kB)
     |████████████████████████████████| 163kB 1.7MB/s
Collecting idna<2.9,>=2.5 (from requests>=2.4.0->slackbot)
  Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB)
     |████████████████████████████████| 61kB 2.0MB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests>=2.4.0->slackbot)
  Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
     |████████████████████████████████| 143kB 2.2MB/s
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests>=2.4.0->slackbot)
  Downloading https://files.pythonhosted.org/packages/b4/40/a9837291310ee1ccc242ceb6ebfd9eb21539649f193a7c8c86ba15b98539/urllib3-1.25.7-py2.py3-none-any.whl (125kB)
     |████████████████████████████████| 133kB 2.2MB/s
Installing collected packages: certifi, idna, chardet, urllib3, requests, slacker, six, websocket-client, slackbot
  Running setup.py install for slacker ... done
Successfully installed certifi-2019.11.28 chardet-3.0.4 idna-2.8 requests-2.22.0 six-1.13.0 slackbot-0.5.5 slacker-0.13.0 urllib3-1.25.7 websocket-client-0.44.0
WARNING: You are using pip version 19.2.3, however version 19.3.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
```
ダウンロードは上手くいったけどpipのversionが古いですよとワーニングが表示されていたので表示に従いpipをアップデート

```
python -m pip install --upgrade pip
```

slackbotのインストールが終わったのでslack側の設定をしていきます。

Slack APIにアクセスしてBot作成します。
https://api.slack.com/apps

Create New appをクリックすると以下の画面になるのでアプリ名とworkspaceを設定、今回はslack_testというアプリ作ります。
![slackアプリ作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542570/c76e46ef-357c-fa87-9d11-4e1f6f0bbc33.png)

Bot Userを選択してBot機能を追加していきます。
![アプリ設定画面2(bot).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542570/af292b09-69b6-e772-5629-5aaf74780e74.png)

Bot機能を追加したらInstall Appを選択してworkspaceにアプリをインストールします。
![アプリ設定画面(install).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542570/15854fb2-c1ce-2af0-52ed-4d184ec0f83d.png)

アプリインストールするとトークンが表示されるのでメモ取っておきます。
![アプリ設定画面(token).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542570/2fb49702-8798-00f4-aa3b-8d0638e76df7.png)

これでBot機能を持ったアプリの追加ができました。


次にpythonプログラムを作っていきます。こちらを参考にしました。
https://qiita.com/sukesuke/items/1ac92251def87357fdf6

構造はこんな感じ

```
hello
 ├ hello.py              # botを起動するファイル
 ├ slackbot_settings.py  # botの設定を書くファイル(slackのトークンなど)。
 └─plugins
   ├ __init__.py          # 空でいい…らしい 
   └ bot_module.py        # とりあえず空でいい。後々機能追加していく予定
```
slackbot_settings.pyを違うファイル名にするとうまくいかないので注意が必要(地味に引っかかった)。


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

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

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

```python:slackbot_settings.py
# 先ほど取得したbotアカウントのトークンを指定する
API_TOKEN = "xxxx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxxxxxxx"

# このbotのデフォルトの返答を書く
DEFAULT_REPLY = "おはようございます"

# プラグインスクリプトを置いてあるサブディレクトリ名のリスト
PLUGINS = ['plugins']
```

作り終わったら早速実行します。

```
C:\python_study\hello>python hello.py
Hello bot
```

botをローカルで実行する事が出来たので次にslack側の設定していきます。

botテスト用のチャンネル作成します。
![チャンネル作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542570/01937908-55a6-6b13-6d39-944f249dd5f7.png)

作成したチャンネルにbotを招待し、botにリプライ送ると返事が返ってきます。
![bot-reply.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542570/7b2d356c-fcdf-5810-8f88-14c1cbb7a6f9.png)

これでローカルでのデフォルトリプライを返すbotの作成が終わりました。
次の記事では色んな種類のリプライ書いていきます。
https://qiita.com/tokoroten_346/items/9b7d55efe7e481a1d197