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

時差出勤始まったので退勤時刻を教えてくれるBotを作った

Posted at

昨今の感染症の影響で時差出勤が始まったので
出勤時間を投稿すると退勤時間を教えてくれるBotを作ってみました。

環境

  • python 3.6.6
  • Heroku

参考

SlackBotプロジェクトのディレクトリ構成、Herokuとの連携については以下サイトを参考にさせていただきました。
https://qiita.com/akabei/items/ec5179794f9e4e1df203

ソースコード

上記、参考にさせていただいたサイトを元にSlackBotの動作が確認できた(おみくじ引けた)ので、退勤時間を計算するコードを作成していきます

・投稿時刻を出社時刻として退勤時間を計算する

from datetime import datetime, timedelta, timezone
from slackbot.bot import listen_to

@listen_to(r'^出勤$')
def work_time(message):
    JST = timezone(timedelta(hours=+9), 'JST')

    start_now = datetime.now(JST)
    end_time = start_now + timedelta(hours=8, minutes=45)
    message.reply(end_time.strftime("%H:%M"))

実行結果 ↓↓
キャプチャ1.PNG

これだと出社してすぐにメッセージを送らないといけないので、時間指定できるパターンも作ります

・出勤時刻を指定して退勤時刻を計算する

import re
from datetime import datetime, timedelta, timezone

from slackbot.bot import respond_to, listen_to

@listen_to(r'^出勤\s[0-9]+:[0-9]+$')
def work_time(message):

    JST = timezone(timedelta(hours=+9), 'JST')
    current = datetime.now(JST)

    text = message.body['text']
    result = re.match(".*\s([0-9]+):([0-9]+)", text)

    hour = result.group(1)
    minute = result.group(2)

    start_now = datetime(
        year=current.year,
        month=current.month,
        day=current.day,
        hour=int(hour),
        minute=int(minute))
    end_time = start_now + timedelta(hours=8, minutes=45)
    message.reply(end_time.strftime("%H:%M"))

実行結果 ↓↓
キャプチャ2.PNG

こでれ何時に出社しても、定時は何時だ?と悩まなくてもよくなりました

まとめ

・(わかりやすくまとめていただけていた記事があったので)SlackBotをデプロイしてやりとりできるようになるまでが簡単だった
・多くの人が時差出勤になったことで、遅い時間の電車が混んできたので結局元の時間に戻って、Botの活躍の場はなくなってしまった

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