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で動作確認した日は【2016年11月20日】です。
- Botkitのバージョンは【0.4.1】です。
- Nodeのバージョンは【6.7.0】です。
- npmのasyncのバージョンは【2.1.2】です。
書いた背景
- 新たにSlackへ招待する時に、既存メンバーの●●さんと同じチャンネルに予め参加させてほしいと頼まれることが多かったので、●●さんが参加しているチャンネルを知りたかったので。
- チャンネルからメンバーの一覧は確認できるけど、その逆は確認できなかったので。
- 制限付きのGuestアカウントは、管理者メニューから参加しているチャンネルを確認できるけど、Full Memberアカウントは参加しているチャンネルを確認できなかったので。
参考サイト
-
Slack API
-
Botkit
-
async