slack-go/slack の websocket モードでメンションやDMを扱う - Let's Go Talk #5

4.9K Views

December 14, 22

スライド概要

profile-image

インフラエンジニア @ コネヒト (2022-08-20 現在)

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

slack-go/slack の websocket モードで メンションやDMを扱う 2022.12.14 Kei IWASAKI (@laugh_k)

2.

お前誰よ Kei IWASAKI Twitter: @laugh_k Github: @laughk Mastodon @laughk@fedibird.com コネヒトのインフラエンジニア 実家は Python, Go は雰囲気で書いている

3.

今日の話 SGの許可設定を追加できる Slackbot を slack-go/slack で作ったよ はじめの一歩としてメンション、スレッド、DM のイベントを分けて処理する方法 を紹介

4.

作ったbotの紹介 対話的に受け取ったIPアドレスをSecurityGroupに突っ込む君

5.

作ったbotの紹介 DMでもOK

6.

botを作った背景 リモートワークでもIP制限があるツールを利用するためにSquidで簡易Proxyを用意し た話 - コネヒト開発者ブログより

7.

slack-go/slack の websocket モードでメンションや DMを扱う

8.

slack-go/slack とは go で slackbot を作るときにお世話になるライブラリ https://pkg.go.dev/github.com/slack-go/slack

9.

とりあえず動かすのは簡単 Slackbot部分の基本的な部分は以下の記事を参考に実装 基本的にこれをコピペするところからはじめればとりあえず何か動く Slack ソケットモードの最も簡単な始め方 (Go 編) - Qiita slack-go/slakc に含まれるサンプル: slack/socketmode.go at master · slack-go/slack

10.

サンプルのままでは 実用的な Slackbot にしていくは 大変 slack/socketmode.go at f50586fa350b01963bd985591a87c19d99c · slack-go/slack より

11.

最低限やりやすくなってほしいこと ひとまず今回作ったボットでは以下のときに反応するようにしたかった チャンネルでメンションされたとき botがメンションされたことのあるスレッドでの新たな発言があったとき DMされたとき

12.

なんとか今回やりたいケースだけでもいいので 扱いやすくしよう

13.

Slackのイベントを扱いやすくしていく イベントの種類を判定するヘルパー関数を用意

14.

Slackのイベントを扱いやすくしていく スレッドの中のメンション

15.

Slackのイベントを扱いやすくしていく スレッドの中のメンション以外

16.

Slackのイベントを扱いやすくしていく スレッドの中のメンション以外

17.

Slackのイベントを扱いやすくしていく イベントの種類を定数化

18.

Slackのイベントを扱いやす くしていく イベントの判別がやりやすくなった ら、分岐を「イベントの種類ごと」 にする

19.

Slackのイベントを扱いやす くしていく イベントの種類を定数化

20.

Slackのイベントを扱いやす くしていく イベントの判別がやりやすくなった ら、分岐を「イベントの種類ごと」 にする

21.

Slackのイベントを扱いやす くしていく イベントの判別がやりやすくなった ら、分岐を「イベントの種類ごと」 にする

22.

Slackのイベントを扱いやす くしていく イベントの判別がやりやすくなった ら、分岐を「イベントの種類ごと」 にする

23.

goroutin でイベントを処理する関数を実行し、socketMode.Run() で起動すればOK このコードは色々なモノが省略されています

24.

ようやく Slackbot の骨組みが出来た

25.

雑感 slack-go/slack は go で slack と websocket でおしゃべりできるようになるだけ で、基本的に頑張って自分で event を見ながら頑張って処理を書く感覚があり泥臭 さを感じる とはいえ、websocket モードで実装してしまえばバイナリ一つを動かすだけで bot として機能するので Go で Slackbot をつくるメリットも大きい