4
6

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 3 years have passed since last update.

初心者がPythonでSlackbotを作ってみた!3 〜Slackbot機能編〜

Last updated at Posted at 2021-11-15

この記事はプログラミングを始めて5ヶ月の初心者が書いています。間違い等あるかもしれません:bow_tone1:

#目的
Slackで動くBotを作成する:robot::zap:
前回の記事はこちら
前々回の記事はこちら
#対象読者
とりあえずSlackで動くBotを作ってみたい人!

#完成イメージ
さて、ようやくですがBotに機能を実装させていきましょう!
今回作るBotは次のものです:fireworks:
bot_result.png

###機能①
「こんにちは!」とメッセージを送ると、メンションをつけて「こんにちは!」と返信してくれる機能。
###機能②
「今何時?」と聞くと、現在の時間を教えてくれる機能。

#準備

  1. 左サイドメニューバーの「Event Subscriptions」の「Enable Events」をONにする。
  2. 「Subscribe to bot events」の「Add Bot User Event」をクリックする。
    slack2-2.png
  3. 「message.channels」を選択する。
    slack2-3.png
  4. 左サイドメニューバーの「Install App」の「Reinstall to Workspace」をクリックし、再インストールを行う。
    slack2-4.png

#機能①の実装

####0. 全体のコード

message_hello.png

app.py
#こんにちは!と送るとメンションしてこんにちはと返してくれる機能
@app.message('こんにちは!')
def message_hello(message, say):
    say(f'<@{message["user"]}> さん、こんにちは!')

####1. Botを呼び出すためのキーワードを設定する

POINT キーワードの設定
@app.message('Botを呼び出すためのキーワード')

今回は「こんにちは!」という言葉に反応させたいので、

app.py
@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を取り出すことができる。

今回の場合は、メンション + こんにちは と返信して欲しいので、

app.py
def message_hello(message, say):
    say(f'<@{message['user']}>さん、こんにちは!')

メンションのコードの書き方: <@ユーザーID>
※ユーザーIDとは、Uからはじまる数字と大文字アルファベットの11文字の羅列のことで、message['user']に存在している。

###3. アプリ(Bot)を実行する
あっという間に完成!!おめでとうございます:hugging:
さっそく、ちゃんと動くか確かめてみましょう!
ターミナルで以下のコマンドを実行し、Slackで、「こんにちは!」とメッセージを送信してみてください :raised_hands_tone1:

$ python3 app.py

#####注意: アプリ(Bot)をメッセージを送るチャンネルに招待しておく必要があります。

問題がなければ次に進みましょう!

#機能②の実装
今度はもう少し実用的(?)な機能を実装していきましょう!

###0. 全体のコード
clock.png

app.py
@app.message('今何時?')
def clock(message, say):
    time_now = datetime.datetime.now().strftime('%H時%M分%S秒')
    say('現在' + time_now + 'です。')

###1. 時間を読み取るためのライブラリをimportする

app.py
import datetime

###2. 現在の時間を読み取る

app.py
time_now = datetime.datetime.now().strftime('%H時%M分%S秒')

datetime.datetime.now()までのところで、現在の時間を読み取り、strftime()でその表示方法を指定(詳しいことは省略)。

###3. Botの機能として実装する

app.py
@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制作を楽しんでみてください:thumbsup_tone1:

#参考
https://slack.dev/bolt-python/ja-jp/tutorial/getting-started

#関連

4
6
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
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?