slack-cli VS muccadoro

Compare slack-cli vs muccadoro and see what are their differences.

slack-cli

:neckbeard: Powerful Slack CLI via pure bash. Rich messaging, uploads, posts, piping, oh my! (by rockymadden)

muccadoro

๐Ÿ… Pomodoro timer using figlet, cowsay, and optionally lolcat ๐Ÿฎ (by meribold)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
slack-cli muccadoro
3 1
1,039 96
- -
0.0 0.0
about 1 year ago about 3 years ago
Shell Shell
- Apache License 2.0
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

slack-cli

Posts with mentions or reviews of slack-cli. We have used some of these posts to build our list of alternatives and similar projects.
  • Slack from command line (macOS/linux)?
    1 project | /r/Slack | 3 May 2023
    I just found this project. There is a command to set your status.
  • Any way to integrate Slack with a Windows launcher program like Wox, Keypirinha, Powertoys Run, others? Quickly launch or send a message?
    1 project | /r/Slack | 19 Aug 2021
    I ended up using this slack-cli https://github.com/rockymadden/slack-cli Had to create a custom Slack app to get the authorization token and required installing jq into my windows bash environment.
  • Enviando mensagens no slack com shell script
    1 project | dev.to | 20 Mar 2021
    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

muccadoro

Posts with mentions or reviews of muccadoro. We have used some of these posts to build our list of alternatives and similar projects.

What are some alternatives?

When comparing slack-cli and muccadoro you can also consider the following projects:

slacktee - slacktee is a bash script that works like tee command. Instead of writing the standard input to files, slacktee posts it to Slack.

Color-Scripts - User contributed color scripts

slacker - Slack Bot Framework

pomo - Almost the simplest pomodoro timer for *nix (Linux / Unix)

listeningto - ๐ŸŽต Share your music in your Slack status.

bash-fuck - bash-fuck is a new command introduced to linux. You can install it on a bash shell and use it via the command "fuck".

asus-fan-control - Fan control for ASUS devices running Linux

tfw - The Unix way to keep a personal journal

BusinessCard - ๐Ÿ’ณ My curl-able business card

cross-platform-terminal-characters - All the characters that work on most terminals

timer - just another timer in svelte