bindir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
etcdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [ -n "${SLACK_CLI_TOKEN}" ]; then
token="${SLACK_CLI_TOKEN}"
elif [ -r "${etcdir}/.slack" ] && [ -f "${etcdir}/.slack" ]; then
token=$(sed -n '1p' < "${etcdir}/.slack")
elif [ -r "${HOME}/.slack" ] && [ -f "${HOME}/.slack" ]; then
token=$(sed -n '1p' < "${HOME}/.slack")
elif [ -r "/etc/.slack" ] && [ -f "/etc/.slack" ]; then
token=$(sed -n '1p' < "/etc/.slack")
fi
# COMMAND PARSING #################################################################################
cmd="${1}" ; shift
# SUBCOMMAND PARSING ##############################################################################
case "${cmd}${1}" in
chatdelete|chatsend|chatupdate|\
filedelete|fileinfo|filelist|fileupload|\
presenceactive|presenceaway|\
reminderadd|remindercomplete|reminderdelete|reminderinfo|reminderlist| \
snoozeend|snoozeinfo|snoozestart|\
statusclear|statusedit)
sub=${1} ; shift
;;
esac
# PIPE FRIENDLINESS ###############################################################################
case "${cmd}${sub}" in
chatsend|chatupdate|fileupload) [ -p /dev/stdin ] && stdin=$(cat <&0) ;;
esac
# ARGUMENT AND OPTION PARSING #####################################################################
while (( "$#" )); do
case "${1}" in
--actions=*) actions=${1/--actions=/''} ; shift ;;
--actions*|-a*) actions=${2} ; shift ; shift ;;
--author-icon=*) authoricon=${1/--author-icon=/''} ; shift ;;
--author-icon*|-ai*) authoricon=${2} ; shift ; shift ;;
--author-link=*) authorlink=${1/--author-link=/''} ; shift ;;
--author-link*|-al*) titlelink=${2} ; shift ; shift ;;
--author=*) author=${1/--author=/''} ; shift ;;
--author*|-at*) author=${2} ; shift ; shift ;;
--channels=*) channels=${1/--channels=/''} ; shift ;;
--channels*|-chs*) channels=${2} ; shift ; shift ;;
--channel=*) channel=${1/--channel=/''} ; shift ;;
--channel*|-ch*) channel=${2} ; shift ; shift ;;
--color=*) color=${1/--color=/''} ; shift ;;
--color*|-cl*) color=${2} ; shift ; shift ;;
--compact|-cp) compact='-c' ; shift ;;
--comment=*) comment=${1/--comment=/''} ; shift ;;
--comment*|-cm*) comment=${2} ; shift ; shift ;;
--count=*) count=${1/--count=/''} ; shift ;;
--count|-cn*) count=${2} ; shift ; shift ;;
--emoji=*) emoji=${1/--emoji=/''} ; shift ;;
--emoji*|-em*) emoji=${2} ; shift ; shift ;;
--fields=*) fields=${1/--fields=/''} ; shift ;;
--fields*|-flds*) fields=${2} ; shift ; shift ;;
--filename=*) filename=${1/--filename=/''} ; shift ;;
--filename*|-fln*) filename=${2} ; shift ; shift ;;
--filetype=*) filetype=${1/--filetype=/''} ; shift ;;
--filetype*|-flt*) filetype=${2} ; shift ; shift ;;
--file=*) file=${1/--file=/''} ; shift ;;
--file*|-fl*) file=${2} ; shift ; shift ;;
--filter=*) filter=${1/--filter=/''} ; shift ;;
--filter*|-f*) filter=${2} ; shift ; shift ;;
--footer-icon=*) footericon=${1/--footer-icon=/''} ; shift ;;
--footer-icon*|-fi*) footericon=${2} ; shift ; shift ;;
--footer=*) footer=${1/--footer=/''} ; shift ;;
--footer*|-ft*) footer=${2} ; shift ; shift ;;
--image=*) image=${1/--image-url=/''} ; shift ;;
--image*|-im*) image=${2} ; shift ; shift ;;
--monochrome|-m) monochrome='-M' ; shift ;;
--minutes=*) minutes=${1/--minutes=/''} ; shift ;;
--minutes*|-mn*) minutes=${2} ; shift ; shift ;;
--page=*) page=${1/--page=/''} ; shift ;;
--page|-pg*) page=${2} ; shift ; shift ;;
--pretext=*) pretext=${1/--pretext=/''} ; shift ;;
--pretext*|-pt*) pretext=${2} ; shift ; shift ;;
--reminder=*) reminder=${1/--reminder=/''} ; shift ;;
--reminder|-rm*) reminder=${2} ; shift ; shift ;;
--text=*) text=${1/--text=/''} ; shift ;;
--text*|-tx*) text=${2} ; shift ; shift ;;
--thumbnail=*) thumbnail=${1/--thumbnail=/''} ; shift ;;
--thumbnail*|-th*) thumbnail=${2} ; shift ; shift ;;
--time=*) _time=${1/--time=/''} ; shift ;;
--time|-tm*) _time=${2} ; shift ; shift ;;
--timestamp-from=*) timestampfrom=${1/--timestampfrom=/''} ; shift ;;
--timestamp-from|-tf*) timestampfrom=${2} ; shift ; shift ;;
--timestamp-to=*) timestampto=${1/--timestampto=/''} ; shift ;;
--timestamp-to|-tt*) timestampto=${2} ; shift ; shift ;;
--timestamp=*) timestamp=${1/--timestamp=/''} ; shift ;;
--timestamp*|-ts*) timestamp=${2} ; shift ; shift ;;
--title-link=*) titlelink=${1/--title-link=/''} ; shift ;;
--title-link*|-tl*) titlelink=${2} ; shift ; shift ;;
--title=*) title=${1/--title=/''} ; shift ;;
--title*|-ti*) title=${2} ; shift ; shift ;;
--token=*) token=${1/--token=/''} ; shift ;;
--token|-tk*) token=${2} ; shift ; shift ;;
--trace|-x) trace='set -x' ; shift ;;
--types=*) types=${1/--types=/''} ; shift ;;
--types|-ty*) types=${2} ; shift ; shift ;;
--user=*) user=${1/--user=/''} ; shift ;;
--user|-ur*) user=${2} ; shift ; shift ;;
*)
case "${cmd}${sub}" in
chatdelete)
[ -n "${1}" ] && [ -n "${timestamp}" ] && [ -z "${channel}" ] && channel=${1}
[ -n "${1}" ] && [ -z "${timestamp}" ] && timestamp=${1}
;;
chatsend)
[ -n "${1}" ] && [ -n "${text}" ] && [ -z "${channel}" ] && channel=${1}
[ -n "${1}" ] && [ -z "${text}" ] && text=${1}
;;
chatupdate)
[ -n "${1}" ] && [ -n "${text}" ] && [ -n "${timestamp}" ] && [ -z "${channel}" ] && channel=${1}
[ -n "${1}" ] && [ -n "${text}" ] && [ -z "${timestamp}" ] && timestamp=${1}
[ -n "${1}" ] && [ -z "${text}" ] && text=${1}
;;
filedelete|fileinfo)
[ -n "${1}" ] && [ -z "${file}" ] && file=${1}
;;
fileupload)
[ -n "${1}" ] && [ -n "${file}" ] && [ -z "${channels}" ] && channels=${1}
[ -n "${1}" ] && [ -z "${file}" ] && file=${1}
;;
snoozeinfo)
[ -n "${1}" ] && [ -z "${user}" ] && user=${1}
;;
snoozestart)
[ -n "${1}" ] && [ -z "${minutes}" ] && minutes=${1}
;;
statusedit)
[ -n "${1}" ] && [ -n "${text}" ] && [ -z "${emoji}" ] && emoji=${1}
[ -n "${1}" ] && [ -z "${text}" ] && text=${1}
;;
reminderadd)
[ -n "${1}" ] && [ -n "${text}" ] && [ -z "${_time}" ] && _time=${1}
[ -n "${1}" ] && [ -z "${text}" ] && text=${1}
;;
remindercomplete|reminderdelete|reminderinfo)
[ -n "${1}" ] && [ -z "${reminder}" ] && reminder=${1}
;;
esac
shift
;;
esac
done
# TRACING #########################################################################################
${trace}
# ARGUMENT AND OPTION PROMPTING ###################################################################
case "${cmd}${sub}" in
chatdelete)
[ -z "${channel}" ] && read -e -p 'Enter channel (e.g. #general): ' channel
[ -z "${timestamp}" ] && read -e -p 'Enter timestamp (e.g. 1405894322.002768): ' timestamp
;;
chatsend)
[ -z "${channel}" ] && [ -z "${text}" ] && prompt='true'
[ -n "${prompt}" ] && [ -z "${actions}" ] && read -e -p 'Enter actions (e.g. {"type": “button", "style": "primary", "text": "my text", "url": "http://example.com"}, ...): ' actions
[ -n "${prompt}" ] && [ -z "${author}" ] && read -e -p 'Enter author name (e.g. slackbot): ' author
[ -n "${prompt}" ] && [ -z "${authoricon}" ] && read -e -p 'Enter author icon (e.g. a URL): ' authoricon
[ -n "${prompt}" ] && [ -z "${authorlink}" ] && read -e -p 'Enter author link (e.g. a URL): ' authorlink
[ -z "${channel}" ] && read -e -p 'Enter channel (e.g. #general): ' channel
[ -n "${prompt}" ] && [ -z "${color}" ] && read -e -p 'Enter color (e.g. good): ' color
[ -n "${prompt}" ] && [ -z "${fields}" ] && read -e -p 'Enter fields (e.g. {"title": "My Field Title", "value": "My field value", "short": true}, ...): ' fields
[ -n "${prompt}" ] && [ -z "${footer}" ] && read -e -p 'Enter footer (e.g. Hello footer!): ' footer
[ -n "${prompt}" ] && [ -z "${footericon}" ] && read -e -p 'Enter footer icon (e.g. a URL): ' footericon
[ -n "${prompt}" ] && [ -z "${image}" ] && read -e -p 'Enter image (e.g. a URL): ' image
[ -n "${prompt}" ] && [ -z "${pretext}" ] && read -e -p 'Enter pretext (e.g. Hello pretext!): ' pretext
[ -z "${text}" ] && read -e -p 'Enter text (e.g. Hello text!): ' text
[ -n "${prompt}" ] && [ -z "${thumbnail}" ] && read -e -p 'Enter thumbnail (e.g. a URL): ' thumbnail
[ -n "${prompt}" ] && [ -z "${_time}" ] && read -e -p 'Enter time (e.g. 123456789): ' _time
[ -n "${prompt}" ] && [ -z "${title}" ] && read -e -p 'Enter title (e.g. Hello title!): ' title
[ -n "${prompt}" ] && [ -z "${titlelink}" ] && read -e -p 'Enter title link (e.g. a URL): ' titlelink
;;
chatupdate)
[ -z "${text}" ] && read -e -p 'Enter text (e.g. Hello World!): ' text
[ -z "${timestamp}" ] && read -e -p 'Enter timestamp (e.g. 1405894322.002768): ' timestamp
[ -z "${channel}" ] && read -e -p 'Enter channel (e.g. #general): ' channel
;;
filedelete)
[ -z "${file}" ] && read -e -p 'Enter file (e.g. F2147483862): ' file
;;
fileinfo)
[ -z "${file}" ] && read -e -p 'Enter file (e.g. F2147483862): ' file
;;
fileupload)
[ -z "${file}" ] && read -e -p 'Enter file (e.g. file.log): ' file
[ -z "${channels}" ] && read -e -p 'Enter channels (e.g. #general,C1234567890): ' channels
;;
init)
if [ -n "${SLACK_CLI_TOKEN}" ]; then
_token="${SLACK_CLI_TOKEN}"
elif [ -r "${etcdir}/.slack" ] && [ -f "${etcdir}/.slack" ]; then
_token=$(sed -n '1p' < "${etcdir}/.slack")
fi
if [ -z "${token}" ] || [ "${token}" == "${_token}" ]; then
read -e -p 'Enter Slack API token: ' token
fi
;;
reminderadd)
[ -z "${text}" ] && read -e -p 'Enter text (e.g. lunch): ' text
[ -z "${_time}" ] && read -e -p 'Enter time (e.g. 123456789): ' _time
;;
remindercomplete|reminderdelete|reminderinfo)
[ -z "${reminder}" ] && read -e -p 'Enter reminder (e.g. RmCT7QGVBF): ' reminder
;;
snoozestart)
[ -z "${minutes}" ] && read -e -p 'Enter minutes (e.g. 60): ' minutes
;;
statusedit)
[ -z "${text}" ] && read -e -p 'Enter text (e.g. lunch): ' text
[ -z "${emoji}" ] && read -e -p 'Enter emoji (e.g. :hamburger:): ' emoji
;;
esac
# COMMAND UTILITY FUNCTIONS #######################################################################
function attachify() {
[ -n "${actions}" ] && local _actions=", \"actions\": [${actions}]"
[ -n "${author}" ] && local _author=", \"author_name\": \"${author}\""
[ -n "${authoricon}" ] && local _authoricon=", \"author_icon\": \"${authoricon}\""
[ -n "${authorlink}" ] && local _authorlink=", \"author_link\": \"${authorlink}\""
[ -n "${color}" ] && local _color=", \"color\": \"${color}\""
[ -n "${fields}" ] && local _fields=", \"fields\": [${fields}]"
[ -n "${footer}" ] && local _footer=", \"footer\": \"${footer}\""
[ -n "${footericon}" ] && local _footericon=", \"footer_icon\": \"${footericon}\""
[ -n "${image}" ] && local _image=", \"image_url\": \"${image}\""
[ -n "${pretext}" ] && local _pretext=", \"pretext\": \"${pretext}\""
[ -n "${thumbnail}" ] && local _thumbnail=", \"thumb_url\": \"${thumbnail}\""
[ -n "${_time}" ] && local __time=", \"ts\": \"${_time}\""
[ -n "${title}" ] && local _title=", \"title\": \"${title}\""
[ -n "${titlelink}" ] && local _titlelink=", \"title_link\": \"${titlelink}\""
local _json="${_author}${_authoricon}${_authorlink}${_color}${_footer}${_footericon}${_image}${_pretext}${_thumbnail}${__time}${_title}${_titlelink}${_fields}${_actions}"
[ -z "${_json}" ] && local _attachments="[{\"mrkdwn_in\": [\"pretext\"], \"fallback\": \"${text}\", \"pretext\": \"${text}\"}]"
[ -n "${_json}" ] && local _attachments="[{\"mrkdwn_in\": [\"fields\", \"pretext\", \"text\"], \"fallback\": \"${text}\", \"text\": \"${text}\"${_json}}]"
echo "${_attachments}"
}
function jqify() {
case "$(echo ${1} | jq -r '.ok')" in
true) echo ${1} | jq -r ${compact} ${monochrome} "${filter:=.}" ;;
*) echo ${1} | jq -r ${compact} ${monochrome} "${filter:=.}" ; return 1 ;;
esac
}
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 | map(select(.name == \"${channel/@/}\" or .profile.display_name == \"${channel/@/}\")) | .[0].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")
echo ${_channel}
;;
*) echo ${channel} ;;
esac
}
function luser() {
case "${user}" in
@*)
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")
echo ${_user}
;;
*) echo ${user} ;;
esac
}
# COMMAND FUNCTIONS ###############################################################################
function chatdelete() {
local msg=$(\
curl -s -X POST https://slack.com/api/chat.delete \
--data-urlencode "as_user=true" \
--data-urlencode "channel=$(lchannel)" \
--data-urlencode "ts=${timestamp}" \
--data-urlencode "token=${token}")
jqify "${msg}"
}
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" \
--data-urlencode "attachments=$(attachify)" \
--data-urlencode "channel=$(lchannel)" \
--data-urlencode "token=${token}")
jqify "${msg}"
}
function chatupdate() {
[ -n "${stdin}" ] && [ -z "${text}" ] && text=\`\`\`${stdin//$'\n'/'\n'}\`\`\`
local msg=$(\
curl -s -X POST https://slack.com/api/chat.update \
--data-urlencode "as_user=true" \
--data-urlencode "attachments=$(attachify)" \
--data-urlencode "channel=$(lchannel)" \
--data-urlencode "ts=${timestamp}" \
--data-urlencode "token=${token}")
jqify "${msg}"
}
function help() {
local a=(${0//\// })
local bin=${a[${#a[@]}-1]}
echo 'Usage:'
echo " ${bin} chat delete [ [channel]]"
echo ' [--channel|-ch ] [--compact|-c] [--filter|-f ] [--monochrome|-m]'
echo ' [--timestamp|-ts ] [--trace|-x]'
echo
echo " ${bin} chat send [ [channel]]"
echo ' [--author|-at ] [--author-icon|-ai ]'
echo ' [--author-link|-al ] [--channel|-ch ] [--color|-cl ]'
echo ' [--compact|-cp] [--fields|-flds ] [--filter|-f ] [--footer|-ft ]'
echo ' [--footer-icon|-fi ] [--image|-im ] [--monochrome|-m]'
echo ' [--pretext|-pt ] [--text|-tx ] [--thumbnail|-th ]'
echo ' [--time|-tm ] [--title|-ti ] [--title-link|-tl ]'
echo ' [--trace|-x]'
echo
echo " ${ bin } chat update [ [ [channel]]]"
echo ' [--author|-at ] [--author-icon|-ai ]'
echo ' [--author-link|-al ] [--channel|-ch ] [--color|-cl ]'
echo ' [--compact|-cp] [--fields|flds ] [--filter|-f ] [--footer|-ft ]'
echo ' [--footer-icon|-fi ] [--image|-im ] [--monochrome|-m]'
echo ' [--pretext|-pt ] [--text|-tx ] [--thumbnail|-th ]'
echo ' [--time|-tm ] [--timestamp|-ts ] [--title|-ti ]'</span>
<span class="nb">echo</span> <span class="s1">' [--title-link|-tl <title-link>] [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> init"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--token|-tk <token>]'</span>
<span class="nb">echo</span> <span class="s1">' [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> file delete [file]"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--file|-fl <file>] [--filter|-f <filter>] [--monochrome|-m]'</span>
<span class="nb">echo</span> <span class="s1">' [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> file info [file]"</span>
<span class="nb">echo</span> <span class="s1">' [--count|-cn <count>] [--compact|-c] [--file|-fl <file>] [--filter|-f <filter>]'</span>
<span class="nb">echo</span> <span class="s1">' [--monochrome|-m] [--page|-pg <page>] [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> file list"</span>
<span class="nb">echo</span> <span class="s1">' [--channel|-ch <channel>] [--count|-cn <count>] [--compact|-c] [--filter|-f <filter>]'</span>
<span class="nb">echo</span> <span class="s1">' [--monochrome|-m] [--page|-pg <page>] [--timestamp-from|-tf <timetamp>]'</span>
<span class="nb">echo</span> <span class="s1">' [--timestamp-to|-tt <timestamp>] [--trace|-x] [--types|-ty <types>]'</span>
<span class="nb">echo</span> <span class="s1">' [--user|-ur <user>]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> file upload [<file> [channels]]"</span>
<span class="nb">echo</span> <span class="s1">' [--channels|-chs <channels>] [--comment|-cm <comment>] [--compact|-c]'</span>
<span class="nb">echo</span> <span class="s1">' [--file|fl <file>] [--filename|-fn <filename>] [--filetype|-ft <filetype>]'</span>
<span class="nb">echo</span> <span class="s1">' [--filter|-f <filter>] [--monochrome|-m] [--title|-ti <title>] [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> presence active"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> presence away"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> reminder add [<text> [time]]"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--text|tx <text>]'</span>
<span class="nb">echo</span> <span class="s1">' [--time|tm <time>] [--trace|-x] [--user|-ur <user>]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> reminder complete [reminder]"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--reminder|rm <reminder>]'</span>
<span class="nb">echo</span> <span class="s1">' [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> reminder delete [reminder]"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--reminder|rm <reminder>]'</span>
<span class="nb">echo</span> <span class="s1">' [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> reminder info [reminder]"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--reminder|rm <reminder>]'</span>
<span class="nb">echo</span> <span class="s1">' [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> reminder list"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> snooze end"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> snooze info [user]"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--trace|-x]'</span>
<span class="nb">echo</span> <span class="s1">' [--user|-ur <user>]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> snooze start [minutes]"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--minutes|-mn <minutes>] [--monochrome|-m]'</span>
<span class="nb">echo</span> <span class="s1">' [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> status clear"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s2">" </span><span class="k">${</span><span class="nv">bin</span><span class="k">}</span><span class="s2"> status edit [<text> [<emoji>]]"</span>
<span class="nb">echo</span> <span class="s1">' [--compact|-c] [--filter|-f <filter>] [--monochrome|-m] [--trace|-x]'</span>
<span class="nb">echo
echo</span> <span class="s1">'Configuration Commands:'</span>
<span class="nb">echo</span> <span class="s1">' init Initialize'</span>
<span class="nb">echo
echo</span> <span class="s1">'Chat Commands:'</span>
<span class="nb">echo</span> <span class="s1">' chat delete Delete chat message'</span>
<span class="nb">echo</span> <span class="s1">' chat send Send chat message'</span>
<span class="nb">echo</span> <span class="s1">' chat update Update chat message'</span>
<span class="nb">echo
echo</span> <span class="s1">'File Commands:'</span>
<span class="nb">echo</span> <span class="s1">' file delete Delete file'</span>
<span class="nb">echo</span> <span class="s1">' file info Info about file'</span>
<span class="nb">echo</span> <span class="s1">' file list List files'</span>
<span class="nb">echo</span> <span class="s1">' file upload Upload file'</span>
<span class="nb">echo
echo</span> <span class="s1">'Presence Commands:'</span>
<span class="nb">echo</span> <span class="s1">' presence active Active presence'</span>
<span class="nb">echo</span> <span class="s1">' presence away Away presence'</span>
<span class="nb">echo
echo</span> <span class="s1">'Reminder Commands:'</span>
<span class="nb">echo</span> <span class="s1">' reminder add Add reminder'</span>
<span class="nb">echo</span> <span class="s1">' reminder complete Complete reminder'</span>
<span class="nb">echo</span> <span class="s1">' reminder delete Delete reminder'</span>
<span class="nb">echo</span> <span class="s1">' reminder info Info about reminder'</span>
<span class="nb">echo</span> <span class="s1">' reminder list List reminders'</span>
<span class="nb">echo
echo</span> <span class="s1">'Snooze Commands:'</span>
<span class="nb">echo</span> <span class="s1">' snooze end End snooze'</span>
<span class="nb">echo</span> <span class="s1">' snooze info Info about snooze'</span>
<span class="nb">echo</span> <span class="s1">' snooze start Start snooze'</span>
<span class="nb">echo
echo</span> <span class="s1">'Status Commands:'</span>
<span class="nb">echo</span> <span class="s1">' status clear Clear status'</span>
<span class="nb">echo</span> <span class="s1">' status edit Edit status'</span>
<span class="nb">echo
echo</span> <span class="s1">'More Information:'</span>
<span class="nb">echo</span> <span class="s1">' repo https://github.com/rockymadden/slack-cli '</span>
<span class="o">}</span>
<span class="k">function </span>filedelete<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/files.delete <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"file=</span><span class="k">${</span><span class="nv">file</span><span class="k">}</span><span class="s2">"</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>fileinfo<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/files.info <span class="se">\</span>
<span class="k">${</span><span class="nv">count</span>:+<span class="p"> --data-urlencode </span><span class="s2">"count=</span><span class="k">${</span><span class="nv">count</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"file=</span><span class="k">${</span><span class="nv">file</span><span class="k">}</span><span class="s2">"</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">page</span>:+<span class="p"> --data-urlencode </span><span class="s2">"page=</span><span class="k">${</span><span class="nv">page</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>filelist<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/files.list <span class="se">\</span>
<span class="k">${</span><span class="nv">channel</span>:+<span class="p"> --data-urlencode </span><span class="s2">"channel=</span><span class="k">${</span><span class="nv">channel</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">count</span>:+<span class="p"> --data-urlencode </span><span class="s2">"count=</span><span class="k">${</span><span class="nv">count</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">page</span>:+<span class="p"> --data-urlencode </span><span class="s2">"page=</span><span class="k">${</span><span class="nv">page</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">timestampfrom</span>:+<span class="p"> --data-urlencode </span><span class="s2">"ts_from=</span><span class="k">${</span><span class="nv">timestampfrom</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">timestampto</span>:+<span class="p"> --data-urlencode </span><span class="s2">"ts_to=</span><span class="k">${</span><span class="nv">timestampto</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">types</span>:+<span class="p"> --data-urlencode </span><span class="s2">"types=</span><span class="k">${</span><span class="nv">types</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">user</span>:+<span class="p"> --data-urlencode </span><span class="s2">"user=</span><span class="si">$(</span>luser<span class="si">)</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>fileupload<span class="o">()</span> <span class="o">{</span>
<span class="o">[</span> <span class="nt">-n</span> <span class="s2">"</span><span class="k">${</span><span class="nv">stdin</span><span class="k">}</span><span class="s2">"</span> <span class="o">]</span> <span class="o">&&</span> <span class="o">[</span> <span class="nt">-z</span> <span class="s2">"</span><span class="k">${</span><span class="nv">file</span><span class="k">}</span><span class="s2">"</span> <span class="o">]</span> <span class="o">&&</span> <span class="nv">file</span><span class="o">=</span><span class="k">${</span><span class="nv">stdin</span><span class="k">}</span>
<span class="k">if</span> <span class="o">[</span> <span class="nt">-f</span> <span class="s2">"</span><span class="k">${</span><span class="nv">file</span><span class="k">}</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span><span class="nb">local </span><span class="nv">_file</span><span class="o">=</span><span class="k">${</span><span class="nv">file</span><span class="k">}</span>
<span class="k">case</span> <span class="s2">"</span><span class="k">${</span><span class="nv">filename</span><span class="k">}</span><span class="s2">"</span> <span class="k">in</span>
<span class="s1">''</span><span class="p">)</span> <span class="nb">local </span><span class="nv">_filename</span><span class="o">=</span><span class="si">$(</span><span class="nb">basename</span> <span class="k">${</span><span class="nv">file</span><span class="k">}</span><span class="si">)</span> <span class="p">;;</span>
<span class="k">*</span><span class="p">)</span> <span class="nb">local </span><span class="nv">_filename</span><span class="o">=</span><span class="k">${</span><span class="nv">filename</span><span class="k">}</span> <span class="p">;;</span>
<span class="k">esac</span>
<span class="k">else
</span><span class="nb">local </span><span class="nv">_content</span><span class="o">=</span><span class="k">${</span><span class="nv">file</span><span class="k">}</span>
<span class="k">case</span> <span class="s2">"</span><span class="k">${</span><span class="nv">filename</span><span class="k">}</span><span class="s2">"</span> <span class="k">in</span>
<span class="s1">''</span><span class="p">)</span> <span class="nb">local </span><span class="nv">_filename</span><span class="o">=</span><span class="s1">'stdin'</span> <span class="p">;;</span>
<span class="k">*</span><span class="p">)</span> <span class="nb">local </span><span class="nv">_filename</span><span class="o">=</span><span class="k">${</span><span class="nv">filename</span><span class="k">}</span> <span class="p">;;</span>
<span class="k">esac</span>
<span class="k">fi
case</span> <span class="s2">"</span><span class="k">${</span><span class="nv">_file</span><span class="k">}</span><span class="s2">"</span> <span class="k">in</span>
<span class="s1">''</span><span class="p">)</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/files.upload <span class="se">\</span>
<span class="k">${</span><span class="nv">channels</span>:+<span class="p"> --data-urlencode </span><span class="s2">"channels=</span><span class="k">${</span><span class="nv">channels</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">comment</span>:+<span class="p"> --data-urlencode </span><span class="s2">"initial_comment=</span><span class="k">${</span><span class="nv">comment</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">_content</span>:+<span class="p"> --data-urlencode </span><span class="s2">"content=</span><span class="k">${</span><span class="nv">_content</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">_filename</span>:+<span class="p"> --data-urlencode </span><span class="s2">"filename=</span><span class="k">${</span><span class="nv">_filename</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">filetype</span>:+<span class="p"> --data-urlencode </span><span class="s2">"filetype=</span><span class="k">${</span><span class="nv">filetype</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">title</span>:+<span class="p"> --data-urlencode </span><span class="s2">"title=</span><span class="k">${</span><span class="nv">title</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
<span class="p">;;</span>
<span class="k">*</span><span class="p">)</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/files.upload <span class="se">\</span>
<span class="k">${</span><span class="nv">channels</span>:+<span class="p"> --form-string </span><span class="s2">"channels=</span><span class="k">${</span><span class="nv">channels</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">comment</span>:+<span class="p"> --form </span><span class="s2">"initial_comment=</span><span class="k">${</span><span class="nv">comment</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">_file</span>:+<span class="p"> --form </span><span class="s2">"file=@</span><span class="k">${</span><span class="nv">_file</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">_filename</span>:+<span class="p"> --form </span><span class="s2">"filename=</span><span class="k">${</span><span class="nv">_filename</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">filetype</span>:+<span class="p"> --form </span><span class="s2">"filetype=</span><span class="k">${</span><span class="nv">filetype</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">title</span>:+<span class="p"> --form </span><span class="s2">"title=</span><span class="k">${</span><span class="nv">title</span><span class="k">}</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="nt">--form</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
<span class="p">;;</span>
<span class="k">esac</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>init<span class="o">()</span> <span class="o">{</span>
<span class="nb">echo</span> <span class="s2">"</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span> <span class="o">></span> <span class="s2">"</span><span class="k">${</span><span class="nv">etcdir</span><span class="k">}</span><span class="s2">/.slack"</span>
<span class="k">case</span> <span class="s2">"</span><span class="k">${</span><span class="p">?</span><span class="k">}</span><span class="s2">"</span> <span class="k">in
</span>0<span class="p">)</span> <span class="nb">echo</span> <span class="s1">'{"ok": true}'</span> | jq <span class="nt">-r</span> <span class="k">${</span><span class="nv">compact</span><span class="k">}</span> <span class="k">${</span><span class="nv">monochrome</span><span class="k">}</span> <span class="s2">"</span><span class="k">${</span><span class="nv">filter</span>:<span class="p">=.</span><span class="k">}</span><span class="s2">"</span> <span class="p">;;</span>
<span class="k">*</span><span class="p">)</span>
<span class="nb">echo</span> <span class="s1">'{"ok": false, "error": "not_writable"}'</span> |
jq <span class="nt">-r</span> <span class="k">${</span><span class="nv">compact</span><span class="k">}</span> <span class="k">${</span><span class="nv">monochrome</span><span class="k">}</span> <span class="s2">"</span><span class="k">${</span><span class="nv">filter</span>:<span class="p">=.</span><span class="k">}</span><span class="s2">"</span> <span class="p">;</span> <span class="k">return </span>1
<span class="p">;;</span>
<span class="k">esac</span>
<span class="o">}</span>
<span class="c"># Setting presence=auto + setActive works more consistently than just setActive.</span>
<span class="k">function </span>presenceactive<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg0</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/users.setPresence <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"presence=auto"</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
<span class="nb">local </span><span class="nv">msg1</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/users.setActive <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg0</span><span class="k">}</span><span class="s2">"</span> <span class="o">&&</span> jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg1</span><span class="k">}</span><span class="s2">"</span> <span class="o">></span>/dev/null 2>&1
<span class="o">}</span>
<span class="k">function </span>presenceaway<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/users.setPresence <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"presence=away"</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>reminderadd<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/reminders.add <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"text=</span><span class="k">${</span><span class="nv">text</span><span class="k">}</span><span class="s2">"</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"time=</span><span class="k">${</span><span class="nv">_time</span><span class="k">}</span><span class="s2">"</span> <span class="se">\</span>
<span class="k">${</span><span class="nv">user</span>:+<span class="p"> --data-urlencode </span><span class="s2">"user=</span><span class="si">$(</span>luser<span class="si">)</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>remindercomplete<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/reminders.complete <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"reminder=</span><span class="k">${</span><span class="nv">reminder</span><span class="k">}</span><span class="s2">"</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>reminderdelete<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/reminders.delete <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"reminder=</span><span class="k">${</span><span class="nv">reminder</span><span class="k">}</span><span class="s2">"</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>reminderinfo<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/reminders.info <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"reminder=</span><span class="k">${</span><span class="nv">reminder</span><span class="k">}</span><span class="s2">"</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>reminderlist<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/reminders.list <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>snoozeend<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/dnd.endSnooze <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>snoozeinfo<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/dnd.info <span class="se">\</span>
<span class="k">${</span><span class="nv">user</span>:+<span class="p"> --data-urlencode </span><span class="s2">"user=</span><span class="si">$(</span>luser<span class="si">)</span><span class="s2">"</span><span class="k">}</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>snoozestart<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/dnd.setSnooze <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"num_minutes=</span><span class="k">${</span><span class="nv">minutes</span><span class="k">}</span><span class="s2">"</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>statusclear<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/users.profile.set <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s1">'profile={"status_text":"", "status_emoji":""}'</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>statusedit<span class="o">()</span> <span class="o">{</span>
<span class="nb">local </span><span class="nv">msg</span><span class="o">=</span><span class="si">$(</span><span class="se">\</span>
curl <span class="nt">-s</span> <span class="nt">-X</span> POST https://slack.com/api/users.profile.set <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"profile={</span><span class="se">\"</span><span class="s2">status_text</span><span class="se">\"</span><span class="s2">:</span><span class="se">\"</span><span class="k">${</span><span class="nv">text</span><span class="k">}</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">status_emoji</span><span class="se">\"</span><span class="s2">:</span><span class="se">\"</span><span class="k">${</span><span class="nv">emoji</span><span class="k">}</span><span class="se">\"</span><span class="s2">}"</span> <span class="se">\</span>
<span class="nt">--data-urlencode</span> <span class="s2">"token=</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>
jqify <span class="s2">"</span><span class="k">${</span><span class="nv">msg</span><span class="k">}</span><span class="s2">"</span>
<span class="o">}</span>
<span class="k">function </span>version<span class="o">()</span> <span class="o">{</span>
<span class="nb">echo</span> <span class="s1">'0.18.0'</span>
<span class="o">}</span>
<span class="c"># COMMAND ROUTING #################################################################################</span>
<span class="k">case</span> <span class="s2">"</span><span class="k">${</span><span class="nv">cmd</span><span class="k">}${</span><span class="nv">sub</span><span class="k">}</span><span class="s2">"</span> <span class="k">in</span>
<span class="nt">--help</span><span class="p">|</span><span class="nt">-h</span><span class="p">)</span> <span class="nb">help</span> <span class="p">;</span> <span class="nb">exit </span>0 <span class="p">;;</span>
<span class="nt">--version</span><span class="p">|</span><span class="nt">-v</span><span class="p">)</span> version <span class="p">;</span> <span class="nb">exit </span>0 <span class="p">;;</span>
init<span class="p">)</span> init <span class="p">;</span> <span class="nb">exit</span> <span class="nv">$?</span> <span class="p">;;</span>
chatdelete|chatsend|chatupdate|<span class="se">\</span>
filedelete|fileinfo|filelist|fileupload|<span class="se">\</span>
presenceactive|presenceaway|<span class="se">\</span>
reminderadd|remindercomplete|reminderdelete|reminderinfo|reminderlist|<span class="se">\</span>
snoozeend|snoozeinfo|snoozestart|<span class="se">\</span>
statusclear|statusedit<span class="p">)</span>
<span class="k">if</span> <span class="o">[</span> <span class="nt">-z</span> <span class="s2">"</span><span class="k">${</span><span class="nv">token</span><span class="k">}</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span><span class="nb">echo</span> <span class="s1">'{"ok": false, "error": "not_inited"}'</span> |
jq <span class="nt">-r</span> <span class="k">${</span><span class="nv">compact</span><span class="k">}</span> <span class="k">${</span><span class="nv">monochrome</span><span class="k">}</span> <span class="s2">"</span><span class="k">${</span><span class="nv">filter</span>:<span class="p">=.</span><span class="k">}</span><span class="s2">"</span> <span class="p">;</span> <span class="nb">exit </span>1
<span class="k">fi</span>
<span class="k">${</span><span class="nv">cmd</span><span class="k">}${</span><span class="nv">sub</span><span class="k">}</span> <span class="p">;</span> <span class="nb">exit</span> <span class="nv">$?</span>
<span class="p">;;</span>
<span class="k">*</span><span class="p">)</span> <span class="nb">help</span> <span class="p">;</span> <span class="nb">exit </span>1 <span class="p">;;</span>
<span class="k">esac</span>
</code></pre>
<div class="highlight__panel js-actions-panel">
<div class="highlight__panel-action js-fullscreen-code-action">
<svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-on"><title>Enter fullscreen mode
Exit fullscreen mode