7.3K Views
December 14, 22
スライド概要
インフラエンジニア @ コネヒト (2022-08-20 現在)
slack-go/slack の websocket モードで メンションやDMを扱う 2022.12.14 Kei IWASAKI (@laugh_k)
お前誰よ Kei IWASAKI Twitter: @laugh_k Github: @laughk Mastodon @[email protected] コネヒトのインフラエンジニア 実家は Python, Go は雰囲気で書いている
今日の話 SGの許可設定を追加できる Slackbot を slack-go/slack で作ったよ はじめの一歩としてメンション、スレッド、DM のイベントを分けて処理する方法 を紹介
作ったbotの紹介 対話的に受け取ったIPアドレスをSecurityGroupに突っ込む君
作ったbotの紹介 DMでもOK
botを作った背景 リモートワークでもIP制限があるツールを利用するためにSquidで簡易Proxyを用意し た話 - コネヒト開発者ブログより
slack-go/slack の websocket モードでメンションや DMを扱う
slack-go/slack とは go で slackbot を作るときにお世話になるライブラリ https://pkg.go.dev/github.com/slack-go/slack
とりあえず動かすのは簡単 Slackbot部分の基本的な部分は以下の記事を参考に実装 基本的にこれをコピペするところからはじめればとりあえず何か動く Slack ソケットモードの最も簡単な始め方 (Go 編) - Qiita slack-go/slakc に含まれるサンプル: slack/socketmode.go at master · slack-go/slack
サンプルのままでは 実用的な Slackbot にしていくは 大変 slack/socketmode.go at f50586fa350b01963bd985591a87c19d99c · slack-go/slack より
最低限やりやすくなってほしいこと ひとまず今回作ったボットでは以下のときに反応するようにしたかった チャンネルでメンションされたとき botがメンションされたことのあるスレッドでの新たな発言があったとき DMされたとき
なんとか今回やりたいケースだけでもいいので 扱いやすくしよう
Slackのイベントを扱いやすくしていく イベントの種類を判定するヘルパー関数を用意
Slackのイベントを扱いやすくしていく スレッドの中のメンション
Slackのイベントを扱いやすくしていく スレッドの中のメンション以外
Slackのイベントを扱いやすくしていく スレッドの中のメンション以外
Slackのイベントを扱いやすくしていく イベントの種類を定数化
Slackのイベントを扱いやす くしていく イベントの判別がやりやすくなった ら、分岐を「イベントの種類ごと」 にする
Slackのイベントを扱いやす くしていく イベントの種類を定数化
Slackのイベントを扱いやす くしていく イベントの判別がやりやすくなった ら、分岐を「イベントの種類ごと」 にする
Slackのイベントを扱いやす くしていく イベントの判別がやりやすくなった ら、分岐を「イベントの種類ごと」 にする
Slackのイベントを扱いやす くしていく イベントの判別がやりやすくなった ら、分岐を「イベントの種類ごと」 にする
goroutin でイベントを処理する関数を実行し、socketMode.Run() で起動すればOK このコードは色々なモノが省略されています
ようやく Slackbot の骨組みが出来た
雑感 slack-go/slack は go で slack と websocket でおしゃべりできるようになるだけ で、基本的に頑張って自分で event を見ながら頑張って処理を書く感覚があり泥臭 さを感じる とはいえ、websocket モードで実装してしまえばバイナリ一つを動かすだけで bot として機能するので Go で Slackbot をつくるメリットも大きい