Skip to content

Instantly share code, notes, and snippets.

@adamdehaven
Last active December 6, 2017 14:00
Show Gist options
  • Save adamdehaven/5544774b4a908bff75d1f0c800cdd789 to your computer and use it in GitHub Desktop.
Save adamdehaven/5544774b4a908bff75d1f0c800cdd789 to your computer and use it in GitHub Desktop.
bash function to post to Slack
#/bin/bash
posttoslack() {
# Prompt user for Slack #channel or @username
while true; do
read -p "#
# Post to channel or username: " "CHANNEL"
case "$CHANNEL" in
[\#\@][[:lower:]-_]* ) eval SUCCESSMESSAGE="$CHANNEL"; eval CHANNEL='\"channel\":"\"$CHANNEL\"",'; break;;
* ) echo "# Please enter a valid channel or username.
# Example: #general or @adamdehaven";;
esac
done
# Prompt user for "send as" name
while true; do
read -p "# Post as: " USERNAME
case "$USERNAME" in
[[:alnum:][:space:][:punct:]]* ) eval USERNAME='\"username\":"\"$USERNAME\"",'; break;;
* ) echo "# Please enter a valid username (nothing offensive).";;
esac
done
# Prompt user for icon emoji
while true; do
read -p "# Icon Emoji: " EMOJI
case "$EMOJI" in
[:][[:lower:]]*[:] ) eval EMOJI='\"icon_emoji\":"\"$EMOJI\"",'; break;;
[nN][oO] ) eval EMOJI=""; break;;
* ) echo "# Please enter a valid emoji code. Example: :ghost:";;
esac
done
# Prompt user for icon emoji
while true; do
read -p "# Icon Url: " ICONURL
case "$ICONURL" in
[http][[:alnum:][:punct:]]* | [https][[:alnum:][:punct:]]* ) eval ICONURL='\"icon_url\":"\"$ICONURL\"",'; break;;
[nN][oO] ) eval ICONURL=""; break;;
* ) echo "# Please enter a valid url.";;
esac
done
# Prompt user for message
while true; do
read -r -p "# Message to post: " MESSAGE
case "$MESSAGE" in
[[:alnum:][:blank:][:punct:][:space:]]* ) eval MESSAGE='\"text\":"\"$MESSAGE\""'; break;;
* ) echo "# Please enter a valid message.";;
esac
done
apiResponse=$(curl -s -X POST -H 'Content-type: application/json' --data '{'"$CHANNEL""$USERNAME""$EMOJI""$ICONURL""$MESSAGE"'}' https://hooks.slack.com/services/<token>)
# Output response
if [ "$apiResponse" = "ok" ]; then
echo "# Posted to $SUCCESSMESSAGE"
else
echo "# API ERROR: $apiResponse"
fi
}
alias slack=posttoslack
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment