node-slack-sdkをv4系に上げた際のユーザ及びチャンネル一覧の取得方法

node-slack-sdkのバージョンが3系から4系に変わった際にReal Time Messaging API周りの仕様が一部変わっていて、作っていたSlack眺めるくんのユーザの一覧や自身がjoinしているチャンネルの一覧取得処理を改修した際のメモ。

v3系のとき

v3系だとRTM APIでtokenが認証されたタイミングで発火する処理を記述する

let token = "xxxxxx";
let slack = require("@slack/client");
let RtmClient = slack.RtmClient;

let CLIENT_EVENTS = slack.CLIENT_EVENTS;

let rtm = new RtmClient(token, {logLevel: "error"});

rtm.on(CLIENT_EVENTS.RTM.AUTHENTICATED, (rtmStartData) => {

において渡される引数 rtmStartData に接続したチームにおける参加しているユーザー情報や所属しているチャンネルの一覧が納められているので、それを用いて処理を書けばよかった。

rtmStartData.users.forEach((v, i) => {
  // ユーザーの情報でゴニョゴニョ
});
rtmStartData.channels.forEach((v, i) => {
  // 所属チャンネルの情報でゴニョゴニョ
});

v4系のとき

v3系のときはRTM APIの接続周りを記述したときに自動的にユーザ情報一覧やチャンネル情報一覧を取得できていたのだけれども、このRTM API用のクライアント経由では取れなくなったので別途Web APIを呼び出してユーザ情報やチャンネル情報を取得する必要がある。従ってRTM APIで何かしら処理を行うプログラムとは別個で書くイメージになる。

蛇足だけれども、v4になって rtm.on で接続される際のイベント名は文字列で渡す様になったのでそこもnode-slack-sdkをv4にした際に併せて書き換えてあげる必要がある。

const {RTMClient} = require("@slack/client");
const rtm = new RTMClient(token, {logLevel: "error"});

rtm.on("authenticated", (rtmStartData) => {
  // RTM APIを使った処理内容を書く
});

const {WebClient} = require("@slack/client");
const web = new WebClient(token, {logLevel: "error"});

web.users.list().then((response) => {
  response.members.forEach((v, i) => {
    // ユーザーの情報でゴニョゴニョ
  });
   return web.channels.list();
}).then((response) => {
  response.channels.forEach((v, i) => {
    // 所属チャンネルの情報でゴニョゴニョ
  });
}).then(() => {
  rtm.start();
}).catch((error) => {
  console.log(error);
});

ドキュメントだったり、差分読めばわかるのだけど、防備録として。