著者:檜垣 龍德
今回は、Pythonとそのライブラリである「slacker」「python-crontab」を用いて、チャットサービス「Slack」にメッセージを自動投稿するbo(t Slackbot)を開発する方法を解説します。例として開発するのは、参加者からメッセージが投稿されるまで「Get Up !!」というメッセージを連続投稿するbotです。
シェルスクリプトマガジン Vol.66は以下のリンク先でご購入できます。![]()
![]()
図7 「.env」ファイルに記述する内容
ACCESS_TOKEN=アクセストークン
CHANNEL_ID=チャンネルID
図8 「settings.py」ファイルに記述する内容
import os
from os.path import join, dirname
from dotenv import load_dotenv
dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)
ACCESS_TOKEN = os.environ.get("ACCESS_TOKEN")
CHANNEL_ID = os.environ.get("CHANNEL_ID")
図9 「main.py」ファイルに記述する内容
from slacker import Slacker
import settings
slack = Slacker(settings.ACCESS_TOKEN)
slack.chat.post_message("チャンネル名", "Get Up !!")
図11 「cron.py」ファイルに記述する内容
from crontab import CronTab
cron = CronTab()
job = cron.new('python main.py')
job.setall('00 00 * * *')
for result in cron.run_scheduler():
print("Done Job"
図12 書き換えたmain.pyファイルの内容
from slacker import Slacker
from time import sleep
import settings
slack = Slacker(settings.ACCESS_TOKEN)
channel_id = settings.CHANNEL_ID
slack.chat.post_message("チャンネル名", "Get Up !!")
history = slack.channels.history(channel_id)
start_ts = history.body["messages"][0]["ts"]
while True:
sleep(1)
history = slack.channels.history(channel_id, count=10000, oldest=start_ts)
not_bot_users = [message["user"] for message in history.body["messages"] if "bot_id" not in message]
if len(not_bot_users):
break
else:
slack.chat.post_message("チャンネル名", "Get Up !!")
図14 書き換えたmain.pyファイルに追記する内容
history = slack.channels.history(channel_id, count=10000, oldest=start_ts)
ts_list = [message["ts"] for message in history.body["messages"] if 'bot_id' in message]
ts_list.append(start_ts)
for ts in ts_list:
slack.chat.delete(channel_id, ts=ts, as_user=True)