search
LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

dockerでSlackの(Classicな)Botを動かしてみる

この記事はTakumi Akashiro ひとり Advent Calendar 2020の21日目の記事です。

初めに

今年はSlackのBotを作らないとなーと思う場面が少し多い一年でしたが、
今後マシンがぶっ壊れたときに、環境構築をまた1からやるのも面倒ですし、
引継ぎ用の環境構築ドキュメントを用意するのもダルいので、
Dockerでいい感じに環境構築して、だれの環境でも簡単に動かすことを考えないとな、と思った次第でございます。

それが23時間ほど前。

そのまま寝て起きて、業務を始め20時から、この記事を書くために動き始めた!
さあ間に合ったのか!間に合ったので記事になっているんですが。

SlackのBotを作るための準備

今回はRTM(リアルタイムにイベントがとれるヤツ)で動かしたいので、ClassicBotを作ります。
https://api.slack.com/apps?new_classic_app=1

適当にBotをインストールして、Bot tokenを作っておきます。

各種ファイルの準備

以下のファイルを用意します。

  • src/requirements.txt
    • pipでインストールするモジュールを指定する
  • src/app.py
    • botの本体です。
  • Dockerfile
    • Dockerイメージを作成するためのファイルです。

今回はslackclientモジュールで適当に作ります。Slack公式が用意しているので安心ですね。

src/requirements.txt
slackclient

何か書こうと思いましたが、全く時間的に余裕がないので
Slack公式が用意した、RTMAPIのサンプルコードを使います。
Real Time Messaging (RTM) — slackclient (Legacy Python Slack SDK)

src/app.py
import os
from slack import RTMClient

@RTMClient.run_on(event="message")
def say_hello(**payload):
  data = payload['data']
  web_client = payload['web_client']

  if 'Hello' in data['text']:
    channel_id = data['channel']
    thread_ts = data['ts']
    user = data['user'] # This is not username but user ID (the format is either U*** or W***)

    web_client.chat_postMessage(
      channel=channel_id,
      text=f"Hi <@{user}>!",
      thread_ts=thread_ts
    )

slack_token = os.environ["SLACK_BOT_TOKEN"]
rtm_client = RTMClient(token=slack_token)
rtm_client.start()

Dockerfile
FROM python:3.8

ENV SLACK_BOT_TOKEN <Botのトークン>
RUN mkdir src
copy src src/

RUN pip install -r ./src/requirements.txt

WORKDIR ./src/
ENTRYPOINT [ "python", "app.py" ]

こんな感じです
image.png

Dockerイメージを作成する

docker build -t <imagename>:<tag> <DockerFileのディレクトリ>

今回は
docker build -t aktk/slack_bot:latest d:\docker\slackbot

チョー簡単。

Dockerイメージを動かす

docker run -d -p 80:80 aktk/slack_bot

SlackのBotの前でHelloしてみる

21_01.gif
うおおおお!動いた!

締め

思った以上に簡単にできてビックリですね!!
こんなに簡単にできるなら、もっと早く触るべきだったなあ、ってちょっと後悔してます。

将来的にはPySide2製のEXE化が必要なツールの環境構築+ビルドとかにも使いたいですが、
コンテナはLinuxで動いてるっぽいので、もっと調べないと駄目だろうなあ……

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
What you can do with signing up
0