MacでSlackBot開発をしてみた

PythonでSlackのBotを作りたくなり、環境構築から実際に動作確認するまでやってみました。
ちなみにこの記事は PythonのslackbotライブラリでSlackボットを作る – Qiita を参考に実施しました。リンク先のページに詳しい説明がされています。

今回作るのは以下の画像のように、Bot宛にメッセージを送ると返事をしてくれるやつです。

必要なもの

  • Homebrewが動くMac (Mojave 10.14.6で確認)
  • Bot用のSlack API Token

環境構築

Bot開発用の環境を構築します。

HomebrewでPython3をインストールする。

1
brew install python3

次にpip3でslackbotをインストールします。
slackbotを使うと難しいことを考える必要なく、Botが作れます。

1
pip3 install slackbot

インストールを終えたら、動作確認に移ります。

Homebrewが失敗する場合

長らく使ってなかったためか、私の環境では brew install python3 が失敗してしまいました。

困っていたところ、フォロワーさんに brew doctor というコマンドを教わりました。(とても助かりました。)
Homebrewのマニュアルを見ると Check your system for potential problems. とあります。どうやらシステム内の潜在的な問題をチェックしてくれるもののようです。

実行するとディレクトリのownershipを変更しなさいと警告が出ました。

1
2
3
4
5
6
7
8
Error: The following directories are not writable by your user:
/usr/local/lib

You should change the ownership of these directories to your user.
  sudo chown -R $(whoami) /usr/local/lib

And make sure that your user has write permission.
  chmod u+w /usr/local/lib

言われた通りにコマンドをコピペしたところ、うまくいきました。

Bot作成

run.py

まず、run.pyというファイルを作成します。

1
2
3
4
5
6
7
8
from slackbot.bot import Bot
def main():
    bot = Bot()
    bot.run()

if __name__ == "__main__":
    print('start bot')
    main()</code></pre>

設定ファイル

次に同じ階層にslackbot_settings.py に Slack API tokenを記載します。
slackbot/README_ja.md を見ると2種類方法があるようですが、今回は2番目のslack web api ページで API トークンを生成してみます。(OAuth & Permissions のBot User OAuth Access Token欄に書かれている文字列を、API_TOKENに指定します。

1
2
3
4
# coding: utf-8

API_TOKEN = "xxxx-xxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx"
PLUGINS = ['plugins']</code></pre>

Pluginファイル

最後に、Botにさせたい処理を書きます。
Pliginsディレクトリを作り、配下にpythonファイルを作成します。

1
2
3
4
5
6
7
# coding: utf-8

from slackbot.bot import respond_to

@respond_to('鳩は唐揚げ')
def mention_func(message):
    message.reply('鳩は唐揚げ')</code></pre>

最終的に以下のようなファイル配置になります。

1
2
3
4
5
├── plugins
│   ├── __init__.py
│   └── my_menthon.py
├── run.py
└── slackbot_settings.py</code></pre>

動作確認

Botの動作確認をします。
以下のコマンドを実行します。

1
python3 run.py

start bot と出力された後に、エラーメッセージが出なければ動作しています。
Slack側でBotにメンションすれば反応してくれるハズ。

Slackbotがエラー(‘NoneType’ object has no attribute ‘endswith’)で起動しない場合

python3 run.py したら、以下のエラーメッセージが出てしまいBotが起動しない事象に遭遇しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Traceback (most recent call last):
  File "run.py", line 13, in &lt;module>
    main()
  File "run.py", line 9, in main
    bot.run()
  File "/usr/local/lib/python3.7/site-packages/slackbot/bot.py", line 34, in run
    self._plugins.init_plugins()
  File "/usr/local/lib/python3.7/site-packages/slackbot/manager.py", line 31, in init_plugins
    self._load_plugins(plugin)
  File "/usr/local/lib/python3.7/site-packages/slackbot/manager.py", line 54, in _load_plugins
    if not path_name.endswith('.py'):
AttributeError: 'NoneType' object has no attribute 'endswith'

対処方法ですが、Pluginsディレクトリ配下に __init__.py を放り込みました。(元のQiita記事では作ってるのですが見落としていました。)

感想

Slack APIの認証周りを考えずにさっくりBotを作れるので便利ですね。
躓かなければ、1時間くらいでBotの作成ができそう。

作ったBotですがまだメッセージの返答しかできないので、ドキュメントを読んで色々いじってみます。

ではでは。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。