3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

slack-api でチャンネル名から ID を取得する

Posted at

概要

Slack 用 bot を Ruby で作成するのに、slack-api を利用し、下記のようなコードで、各チャンネルでの発言を取得している。

require 'slack'
Slack.configure {|config| config.token = TOKEN }
client = Slack.realtime

client.on :message do |data|
  # 投稿内容でいろいろ処理する
end

投稿内容でいろいろ処理するなかで、特定の部屋での発言にのみ反応させたくなったので、if でチャンネル名を条件に加えようとしたが、data['channel'] で取得できるものはチャンネル ID となっているので、正しく判定できない。

その問題を解決するために雑に考えてみた結果である。

対処

API を利用し、チャンネルリストを取得することができる。チャンネルリストは下記のようになっている。

{
  "ok" => true,
  "channels" : [
    {
      "id" => "A1B2", # チャンネル ID
      "name" => "hoge", # チャンネル名
      # 作成者や参加者、トピックなどもある
    },
	{
		# これの繰り返し
    }
  ]
}

そのため、取得可能なチャンネルをすべて取得し、その中から指定したチャンネル名と一致するものの ID を返すというメソッドを作成した(とりあえず一致するものがなければ空としている)。

def get_channel_id(channel_name)
  channel_id = ''
  c_list = Slack.channels_list
  if c_list['ok']
    c_list['channels'].each do |channel|
      channel_id = channel['id']  if channel['name'] == channel_name 
    end
  end
  
  channel_id
end

問題点

  • チャンネル数が多くなると時間がかかるようになってしまう
    • なのでもうちょっと考えたほうがいい
  • Private なチャンネルは取得できない
    • そもそも API で取得できない模様
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?