pythonでslackbot!~推しと喋ろうオタク社員の呟き~

2019/08/26Python

こんにちは! 限界オタク社員Aです。

オタクには各々「推し」がいたりするものですが、
今回はpythonとslackbotを使って推しと楽しく会話しようという
オタクライフがちょっと楽しくなるライフハックをご紹介します。
オタクじゃない方には、slackbotってこう使うんだーくらいに読んでいただければと思います。

1. 使用準備(インストール、slack側の準備)
2. ディレクトリ構成
3. ファイルの中身
4. 使用例
5. 最後に
という流れで紹介していきます。

1. 使用準備(インストール、slack側の準備)

今回使うのは、その名もそのままslackbotというライブラリです。

[ライブラリのgithub] https://github.com/lins05/slackbot

インストールはpipで簡単、

pip install slackbot

でいけます。

そして、このライブラリでbotを動かすにあたり、
slack側でトークンを取得する必要があります。

slackのアプリの追加から「Bots」というアプリを追加し、
発行されるAPIトークンをメモしておいてください。
アイコンなども設定できるので、推しの画像にしておくと色々捗ります。

さて、ここからは実際にソースをいじって推しを喋れるようにしてあげましょう。

2. ディレクトリ構成

ディレクトリ構成はこんな感じで。

slackbot
    ├ run.py
    ├ slackbot_settings.py
    └ plugins
        ├ __init__.py
        └ my_menstion.py
        
- run.py -> 起動用スクリプト
- slackbot_settings.py -> 設定記載ファイル
- plugins -> 機能追加のファイルを置くディレクトリ、名前は設定ファイルと合わせればなんでもOK
- __init__.py -> ディレクトリを認識させる用お約束ファイル、空でOK
- my_menstion.py -> 実際にソースを書いていくファイル。名前はなんでもOK

プロジェクトを作成できたら、実際にファイルの中身を書いていきましょう。

3. ファイルの中身

まずはrun.py


# -*- coding: utf-8 -*-
from slackbot.bot import Bot
                                                         
def main():
    bot = Bot()
    bot.run()
                                                         
if __name__ == "__main__":
    print('start slackbot')
    main()
    

そしてslackbot_settings.py


# -*- coding: utf-8 -*-
                                                         
# 先ほど登録して取得したトークンを記載
API_TOKEN = "xxxx-xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx"
                                                         
# botにメンションを飛ばした際、レスポンスが設定されていない時の返事
DEFAULT_REPLY = "なんて?"
                                                         
# 機能追加のコードを書いたファイルが置いてあるディレクトリ名と合わせてください
PLUGINS = ['plugins']


これで準備は整いました。
それでは、推しに息を吹き込んでいきましょう。

response.pyに記載する内容の基本的なルールは

-  @respond_to(入力内容)デコレータで入力内容のメンションがbotに飛ばされた際の反応を設定
-  @listen_to(入力内容)デコレータで入力内容がどこかで発された際(メンションじゃなくて大丈夫)の反応を設定
-  message.reply(発言内容)で推しが喋る(デコレータで設定された発言をした人へのメンション付き)
-  message.send(発言内容)で推しが喋る(notメンション)

という形になります。

実際にどういう風に記載するかのサンプルを作成してみました。
いろんなキャラっぽいのを入れてるので、わかった人は友達になりましょう。


# -*- coding: utf-8 -*-                         
import random                                    
                                                         
from slackbot.bot import respond_to     
from slackbot.bot import listen_to      
from slackbot.bot import default_reply  
                                                         
from libs import my_functions           
                                                         
@respond_to('可愛い')
def mention_func1(message):
    message.send('知ってる') 
                                                         
@listen_to('おやすみ')
def listen_func1(message):
    message.send('いい子でおやすみ')
                                                         
@respond_to('今日もかわいい')
def mention_func2(message):
    message.send('知ってるってば') 
                                                         
@respond_to('AreYouReady?')
def mention_func3(message):
    res_list = ['変身', '出来てるよ']
    message.reply(random.choice(res_list))
                                                         
@respond_to('祝って\s*')
def mention_func4(message):
    # 飛ばされたメッセージの取得 \sはスペース,正規表現で入力制御もできる
    text = message.body['text']
    text = text.split(' ')
    message.reply('祝え!{}の瞬間である'.format(text[1]) )


4. 使用例

起動も簡単。
slackbotディレクトリ下に入り
python3 run.py
で起動できます。


使ったところこんな感じ。



5. 最後に

今回はざっくり機能紹介ですが、
APIから天気予報を取得して推しに天気を聞いたり、
データベースと連携させれば予定を記録して推しに秘書になってもらったりもできるかも?

ちょっと役立つslackbotライブラリの紹介をオタク目線でさせていただきました。
読んでいただきありがとうございました。
是非推しと共に楽しいオタ活を!