はじめに
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機能用ファイル
プログラム
# 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
)
ちなみにslack.chat.post_messageでボット名とアイコンを設定することもできる
slack.chat.post_message(
'general',
'起動しました!',
username = 'bot君',
icon_emoji = ':robot_face:'
)
こやつを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()
無事、起動時にコメントをした!
完全一致や複数の言葉でのトリガー発動
前回、**respond_to('こんにちは')**は部分一致で発動することがわかった
今回は完全一致かつ、複数の言葉にも対応できるように変えていく
完全一致にするには、正規表現を使う
# ^ => 先頭にマッチ, $ => 末尾にマッチ
@respond_to('^こんにちは$')
def respond_func(message):
message.reply('こんにちは!')
複数の言葉に対応するためには、@respond_toを連続で記述する
# あまり使用しないが、listen_toも連続で記述すれば発動する
@respond_to('^こんにちは$')
@respond_to('こんちは')
@listen_to('こんにちわん')
def respond_func(message):
message.reply('こんにちは!')
結果は以下の通り
オウム返し
「おはよう」っていうと「おはよう」っていう。
「こんにちは」っていうと「こんにちは」っていう。
「こんばんは」っていうと「こんばんは」っていう。
こだまでしょうか? いいえ、だれでも。 古いですね…笑
こんな感じでオウム返しをする
def function_name(message)
前回特に何も触れずに書いた、関数の中にあるmessage
この中には、送られてきたメッセージの情報が入っている
この中から**message.body['text']**を使って、メッセージ文を取得し出力する
@respond_to('^おはよう$')
@respond_to('^こんにちは$')
@respond_to('^こんばんは$')
# 削除 @respond_to('こんちは')
# 削除 @listen_to('こんにちわん')
def respond_func(message):
#メッセージ文取得
mes = message.body['text']
message.reply(mes)
結果は以下の通り
ちょっとボットらしくなってきて楽しい
正規表現や、messegeの中身を調べたらもう少し楽しくなりそう
次回はそのあたりを修正していきたい( ˘ω˘ )