著者:檜垣 龍德
今回は、Pythonとそのライブラリである「slacker」「python-crontab」を用いて、チャットサービス「Slack」にメッセージを自動投稿するbo(t Slackbot)を開発する方法を解説します。例として開発するのは、参加者からメッセージが投稿されるまで「Get Up !!」というメッセージを連続投稿するbotです。
シェルスクリプトマガジン Vol.66は以下のリンク先でご購入できます。
図7 「.env」ファイルに記述する内容
1 2 |
ACCESS_TOKEN=アクセストークン CHANNEL_ID=チャンネルID |
図8 「settings.py」ファイルに記述する内容
1 2 3 4 5 6 7 8 9 |
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」ファイルに記述する内容
1 2 3 4 5 |
from slacker import Slacker import settings slack = Slacker(settings.ACCESS_TOKEN) slack.chat.post_message("チャンネル名", "Get Up !!") |
図11 「cron.py」ファイルに記述する内容
1 2 3 4 5 6 7 |
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ファイルの内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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ファイルに追記する内容
1 2 3 4 5 |
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) |