概要
pythonでslackのbotで応答する内容を設定する処理を作ってみました。
前提条件
Pythonが既にインストールされていること。
slackのbot設定が完了していること。
作成するファイル構成
今回作成するファイル構成は以下になります。
run.py
slackbot_settings.py
time_now.py
greeting.py
plugins(ディレクトリ)
└mode.py
run.pyの実装
run.pyはbotを起動する処理を書いてます。
内容は以下になります。
# slackbot ライブラリのの呼び出し
from slackbot.bot import Bot
def main():
# ボットを起動する。
bot = Bot()
bot.run()
if __name__ == "__main__":
main()
slackbot_settings.pyの実装
slackbot_settings.pyはbotに関する設定を書いてます。内容は以下になります。
# APIトークンの設定
API_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
# 定型コメント以外への返信コメント
DEFAULT_REPLY = "すみません。そのコメントはよくわかりません。"
# プラグインを追加する
PLUGINS = ['plugins']
mode.pyの実装
mode.pyはbotの応答内容(プラグイン)の処理を書いてます。
内容は以下になります。
# slackbot.botライブラリの呼び出し
# from slackbot.bot import respond_to
from slackbot.bot import listen_to
from slackbot.bot import default_reply
import greeting
import time_now
mode = 0
@listen_to(r'.*')
def listen_func(message):
global mode
msg = message.body['text']
if mode == 1:
greeting_txt = greeting.greet(msg)
message.send(greeting_txt)
if mode == 2:
if msg == "いま何時?":
time_txt = time_now.res_time(msg)
# 現在時刻を返信する
message.send(time_txt)
@default_reply()
def default(message):
global mode
msg = message.body['text']
if msg == "挨拶モード":
message.send('挨拶モードに変更しました。')
mode = 1
elif msg == '時間確認モード':
message.send('時間確認モードに変更しました。')
mode = 2
■import内容について
respond_toはメンション(@ユーザ名)でメッセージを送信した時に応答するもの(今回は使わないです)
listen_toはメッセージを送信した時に応答するもの
default_replyはメンションでメッセージを送信した時にrespond_toで設定した内容に当てはまらない場合に応答するもの
になります。
greetingとtime_nowはこの後説明するgreeting.pyとtime_now.pyのことです。
■処理内容
-
@default_reply()
について
global mode
でmodeの変数をグローバル変数にして他の関数でも共通で使えるようにしてます。
message.body['text']
でこちらが送信したメッセージの内容を取得してます。
「挨拶モード」とメンションで送るとmodeを1に、「時間確認モード」とメンションで送るとmodeを2にしてます。 -
@listen_to(r'.*')について
正規表現ですべてのメッセージ内容に反応するようにしてます。
modeの値によって呼び出す処理を変えています。
greeting.pyの実装
挨拶モードで呼び出す処理を書いてます。
内容は以下になります。
def greet(message):
if message == "おはよう":
msg = message + '。今日も良い1日を!'
elif message == "こんにちは":
msg = message + '。'
elif message == "こんばんは":
msg = message + '。良い一日は過ごせましたか?'
else:
msg = '挨拶をしてください。'
return msg
「おはよう」とメッセージが送られた場合は「おはよう。今日も良い一日を!」
「こんにちは」とメッセージが送られた場合は「こんにちは。」
「こんばんは」とメッセージが送られた場合は「こんばんは。良い一日は過ごせましたか?」
それ以外は「挨拶をしてください。」という文言が戻り値となります。
time_now.pyの実装
時間確認モードで呼び出す処理を書いてます。
内容は以下になります。
# 時刻を管理するライブラリの呼び出し
import datetime
def res_time(message):
dt_now = datetime.datetime.now()
# 現在時刻を返信する文字列に変換する
time_str = dt_now.strftime('%H時%M分だ。')
return time_str
現在時刻を返信する文言が戻り値となります。