---
# System prepended metadata

title: Slackbot を作ってみる-1
tags: [HelloWorld]

---

# Slackbot を作ってみる-1

Pythonの[slackbotライブラリ](https://github.com/lins05/slackbot)を用いれば、Slackで特定のメッセージを受け取って、処理を行ったり、返事を行うことができる。


## slackbot のインストール
```terminal
$ pip install slackbot
```
これで、Pythonでslackbot をインポートできるようになる。


## (botアカウントを作る)
```
Slackをカスタマイズ
↓
App管理
↓
Appディレクトリを検索 で Bots を検索
```

## slackbotを動かすための準備
slackbotは複数のファイルを用意する必要がある。
以下のようなディレクトリ構造にする。
```python
slackbot         # プログラムをまとめるディレクトリ。名前はなんでも良い
├─ run.py        # このプログラムを実行することで、ボットを起動する
├─ slackbot_settings.py   # botに関する設定を書くファイル
└─ plugins                # botの機能はこのディレクトリに追加する
   ├─ __init__.py         # モジュールを示すためのファイル。空で良い
   └─ my_mention.py       # 機能を各ファイル。任意の名前で良い
```
以下のコマンドを実行して、slackbotディレクトリを作成する。
```terminal
$ mkdir slackbot
```
slackbotディレクトリに移動し、以下のコマンドを実行して、ファイルを作成する。
```terminal
$ touch run.py slackbot_settings.py
$ mkdir plugins
$ cd plugins
$ touch __init__.py my_mention.py
```

## slackbot の初期設定
`run.py`の中身を以下のようにする
```python
# coding: utf-8

from slackbot.bot import Bot    # ライブラリのインポート

def main():
    bot = Bot()    # インポートしたライブラリのインスタンス化
    bot.run()

if __name__ == "__main__":    # コントローラー
    print('start slackbot')
    main()    # main() を呼び出す
```
`slackbot_settings.py`の中身を以下のようにする。
```python
# coding: utf-8

# botアカウントのトークンを指定
API_TOKEN = "xxxx-xxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx"

# このbot宛のメッセージで、どの応答にも当てはまらない場合の応答文字列
DEFAULT_REPLY = "何言ってんだこいつ"

# プラグインスクリプトを置いてあるサブディレクトリ名のリスト
PLUGINS = ['plugins']
```
**トークンを直接書いたまま、githubなどで公開しないように注意！！！**

## slackbot を起動する
以下のコマンドを入力して、プログラムを起動する
```
$ python run.py
```
Slack上でbotへのDMで何か投稿すると、デフォルトの返事が返ってくる。
botの参加しているチャンネルの場合は、メンションを付ける必要がある。

## botに機能を追加！
## DMやチャンネルの投稿を監視する
`my_mention.py`を編集することで、機能を追加することができる。
例として、以下を書き込む。
```python
# coding: utf-8

from slackbot.bot import respond_to     # @botname: で反応する
from slackbot.bot import listen_to      # チャネル内発言で反応する

@respond_to('メンション')    # bot宛のメッセージに対して
def mention_func(message):
    message.reply('私にメンションと言ってどうするのだ')    # メンションつきで投稿

@listen_to('リッスン')    # チャンネル内のbot宛以外の投稿に対して
def listen_func(message):    
    message.send('誰かがリッスンと投稿したようだ')      # メンションなしで投稿
    message.reply('君だね？')                           # メンションつきで投稿
```
## リアクション(スタンプ)する
`my_mention.py`に、さらに以下を追記する。
```python
@respond_to('かっこいい')
def cool_func(message):
    message.reply('ありがとう。スタンプ押しとくね')     # メンション
    message.react('+1')     # リアクション
```


----------
#### せっかく作ったけど、PC閉じたらファイルの実行が止まっちゃうのでは？
→[Screen](https://hackmd.io/yA43-EKxTEG_dZCg4QNhgQ?view) を使用する！



###### tags: `HelloWorld`