#!/bin/bash { read -r _TELEGRAM__BOT_TOKEN; read -r _TELEGRAM__USER_ID; } < "${HOME}/.secrets/telegram.secret" declare -A _TELEGRAM__PARSE_MODES=( [md]=MarkdownV2 [html]=HTML ) declare -A tg__params=() tg__code=0 tg::send_message() { declare -a curl_params=() for name in "${!tg__params[@]}"; do curl_params+=("--data-urlencode" "$name=${tg__params[$name]}") done while IFS= read -d '' -n 4096 -r chunk; do [ ${tg__code} -eq 1 ] && txt=(--data-urlencode "text=
${chunk}
") || txt=(--data-urlencode "text=${chunk}") curl -X POST "https://api.telegram.org/bot${_TELEGRAM__BOT_TOKEN}/sendMessage" \ --data-urlencode "chat_id=$_TELEGRAM__USER_ID" \ "${curl_params[@]}" \ "${txt[@]}" done [ -n "$chunk" ] && { [ ${tg__code} -eq 1 ] && txt=(--data-urlencode "text=
${chunk}
") || txt=(--data-urlencode "text=${chunk}") curl -X POST "https://api.telegram.org/bot${_TELEGRAM__BOT_TOKEN}/sendMessage" \ --data-urlencode "chat_id=$_TELEGRAM__USER_ID" \ "${curl_params[@]}" \ "${txt[@]}" } } (return 0 2>/dev/null) && return help() { echo "ABSTRACT" echo " Read data from fd0 and send it to Telegram." echo echo "USAGE" echo " tg [PARAMS]" echo echo "PARAMS" echo " -c, --code Wrap text with
 tags"
    echo "    -h, --help                 Print this message"
    echo "    -p, --parse-mode           Telegram parse mode (html, md)"
    echo "    -r, --print-response       Don't silence Telegram response"
    echo "        --tg      Set POST parameter with NAME to VALUE"
}


die() {
    echo "[ERROR] $1" >&2
    echo
    help
    exit 1
}


main() {
    while [ $# -gt 0 ]; do
        case "$1" in
            '-h'|'--help') help; exit 0 ;;
            '-p'|'--parse-mode') shift; tg__params[parse_mode]="${_TELEGRAM__PARSE_MODES[$1]}" ;;
            '-c'|'--code') tg__code=1; tg__params[parse_mode]='HTML' ;;
            '-r'|'--print-response') print_response=1 ;;
            '--tg'*) tg__params["${1#--tg}"]="$2"; shift ;;
        esac
        shift
    done

    [ -t 0 ] && die "Can't run on stdin!"

    resp="$(tg::send_message "$@" 2>/dev/null)"

    [ -n "${print_response:+_}" ] && echo "$resp"

    [ "$(jq .ok <<<"$resp")" = "true" ] || jq <<< "$resp" >&2
}

main "$@"