#!/usr/bin/env bash # # uguush - upload to uguu.se, teknik.io and 0x0.st # milisarge-milislinux ## CONFIGURATION # colors n="$(tput sgr0)" r="$(tput setaf 1)" g="$(tput setaf 2)" # screenshot utility fshot='maim --hidecursor' #fshot='scrot' sshot='maim -s --hidecursor' #sshot='scrot -s' wshot="maim -i $(xprop -root _NET_ACTIVE_WINDOW | grep -o '0x.*') --hidecursor" #wshot='scrot -s' # default delay secs='0' # image host usehost='uguu' hosts='uguu teknik 0x0 mixtape ptpb maxfile lewd' shorteners='waaai 0x0 ptpb' ## EXIT IF NO ARGUMENTS ARE FOUND if [ $# -lt 1 ]; then echo '`uguush` requires an argument. Run `uguush -h` for help.' exit 1 fi ## FUNCTIONS depends() { if ! type xclip &> /dev/null; then echo >&2 "xclip... [${r}YOK${n}]" exit 1 fi } usage() { cat <<-HELP uguush - upload to various file hosts Usage: $(basename "${0}") [options] Options: -d Delay the screenshot by the specified number of seconds. -f Take a fullscreen screenshot. -h Show this help message. -o Select a host to use. Can be uguu, teknik, 0x0, ptpb, maxfile, mixtape or lewd. -p Custom path to save the image to. Saves the image as "%Y-%m-%d %H-%M-%S.png". -s Take a selection screenshot. -u Upload a file. -x Do not notify dbus, update the log, or modify the clipboard. -w Take a screenshot of the current window. -S Select a shortener to use. Can be waaai, ptpb, or 0x0. -l Upload the provided url. HELP } delay() { for (( i=secs; i > 0; --i )) ; do echo "${i}..." sleep 1 done } screenshot() { if [ "${ful}" ]; then FILE="$(mktemp --suffix=.png)" ${fshot} "${FILE}" elif [ "${sel}" ]; then FILE="$(mktemp --suffix=.png)" ${sshot} "${FILE}" &> /dev/null if ! [ -s "${FILE}" ]; then $(rm "${FILE}" 2> /dev/null) exit fi elif [ "${win}" ]; then FILE="$(mktemp --suffix=.png)" ${wshot} "${FILE}" elif [ "${lnk}" ]; then if [ -f "/usr/share/mime/globs" ]; then urlext="$(curl -sf --head "${url}" | grep 'Content-Type: ' | head -1 | grep -Po '(?<=\ )[^\;]*')" urlext="$(echo "${urlext}" | sed -e "s/\\r//")" urlext="$(cat /usr/share/mime/globs | grep "${urlext}" | sort -r | head -1 | grep -Po '(?<=\.)[^\n]*')" else urlext="$(basename ${url})" urlext=${urlext#*.} fi FILE="$(mktemp --suffix=.${urlext})" $(curl -sf "${url}" > "${FILE}") fi } upload() { for (( i = 1; i <= 3; i++ )); do printf %s "Seçenek #${i}... " case "${usehost}" in teknik) upurl='https://api.teknik.io/v1/Upload' ;; 0x0) upurl='https://0x0.st/' ;; uguu) upurl='https://uguu.se/api.php?d=upload-tool' ;; ptpb) upurl='https://ptpb.pw/' ;; maxfile) upurl='https://maxfile.ro/static/upload.php' ;; mixtape) upurl='https://mixtape.moe/upload.php' ;; lewd) upurl='https://lewd.se/api.php?d=upload-tool' ;; esac case "${useshortener}" in waaai) shorturl='https://api.waa.ai/shorten' ;; 0x0) shorturl='http://0x0.st/' ;; ptpb) shorturl='https://ptpb.pw/u' esac if [ "${upurl}" = 'unsupported' ]; then echo "[${r}FAILED${n}]" echo "${usehost} doesn't support $([ "${https}" ] && echo HTTPS || echo HTTP)." exit 1 else if [ "${usehost}" = 'uguu' ]; then result="$(curl -sf -F file="@${FILE}" "${upurl}")" elif [ "${usehost}" = '0x0' ]; then result="$(curl -sf -F file="@${FILE}" "${upurl}")" elif [ "${usehost}" = 'teknik' ]; then result="$(curl -sf -F file="@${FILE}" "${upurl}")" result="${result##*url\":\"}" result="${result%%\"*}" elif [ "${usehost}" = 'mixtape' ]; then result="$(curl -sf -F files[]="@${FILE}" "${upurl}")" result="$(echo "${result}" | grep -Eo '"url":"[A-Za-z0-9]+.*",' | sed 's/"url":"//;s/",//')" result="$(echo "${result//\\\//\/}")" elif [ "${usehost}" = 'ptpb' ]; then result="$(curl -sf -F c="@${FILE}" "${upurl}")" result="${result##*url: }" result="${result%%$'\n'*}" elif [ "${usehost}" = 'maxfile' ]; then result="$(curl -sf -F files[]="@${FILE}" "${upurl}")" result="$(echo "${result}" | grep -Eo '"url":"[A-Za-z0-9]+.*",' | sed 's/"url":"//;s/",//')" result="$(echo "https://d.maxfile.ro/${result}")" elif [ "${usehost}" = 'lewd' ]; then result="$(curl -sf -F file="@${FILE}" "${upurl}")" fi if [ "${useshortener}" = 'waaai' ]; then tempresult="$(curl -sf -F url="${result}" "${shorturl}")" code="${tempresult##*short_code\":\"}" code="${code%%\"*}" result="https://waa.ai/${code}" extension="${tempresult##*extension\":}" extension="${extension%%\}*}" if [ "${extension}" != "false" ]; then extension=${extension##\"} extension=${extension%%\"} result="${result}.${extension}" fi elif [ "${useshortener}" = '0x0' ]; then result="$(curl -sf -F shorten="${result}" "${shorturl}")" elif [ "${useshortener}" = 'ptpb' ]; then result="$(curl -sf -F c="${result}" "${shorturl}")" fi fi if [ "${?}" = 0 ]; then if [ ! "${nocomm}" ]; then printf %s "${result}" | xclip -selection primary printf %s "${result}" | xclip -selection clipboard echo "$(date +"%D %R") | "${FILE}" | "${result}"" >> ~/.uguush.log notify-send 'uguu~' "${result}" fi echo "[${g}TM${n}]" echo "Dosyanız yüklendi: ${result}" # if we took a screenshot, remove the temporary file if [ -z "${upl}" ]; then rm "${FILE}" fi exit else echo "[${r}IPTAL${n}]" fi done } path() { if [ "${altpath}" = "true" ]; then DATE=$(date "+%Y-%m-%d %H-%M-%S") cp ${FILE} "$path/$DATE.png" fi } ## PARSE OPTIONS while getopts :d:fho:p:su:wxS:l: opt ;do case "${opt}" in d) # set delay value secs="${OPTARG}" ;; f) # fullscreen ful='true' ;; h) # print help usage exit 0 ;; o) # set host [[ "${hosts}" =~ ${OPTARG} ]] && usehost="${OPTARG}" || exit 1 ;; s) # take shot with selection sel='true' ;; u) # change $FILE to the specified file with -u upl='true' FILE="${OPTARG}" ;; w) # take shot of current window win='true' ;; x) # do not notify dbus, update log, or modify clipboard nocomm='true' ;; S) # set shortener [[ "${shorteners}" =~ ${OPTARG} ]] && useshortener="${OPTARG}" || exit 1 ;; l) # set url to upload lnk='true' url="${OPTARG}" ;; p) # set path to save file altpath='true' path="${OPTARG}" ;; *) # print help and EXIT_FAILURE usage exit 1 ;; esac done ## EXECUTE FUNCTIONS depends delay screenshot path upload # If the program doesn't exit at the for-loop, the upload failed. echo 'File was not uploaded, did you specify a valid filename?'