この記事はプログラミングを始めて5ヶ月の初心者が書いています。間違い等あるかもしれません
#目的
Slackで動くBotを作成する
前回の記事はこちら。
前々回の記事はこちら
#対象読者
とりあえずSlackで動くBotを作ってみたい人!
#完成イメージ
さて、ようやくですがBotに機能を実装させていきましょう!
今回作るBotは次のものです
###機能①
「こんにちは!」とメッセージを送ると、メンションをつけて「こんにちは!」と返信してくれる機能。
###機能②
「今何時?」と聞くと、現在の時間を教えてくれる機能。
#準備
- 左サイドメニューバーの「Event Subscriptions」の「Enable Events」をONにする。
- 「Subscribe to bot events」の「Add Bot User Event」をクリックする。
- 「message.channels」を選択する。
- 左サイドメニューバーの「Install App」の「Reinstall to Workspace」をクリックし、再インストールを行う。
#機能①の実装
####0. 全体のコード
#こんにちは!と送るとメンションしてこんにちはと返してくれる機能
@app.message('こんにちは!')
def message_hello(message, say):
say(f'<@{message["user"]}> さん、こんにちは!')
####1. Botを呼び出すためのキーワードを設定する
POINT キーワードの設定
@app.message('Botを呼び出すためのキーワード')
今回は「こんにちは!」という言葉に反応させたいので、
@app.message('こんにちは!')
####2. Botの機能を関数で定義する
POINT 機能の定義
def 好きな関数名(message, say):
Botの機能
・message … Botを呼び出すためのキーワードを送信したメッセージの情報。
・say … Botの返信を定義する関数。sayのカッコの中身に返信メッセージを入れる。
#####補足:「message」をprintするとこんな感じ。
{'client_msg_id': '----', 'type': 'message', 'text': 'こんにちは!', 'user': 'U**********', 'ts': '********** . ', 'team': 'T****', 'blocks': [{'type': 'rich_text', 'block_id': 'dm3', 'elements': [{'type': 'rich_text_section', 'elements': [{'type': 'text', 'text': 'こんにちは!'}]}]}], 'channel': 'C**********', 'event_ts': '********** . ******', 'channel_type': 'channel'}
辞書と同じように扱えて、例えば、message['text']
と[ ]でkeyを指定すると、こんにちは!
というvalueを取り出すことができる。
今回の場合は、メンション + こんにちは と返信して欲しいので、
def message_hello(message, say):
say(f'<@{message['user']}>さん、こんにちは!')
メンションのコードの書き方: <@ユーザーID>
※ユーザーIDとは、Uからはじまる数字と大文字アルファベットの11文字の羅列のことで、message['user']に存在している。
###3. アプリ(Bot)を実行する
あっという間に完成!!おめでとうございます
さっそく、ちゃんと動くか確かめてみましょう!
ターミナルで以下のコマンドを実行し、Slackで、「こんにちは!」とメッセージを送信してみてください
$ python3 app.py
#####注意: アプリ(Bot)をメッセージを送るチャンネルに招待しておく必要があります。
問題がなければ次に進みましょう!
#機能②の実装
今度はもう少し実用的(?)な機能を実装していきましょう!
@app.message('今何時?')
def clock(message, say):
time_now = datetime.datetime.now().strftime('%H時%M分%S秒')
say('現在' + time_now + 'です。')
###1. 時間を読み取るためのライブラリをimportする
import datetime
###2. 現在の時間を読み取る
time_now = datetime.datetime.now().strftime('%H時%M分%S秒')
datetime.datetime.now()
までのところで、現在の時間を読み取り、strftime()
でその表示方法を指定(詳しいことは省略)。
###3. Botの機能として実装する
@app.message('今何時?')
def clock(message, say):
time_now = datetime.datetime.now().strftime('%H時%M分%S秒')
say('現在' + time_now + 'です。')
###4. アプリ(Bot)を実行する
$ python3 app.py
きちんと実行できれば、Botがメッセージを送信した時刻を教えてくれるはずです!
コードを少しいじって、strftime()
の中身を %Y/%m/%d
に変えるだけで、時間ではなく、年 / 月 / 日を表示してくれるようになります。この場合は、キーワードを「今って何年何月何日?」に変えても良さそうです。
#最後に
このようにslack_boltを使うと、簡単にBotを作成することができます。Botの機能を定義するところで、スプレッドシーを操作できるようにしたりするともっとBotの可能性が広がりそうです。アイデア次第でさまざまなBotを制作できると思うので、Bot制作を楽しんでみてください
#参考
https://slack.dev/bolt-python/ja-jp/tutorial/getting-started
#関連