# 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`