仕事でPython使うことになったので、0から勉強してみた(番外編-その3)

はじめに

前回はAWS Lambdaを利用して一方的に投稿するBOTでしたが、今回はSlackIntegrationの”Bots”とPythonのSlack用ライブラリslackbotを使って、問いかけに応答してくれるBOTを作成します。

まずは”Slack”の適当なチャンネルを表示させ、右上歯車アイコンをクリックし、”Add an app or custom integration”をクリックします。

ntegrationの導入

中央の検索窓に”BOT”と入力。

Integrationの導入2

”Bots”をクリックし、次の画面以降以下の通り進みます。

”右下の”Install”ボタンクリック > ”Add Configuration”クリック > 任意のユーザー名入力 > ”Add bot integration”クリック

”Integration Settings API Token”に表示されたトークンはメモ帳などに控えておきます。
先ほどのWebAPIの場合は、投稿時に名前やアイコンを設定しましたが、”Bots”の場合は、本画面で設定し、”Save Integration”をクリック。

Integrationの導入3

まだどの部屋にも招待していないので”Channels”には何も表示されないので、任意の部屋から招待してください。

Integrationの導入4
チームメイトがこっそり作成していた”Hubot”や”マツコ デラックス”を発見してしまいましたが、ここはスルーして先ほど作成したBOTを招待します。

Integrationの導入5

これでSlack側の準備は整ったので、Cloud9にログインしてコードを書いていきます。

まずは”slackbot”というライブラリをインストール。

$ sudo pip3 install slackbot

以前2系と3系の”pythonコマンド”の違いについて書きましたが、”pipコマンド”も同様に”pip”と”pip3”で使い分けが可能です。

※そのまま実行すると”PermissionError”となってしまう為”sudoコマンド”で実行。

続いて”workspace”上に任意のディレクトリと設定ファイルを作成。

$ mkdir slack_bot
$ touch ./slack_bot/slackbot_settings.py
$ touch ./slack_bot/run.py

それぞれのファイルに下記を記述。

[slackbot_settings.py]

# -*- coding: utf-8 -*-
API_TOKEN = 'xoxp-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX'

default_reply = "Sorry but I didn't understood you"

[run.py]

# -*- coding: utf-8 -*-
from slackbot.bot import Bot
def main():
bot = Bot()
bot.run()

if __name__ == "__main__":
main()

基本的な設定はこれだけです。以下のコマンドで”Bot”を起動します。

$ python3 ./slack_bot/run.py

この状態で、”Bot”にメンションを飛ばすと、”default_reply”の値を返してくれます。

Integrationの導入6
次は、特定の言葉に反応するようにいくつかファイルを作成します。

$ mkdir ./slack_bot/plugins
$ touch ./slack_bot/plugins/__init__.py
$ touch ./slack_bot/plugins/mention.py
$ touch ./slack_bot/plugins/listen.py

それぞれのファイルに下記を記述します。

[listen.py]

# -*- coding: utf-8 -*-
from slackbot.bot import listen_to

@listen_to('あいたくて')
@listen_to('会いたくて')
def kana_nishino(message):
message.send('会いたくて、震える...((((;´・ω・`)))ブルブル')
@listen_to('私以外')
def gwsukiwa(message):
message.send('私じゃないの。当たり前だけどね!http://recochoku.jp/song/S1001531649/')

※@listen_toに記述した言葉に反応して指定した言葉を投稿してくれます。
[mention.py]

# -*- coding: utf-8 -*-

from slackbot.bot import respond_to
import random
@respond_to('歌って')
@respond_to('うたって')
def cheer(message):
message.reply(""" \\こなああああああああああああゆきいいいいいいいいいいいいいいいいいいいい//
♪    ∧ ∧     ∧ ∧   ∧ ∧     ∧ ∧    ∧ ∧     ∧∧  ♪
♪    ∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*) ♪
(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧
♪ ∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)♪
─♪──(゚0 ゚*)| U(゚0 ゚*)| U(゚0 ゚*)| U(゚0 ゚*)| U(゚0 ゚*)| U(゚0 ゚*)| U
|  U.|  | |  U |  ||  U. |  ||  U. |  ||  U. |   || U. |   |~♪
♪    |  | U U. |  | U U |   | U U |   | U U |  | U U |  | U U ♪
U U      U U       U U      U U       U U     U U
\\               ね        ぇ         ?        // """)

※@respond_toに記述した言葉に反応して指定した言葉を投稿した人にメンション付きで指定した言葉を投稿してくれます。

最後に”run.py”に以下の2行を追加して、再度起動します。

from plugins import listen
from plugins import mention

slack-integration7

改行も顔文字も問題なく表示されるようですが、画像は展開されなかったです。
※”Python”で複数行の文字列を使用するには”””(トリプルクォーテーション)で囲みます。

ちなみに、”@listen_to”や”@respond_to”には正規表現を使うこともできます。

例のごとく、僕のチームではこんな感じです・・・。

 

 

 

 

 

 

Integrationの導入8

 

※メッセージ部分は下記の様にランダムに返しているだけですが、たまたま良い感じにBOTが返事をしてくれました。

msg_tuple = ("好きかも・・・", "いまどこ・・・?", "電話してほしいな・・・", "今週末楽しみだね☆", "気安く話しかけないで!", "そんなに無理しなくていいんだよ・・?")

message.reply(random.choice(msg_tuple))

今回はここまでにしたいと思います。

”Cloud9”を使うことでWindowsでは多少面倒な”pip”コマンドも問題なく利用することができ、Webサーバーを用意しなくても投稿に反応してくれるBOTを動作させることができました。

”Cloud9”を現場の方に教えてもらった時は、ブラウザでエディタとかアイデアだけで使いづらいんじゃ?とか思ってましたが、そんなことは全然なく、どの端末からアクセスしてもコーディングの続きを始められ、利用しているPCの環境差異に悩まされることもなく、ローカル環境に仮想環境を用意するよりも、Herokuを使うよりもAWSを使うよりも気軽、そして無料という恐ろしいものでした。
とはいえこのBOTは”Cloud9”にログイン中しか動作しないので、そのうち”Heroku”へ公開したいなと考えています。
次回は再び”Django”のチュートリアルに戻ります!

おわりに

今回紹介する書籍は下記です。

  • Python ライブラリ厳選レシピ
  • Pythonには,豊富な標準あるいはサードパーティライブラリ・モジュールがあります。ライブラリに関するドキュメントも充実していますが,初心者にとってはそのボリュームゆえに,まずどんなライブラリを活用できればよいのか,わかりづらい側面があります。ドキュメントは使用頻度の高い・低いに関わらずフラットに記載されており,サードパーティのライブラリについては言及されていません。本書では,「これだけは押さえておきたい」ライブラリとその機能を,標準ライブラリだけでなくサードパーティのものも交え,カテゴリごとに,その活用法を紹介します。バージョンはPython 3.4をメインとします。

※ライブラリ集なので頭から読んではいませんが、Python3.4に対応と比較的新しかったのでざっと眺めたうえで、案件で使いそうなライブラリに目を通しました。僕のようにPythonをこれから始めるという方は索引を眺めてどんなライブラリが存在するのか把握してみても良いのでは?と思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>