この記事はTakumi Akashiro ひとり Advent Calendar 2020の9日目の記事です。
この記事は2021年上旬リリース予定のSocketModeに関して、
現在リリースされているコードを読んで妄想を垂れ流す記事です。
何一つ試したコードはないので、そのことを配慮してください。Yoro!
始めに
つい数日目、SlackのPC版クライアントから更新してくれと、散々泣きつかれていた俺はようやく更新ボタンを押した。
そしてクライアント更新後、数か月にSlackの新機能を覗いた。
ワークフロービルダーのように思った以上に使える機能を期待していた。
…あ、いやこれじゃなかった…これも滅茶苦茶うれしいんだが。ありがとうSlack!
うおおおおおおおぉっぉおおおおおおおおおおお!!!!!!!!!
これだよ!!!これ!!!!!
情シスににらまれて、下手こいて情報流出させて、退職処分になる悪夢を見なくてもSlackアプリを作れる!!!
もう仕方なく、いつ廃止されるのかわからないClassic Botを変なところから作らなくていいんだ!!!!
ありがとぉおおおー!!!!!Slack!!!!!!
…というわけで、少しでも早く使いたいので、SocketModeについて調べます。
……あれ?まだリリースされてないはずじゃ?
まあ見てみましょう。
@slack/socket-mode - npm を眺める
ドキュメントは…まだ見れないですね。
なるほど。xapp
から始まるTokenを渡さないといけないんですね。
…まだ、xapp
から始まるTokenを作る手段はないので、使えないようです。
そして、permissionにはconnections:write
が必要なみたいです。
こちらも当然まだないですね。
動かせないけど書いてみる
とりあえず読んだ感じで、Hello
を含むpostがあったときにHello @username
と返す場合を書いてみると……
const{SocketModeClient}=require('@slack/socket-mode');const{WebClient}=require('@slack/web-api');// xappから始まるトークンを環境変数[SLACK_APP_TOKEN]にセットしておくconstsocketModeClient=newSocketModeClient(process.env.SLACK_APP_TOKEN);constWebClient=newWebClient(process.env.BOT_TOKEN);// Send a messageに書いてあるmember_joined_channelイベントへの反応から改造。// ackはboltのドキュメント曰くSlack側へイベントが正常に受信されたことを伝える。// bodyは何なんだ?わからねえ……client.on('message',async({event,body,ack})=>{try{awaitack();// 通常メッセージ以外を弾く。おそらくBotもはじけてるはず。if('subtype'inevent)return;// Helloが含まれてないものを弾く。if(!event.text.includes("Hello"))return;awaitWebClient.chat.postMessage({text:`Hello <@${event.user}>.`,channel:event.channel});}catch(error){console.log('An error occurred',error);}})(async()=>{awaitclient.start();})();
こんな感じですかね。
締め
あ゛あ゛ーーー2021年が待ち遠しい゛゛!!!!
最後に
この記事は2021年上旬リリース予定のSocketModeに関して、
現在リリースされているコードを読んで妄想を垂れ流す記事でした。