LoginSignup
1
1

More than 1 year has passed since last update.

Bots使ってSlack勤怠Bot制作メモ

Posted at

前書き

YouTubeでBots使用してSlackBotを制作する動画を拝見しましたので、メモとして残します。

Botsの新規追加

Botsはslack botの一種であります、Appにbotsで検索していただければ出てきます。
E02543D7-D417-4723-B921-DC3A9863D38E.jpeg

追加を押して頂けると、ユーザー名入力の画面が表示されます、入力してボットインテグレーションを追加するをクリックしましょう。
3BBE1803-0321-4A27-93B8-8DEA98718FBE.jpeg

追加完了後、APIトークン表示されますので、それをコピーしましょう、後で使用することになります。

B055BA04-E1A9-4B98-AADD-13BD600769FA.jpeg

ここまでの操作終わっていれば、SlackのApp一覧に追加されたBotsが表示されるはずです。
23215058-5C9B-49B7-B305-15C90D29D80E_4_5005_c.jpeg

Botsの基本操作

下準備

pythonのプロジェクトを新規に作ります、以下のパッケージインストールしましょう。

pip install slackbot

フォルダ構成は以下になります。

|-- slackbot_project
|-- |-- main.py
|-- |-- slackbot_settings.py

API_TOKENにインテグレーションの設定に表示されてるAPIトークンを入れてあげましょう。
DEFAULT_REPLYはデフォルト返信の文言になります、適当に何かいれてあげましょう。

slackbot_settings.py

API_TOKEN = "xxx"

DEFAULT_REPLY = "botです"
mian.py
from slackbot.bot import Bot

bot = Bot()
bot.run()

この状態でmain.pyを実行して、slackのAppからBotsにDMしてみましょう、以下の返信帰ってきたら完成です。
EEF0F09B-604B-4EBE-9D6D-B3BFA83394D7_4_5005_c.jpeg

指定メッセージの処理

mian.py
from slackbot.bot import Bot
from slackbot.bot import respond_to

bot = Bot()

@respond_to('練習')
def sample(message):
    message.send("練習です。")

bot.run()

追加完了後、再度メッセージを送ってみましょう、特定のキーワードに反応できるようになってるはずです。
2E2CE313-13AA-4147-A6A9-8E123FD07F06_4_5005_c.jpeg

チャンネル内の指定メッセージの処理

まずはBotsを適当なチャンネルに追加します。
3AF4E2E8-2FD7-4D67-AC9B-BB0D9A8DD736_4_5005_c.jpeg

この状態では、メンションしなければ、Botsはキーワードに反応できません。
B18B1B2D-B36C-49FB-9078-4F6F502DFF0B_4_5005_c.jpeg

特定のキーワードを反応してもらうために、listen_to使うように修正を行います。

mian.py
from slackbot.bot import Bot
from slackbot.bot import listen_to

bot = Bot()

@listen_to('練習')
def sample(message):
    message.send("練習ですか?")

bot.run()

再度slackのチャンネルでメッセージを送信してみます、ちゃんとBotsがキーワード拾えるようになりました。

F39E1EFB-0A9F-4175-AE04-7E1BDF45DD26_4_5005_c.jpeg

打刻時間を記録

出勤退勤二つのキーワード拾えて、Excelに記録できるBotsを作ります。
ファイル構成は以下になります。

|-- slackbot_project
|-- |-- plugins
|-- |-- |-- __init__.py
|-- |-- |-- my_mention.py
|-- |-- run.py
|-- |-- slackbot_settings.py
run.py
from slackbot.bot import Bot

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

if __name__ == "__main__":
    print('start bot')
    main()
from datetime import datetime

from slackbot.bot import respond_to
import openpyxl


@respond_to('出勤')
def punch_in(message):
    print('出勤時刻登録します')
    timestamp = datetime.now()
    wb = openpyxl.load_workbook('勤怠管理.xlsx')
    ws = wb.worksheets[0]
    max_row = ws.max_row
    ws[max_row + 1][0].value = timestamp.strftime("%Y/%m/%d")
    ws[max_row + 1][1].value = timestamp.strftime("%H:%M")
    wb.save('勤怠管理.xlsx')
    message.send(f'出勤時刻登録完了しました:{timestamp.strftime("%H:%M")}')


@respond_to('退勤')
def punch_out(message):
    print('退勤時刻登録します')
    timestamp = datetime.now()
    wb = openpyxl.load_workbook('勤怠管理.xlsx')
    ws = wb.worksheets[0]
    max_row = ws.max_row
    ws[max_row][2].value = timestamp.strftime("%H:%M")
    wb.save('勤怠管理.xlsx')
    message.send(f'退勤時刻登録しました:{timestamp.strftime("%H:%M")}')

__init__.pyは空でオーケー、slackbot_settings.pyに変更加えません。

この状態でslackbotを起動します。
30C91F2D-2F2D-47E4-85AA-A6B596F6F1CE_4_5005_c.jpeg
作られたエクセルファイルにもちゃんと記録が残りました。
429462BF-9F0D-48D9-A200-9CB7D3741048_4_5005_c.jpeg

後書き

Botsを使ってみて、主流のBoltと比べて、どうしてもドキュメントが少ないため、多少使いづらいと思いました。

1
1
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
1
1