From e7eb3f986702c3416c30dc667c2ea1159f099cd3 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Mon, 4 Feb 2019 20:19:31 -0500 Subject: [PATCH 1/2] Fix jq selection of users for `chat send` Signed-off-by: Brandon McAnsh --- src/slack | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/slack b/src/slack index e309d95..5246533 100755 --- a/src/slack +++ b/src/slack @@ -255,10 +255,10 @@ function lchannel() { @*) local _user=$(\ curl -s -X POST https://slack.com/api/users.list --data-urlencode "token=${token}" 2>&1 | \ - jq -r ".members | map(select(.name == \"${channel/@/}\" or .profile.display_name == \"${channel/@/}\")) | .[0].id") + jq -r ".members[] | select(.name == \"${channel/@/}\" or .profile.display_name == \"${channel/@/}\").id") local _channel=$(\ curl -s -X POST https://slack.com/api/im.list --data-urlencode "token=${token}" 2>&1 | \ - jq -r ".ims | map(select(.user == \"${_user}\")) | .[].id") + jq -r ".ims[] | select(.user == \"${_user}\").id") echo ${_channel} ;; @@ -271,7 +271,7 @@ function luser() { @*) local _user=$(\ curl -s -X POST https://slack.com/api/users.list --data-urlencode "token=${token}" 2>&1 | \ - jq -r ".members | map(select(.name == \"${user/@/}\" or .profile.display_name == \"${user/@/}\")) | .[0].id") + jq -r ".members[] | select(.name == \"${user/@/}\" or .profile.display_name == \"${user/@/}\").id") echo ${_user} ;; @@ -293,7 +293,6 @@ function chatdelete() { function chatsend() { [ -n "${stdin}" ] && [ -z "${text}" ] && text=\`\`\`${stdin//$'\n'/'\n'}\`\`\` - local msg=$(\ curl -s -X POST https://slack.com/api/chat.postMessage \ --data-urlencode "as_user=true" \ From 89fa1c09a4b12d90fea39661898b99935a5384ee Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Thu, 7 Feb 2019 16:14:01 -0500 Subject: [PATCH 2/2] Add multi-user conversations to `chat send` --channel "@userA,@userB,@userC` Signed-off-by: Brandon McAnsh --- src/slack | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/slack b/src/slack index 5246533..73fc654 100755 --- a/src/slack +++ b/src/slack @@ -250,16 +250,44 @@ function jqify() { esac } +function join_by { + local IFS="$1"; shift; echo "$*"; +} + function lchannel() { case "${channel}" in @*) - local _user=$(\ - curl -s -X POST https://slack.com/api/users.list --data-urlencode "token=${token}" 2>&1 | \ - jq -r ".members[] | select(.name == \"${channel/@/}\" or .profile.display_name == \"${channel/@/}\").id") - local _channel=$(\ - curl -s -X POST https://slack.com/api/im.list --data-urlencode "token=${token}" 2>&1 | \ - jq -r ".ims[] | select(.user == \"${_user}\").id") - + local _channel="" + if [[ $channel =~ ,* ]]; + then + IFS=',' read -r -a users <<< "${channel}" + local _user_ids=() + # look up user id for all selected users + for user in ${users[@]}; + do + local _user=$(\ + curl -s -X POST https://slack.com/api/users.list --data-urlencode "token=${token}" 2>&1 | \ + jq -r ".members[] | select(.name == \"${user/@/}\" or .profile.display_name == \"${user/@/}\").id") + + [[ ! -z $_user ]] && _user_ids+=($_user) + done + + # Open a conversation between all users specified in channel arg + _channel=$(\ + curl -s -X POST https://slack.com/api/conversations.open \ + --data-urlencode "token=${token}" \ + --data-urlencode "users=$(join_by , ${_user_ids[@]})" \ + --data-urlencode "return_im=true" 2>&1 | \ + jq -r ".channel.id") + else + local _user=$(\ + curl -s -X POST https://slack.com/api/users.list --data-urlencode "token=${token}" 2>&1 | \ + jq -r ".members[] | select(.name == \"${channel/@/}\" or .profile.display_name == \"${channel/@/}\").id") + _channel=$(\ + curl -s -X POST https://slack.com/api/im.list --data-urlencode "token=${token}" 2>&1 | \ + jq -r ".ims[] | select(.user == \"${_user}\").id") + fi + echo ${_channel} ;; *) echo ${channel} ;;