Help us understand the problem. What is going on with this article?

Slackでメンバーが参加しているチャンネルをBotkit(Slack API)で調べる

More than 3 years have passed since last update.

TOPIC

  • Slackでメンバーが参加しているチャンネルを調べる

<書かないこと>

  • Slackの操作説明(Botの連携方法)
  • Botkitの使用方法(インストール、起動方法など)
  • ソースコードの解説

Slackでメンバーが参加しているチャンネルを調べる

Botkitのslack_bot.jsに下記の内容を追記しました。

Botkitのslack_bot.jsに追記した内容
var async = require('async');

controller.hears(['^参加チャンネル(.*)'], 'direct_message,direct_mention,mention', function(bot, message) {
  var targetUser = message.match[1];
  var uid = ''

  bot.api.users.list({}, function(err, res){
    async.each(res.members, function(member, callback){
      if(!member.deleted){
        if(member.name.match('^'+targetUser+'$')){
          bot.reply(message, `${targetUser}さんのユーザIDは${member.id}です。`);
          uid=member.id
        }
      }
    });

    if(uid === ''){
      bot.reply(message, 'ユーザ検索にヒットしませんでした。');
    } else {
      userInChannel(uid, bot, message);
    }
  });

});

function userInChannel(uid, bot, message) {

  var joinChannels = '';

  bot.api.channels.list({}, function(err, res){
    async.each(res.channels, function(channel, callback){
      if(!channel.is_archived){
        var members = channel.members;
        for ( var i = 0; i < members.length; i++ ) {
          if ( members[i].match('^'+uid+'$')) {
            joinChannels = joinChannels + '\r\n' + channel.name;
          }
        }
      }
    });

    if(joinChannels === '' ){
      bot.reply(message, 'チャンネル検索にヒットしませんでした。');
    } else {
      msg='〜検索結果ここから〜' + joinChannels + '\r\n〜検索結果ここまで〜';
      bot.reply(message, msg);
    }
  });
}

実行結果

Slack_参加チャネル検索.png

注)検索できるのはパブリックチャンネルのみです。

動作した環境

  • Slackで動作確認した日は【2016年11月20日】です。
  • Botkitのバージョンは【0.4.1】です。
  • Nodeのバージョンは【6.7.0】です。
  • npmのasyncのバージョンは【2.1.2】です。

書いた背景

  • 新たにSlackへ招待する時に、既存メンバーの●●さんと同じチャンネルに予め参加させてほしいと頼まれることが多かったので、●●さんが参加しているチャンネルを知りたかったので。
  • チャンネルからメンバーの一覧は確認できるけど、その逆は確認できなかったので。
    • 制限付きのGuestアカウントは、管理者メニューから参加しているチャンネルを確認できるけど、Full Memberアカウントは参加しているチャンネルを確認できなかったので。

参考サイト

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした