Edited at

slackbot備忘録 ~基本編2~


はじめに

pythonを使ってslackbotを作成した備忘録パート2

前回、作成していた時にこれを作りたいなと思ったこと


  • 起動時の最初のひとこと

  • 完全一致や複数の言葉でのトリガー発動

  • オウム返し

上記三つを今回作成した


起動時の最初のひとこと

起動時にslack上で「起動しました!」と表示したい

ということでいろいろ探ってみたところslackerを使えばできそう


slacker

時報やリマインドとしてよく使うらしい

slacker単体で「起動しました!」を送ってみる

slackerパッケージをインストール

pip install slacker

ディレクトリ構造は下記の通り

slackbot

 - run.py # slackbot起動用ファイル
 - slackbot_settings.py # slackbot設定用ファイル
 - post_message.py # post message用ファイル
 - plugins
    - __init__.py # モジュールを示すファイル(中身は空)
    - my_mention.py # slackbot機能用ファイル


プログラム


post_message.py

# coding:utf-8

from slacker import Slacker
imoport slackbot_settings # API_TOKENを使用するため

slack = Slacker(slackbot_settings.API_TOKEN)
slack.chat.post_message(
'general',
'起動しました!',
as_user = True
)

pii1.PNG

ちなみにslack.chat.post_messageでボット名とアイコンを設定することもできる


post_message.py

slack.chat.post_message(

'general',
'起動しました!',
username = 'bot君',
icon_emoji = ':robot_face:'
)

こやつをrun.pyに入れるとこうなる


run.py

# coding:utf-8


from slackbot.bot import Bot
from slacker import Slacker

import slackbot_settings

def main():
# 省略

if __name__ == "__main__":
slack = Slacker(slackbot_settings.API_TOKEN)
channel = 'general'
message = '起動しました!'
slack.chat.post_message(
'general',
'起動しました!',
username = 'bot君',
icon_emoji = ':robot_face:'
)
main()


pii2.png

無事、起動時にコメントをした!


完全一致や複数の言葉でのトリガー発動

前回、respond_to('こんにちは')は部分一致で発動することがわかった

今回は完全一致かつ、複数の言葉にも対応できるように変えていく

完全一致にするには、正規表現を使う


my_mention.py

# ^ => 先頭にマッチ, $ => 末尾にマッチ

@respond_to('^こんにちは$')
def respond_func(message):
message.reply('こんにちは!')

複数の言葉に対応するためには、@respond_toを連続で記述する


my_mention.py

# あまり使用しないが、listen_toも連続で記述すれば発動する

@respond_to('^こんにちは$')
@respond_to('こんちは')
@listen_to('こんにちわん')
def respond_func(message):
message.reply('こんにちは!')

結果は以下の通り

pii3.png


オウム返し

「おはよう」っていうと「おはよう」っていう。

「こんにちは」っていうと「こんにちは」っていう。

「こんばんは」っていうと「こんばんは」っていう。

こだまでしょうか? いいえ、だれでも。 古いですね…笑

こんな感じでオウム返しをする

def function_name(message)

前回特に何も触れずに書いた、関数の中にあるmessage

この中には、送られてきたメッセージの情報が入っている

この中からmessage.body['text']を使って、メッセージ文を取得し出力する


my_mention.py

@respond_to('^おはよう$')

@respond_to('^こんにちは$')
@respond_to('^こんばんは$')
# 削除 @respond_to('こんちは')
# 削除 @listen_to('こんにちわん')
def respond_func(message):
#メッセージ文取得
mes = message.body['text']

message.reply(mes)


結果は以下の通り

pii4.png

ちょっとボットらしくなってきて楽しい

正規表現や、messegeの中身を調べたらもう少し楽しくなりそう

次回はそのあたりを修正していきたい( ˘ω˘ )