Search code examples
slackslack-api

Slack API: select conversation members while filtering out bots without n+1


I need to select all members of a conversation who are not bots. It appears the way to do this is to first call conversations.members and then for each member call users.info. Using the slack ruby client, that boils down to this:

client = Slack::Web::Client.new(token: "MY-OAUTH-TOKEN")

# returns an array of user ids
response = client.conversations_members(channel: "#some-channel", limit: 500)
member_ids = response.members

members = member_ids.reject do |member_id|
  # returns a https://api.slack.com/types/user object
  user = client.users_info(user: member_id)
  user["user"]["is_bot"] == true
end

This obviously presents an n+1 problem. I'm wondering if I've overlooked a better API method to call, or an API method argument that could help with this, whether via slack-ruby-client, or just via the vanilla API methods.


Solution

  • Unfortunately, Currently Slack does not have a single API call solution to your problem statement.