Help us understand the problem. What is going on with this article?

slackbot備忘録 ~基本編1~

More than 1 year has passed since last update.

はじめに

初投稿です!

pythonを使ってslackbotを作成した備忘録
Botユーザー作成~簡単なやり取りについて記載

作業開始!

slack側

  1. メニュー ⇒ その他の管理 ⇒ app管理で「appディレクトリ」に飛ぶ pic1.PNG
  2. ヘッダーの「App ディレクトリを検索」に"Bots"と入力し、ロボットアイコンをクリック pic2.PNG
  3. 「設定を追加ボタン」を押し、ボットユーザー名を入力して「ボットインテグレーションを追加する」ボタンを押す
  4. 無事作成されたら、APIトークンをメモ(任意で「アイコン」「氏名」「個のボットの機能」を編集) pic3.PNG

python側

slackbotパッケージインストールする

pip install slackbot

下記のようなディレクトリ構造にする

slackbot
 - run.py               # slackbot起動用ファイル
 - slackbot_settings.py # slackbot設定用ファイル
 - plugins
     - __init__.py     # モジュールを示すファイル(中身は空)
     - my_mention.py   # slackbot機能用ファイル
run.py
# coding:utf-8
from slackbot.bot import Bot

def main():
    bot = Bot()
    bot.run()

if __name__ == "__main__":
    print('start slackbot')
    main()
slackbot_settings.py
# coding:utf-8

# botアカウントのトークン指定
API_TOKEN = '先ほどメモしたトークンを入力'

# どの対応にも当てはまらない場合の対応
DEFAULT_REPLY = '何を言っているかわかりません。'

# プラグインスクリプト
PLUGINS = ['plugins']

cmdでrun.pyを起動
pic4.PNG

slackでbotにダイレクトメッセージ,channnel内でメンションするとbotが反応
現時点ではデフォルトメッセージしか返ってこない

  • ダイレクトメッセージ

pic6.PNG

  • channelメンション

pic7.PNG

my_mention.pyでいろいろ試してみる

my_mention.py
# coding:utf-8

from slackbot.bot import respond_to     # @botname 又は ダイレクトメッセージで反応
from slackbot.bot import listen_to      # チャネル内発言で反応
from slackbot.bot import default_reply  # 該当する応答がない場合に反応するデコーダ

# @respond_to('sample')  bot宛に「sample」を送ったとき
# @listen_to('sample')   botが所属するchannel内で「sample」を送ったとき
# @default_reply()       slackbot_settings.pyで設定したDEFAULT_REPLYと同じ動き
#                        どちらも入力がある場合、基本的にはこちらが優先される

# message.reply('message') @発信者名: message とメッセージを送信する
# message.send('message')  message とメッセージを送信する
# message.react('emoji')   発言者のメッセージにリアクションする
#                          ':'は使わない

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

@respond_to('おやすみ')
def respond_func(message):
    message.react('x')
    message.reply('まだ夜じゃないよ!')

@listen_to('お腹すいた')
def listen_func(message):
    message.send('一緒にラーメン食べにいく?:ramen::ramen:')

こんな感じになった
pic8.PNG

respond_toなどの中のトリガー文字は含まれていれば(部分一致であれば)発動するみたい
次回はもう少し細かい設定をしていく( ˘ω˘ )

str32
古代言語から最新言語まで扱えるエンジニア/COBOL, Python, PHP, JavaScriptなど…/最近はPython, PHP/AI, IoT関連
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away