123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- #!/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 <path> Custom path to save the image to. Saves the image as "%Y-%m-%d %H-%M-%S.png".
- -s Take a selection screenshot.
- -u <file> 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 <url> 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?'
|