5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

slackbot備忘録 ~基本編2~

Last updated at Posted at 2019-08-10

はじめに

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の中身を調べたらもう少し楽しくなりそう
次回はそのあたりを修正していきたい( ˘ω˘ )

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?