Heroku
python3
Slack

python3でslackbotの作成(その4:send,react編)

前回

その3:リプライ編
前回はメンションを送るとリプライが返ってくるところまで作成しました。
今回はチャンネルに誰かが特定のワードを発言したら、botが発言するようにして行きましょう。

ディレクトリの構成

slack_bot/
├─ plugins/
│ ├─ __init__.py
│ ├─ bot_listen.py 今回書き込むファイル
│ └─ bot_mention.py
├─ run.py
└─ slackbot_settings.py

発言してみる

bot_listen.py
from slackbot.bot import listen_to
import datetime

@listen_to('何時')
def saytime(message):
    d = datetime.datetime.today()
    message.send(str(d))

何時?と発言すると時刻を発言してくれます。
botを招待したチャンネルで発言してみましょう。
スクリーンショット 2017-10-30 1.07.07.png
返ってきましたね。後に気づいたのですが"何時ですか"と発言しても返ってきます。
スクリーンショット 2017-10-30 1.10.34.png
どうやら文字列の部分一致で判定しているようですね。

message.react()を使ってみる

message.react()はコメントに対してリアクションをとってくれる関数です。
bot_listen.py に追加で記述して行きましょう。

bot_listen.py
@listen_to('いいですか')
def reaction(message):
    message.react('+1')

スクリーンショット 2017-10-30 1.14.53.png
いいねしてくれましたね。
デフォルトでは👍ですがリアクションも変えられるようです。

おまけ

@AKB428 さんが作成した放映中のアニメ作品の情報を取得できるAPIAnime RESTful APIを利用させていただき、アニメのタイトルを返してくれる関数を作って行きたいと思います。
またbot_listen.pyに追加して記述して行きます。

bot_listen.py
import urllib.request
import json
import random

@listen_to('アニメ')
def anime(message):
    d = datetime.datetime.today()
    url = 'http://api.moemoe.tokyo/anime/v1/master/'

    #四季を定義
    spring = [4,5,6]
    summer = [7,8,9]
    autumn = [10,11,12]
    winter = [1,2,3]

    #現在の月からリクエストを設定
    if int(d.month) in spring:
        month = '/2'
    elif int(d.month) in summer:
        month = '/3'
    elif int(d.month) in autumn:
        month = '/4'
    else :
        month = '/1'

    #url結合
    url = url + str(d.year) + month
    print(url)
    response = urllib.request.urlopen(url)
    content = json.loads(response.read().decode('utf8'))
    message.send('\"' + content[random.randint(0, len(content)-1)]['title'] + '\"' +'が面白い')

アニメは春アニメ、夏アニメといったように4つに分かれているようです。
初めて知った(; ̄Д ̄) クールとかは知ってるけど...
冬が1春が2といったようになっています。この記事を書いている頃は秋なので4ですね。三月のライオンとか発言してくれるのかな?
一様リクエストがそのクールのアニメ作品を全てとってくるのでその中からランダムで作品名を一つ返すようにします。
スクリーンショット 2017-10-30 1.30.33.png
お!聞いたことのあるアニメがきましたね(見てないけど)。

今回はここまで

次回はこのbotを常駐させるようにHerokuを使って行きましょう。