0
0

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.

Takumi Akashiro ひとりAdvent Calendar 2020

Day 21

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

Last updated at Posted at 2020-12-21

この記事は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で動いてるっぽいので、もっと調べないと駄目だろうなあ……

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?