259 lines
		
	
	
	
		
			7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			259 lines
		
	
	
	
		
			7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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?'
 |