260 lines
7.0 KiB
Plaintext
260 lines
7.0 KiB
Plaintext
|
#!/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?'
|