LoginSignup
0
1

More than 1 year has passed since last update.

【Python】slackのbotで遊んでみた

Last updated at Posted at 2021-09-25

概要

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

現在時刻を返信する文言が戻り値となります。

実行結果

実行した結果は以下のようになります。(run.pyを実行する)
キャプチャ.PNG

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1