Skip to content

Instantly share code, notes, and snippets.

@monsterxcn
Last active October 23, 2022 10:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save monsterxcn/1ea6301df2b707ec0f8fc37058c42ff7 to your computer and use it in GitHub Desktop.
Save monsterxcn/1ea6301df2b707ec0f8fc37058c42ff7 to your computer and use it in GitHub Desktop.
on_download_complete notify bash script for Telegram & AList
#!/usr/bin/env bash
# Add to https://github.com/P3TERX/aria2.conf/blob/master/upload.sh
SENDMSG() {
FILE_LOCAL_PATH=$1
FILE_REMOTE_PATH=$2
ALIST_ROOT="cloud.monsterx.cn"
ALIST_DIR="/OneDrive/Aria"
ALIST_NAME="admin"
ALIST_PASS="A1b2C3d4"
CHAT_ID=1044444444
BOT_TOKEN="1585888888:AAAAAAA_cWwWwWwWwXxXxXxXxXyYyYyYyYy"
FILE_NAME=${FILE_LOCAL_PATH##*/}
if [[ "${FILE_NAME,,}" =~ .*torrent$ ]] ; then
PUSH_MSG="pass"
else
MSG_URI=$(echo -n ${FILE_REMOTE_PATH#*Aria} | jq -sRr @uri | sed "s/%EF%BC%9A/%E2%80%9B%EF%BC%9A/g" | sed "s/%2F/\//g")
LOGIN_RT=$(curl 'https://'${ALIST_ROOT}'/api/auth/login' \
-H 'content-type: application/json;charset=UTF-8' \
--data-raw '{"username":"'${ALIST_NAME}'","password":"'${ALIST_PASS}'","otp_code":""}' \
--compressed --silent | jq -r ".data.token")
if [[ "$LOGIN_RT" == "null" ]] ; then
echo "login failed"
PUSH_MSG='<b>Aria2 文件离线下载完成</b>:<a href=\"https://'${ALIST_ROOT}${ALIST_DIR}'\">'${FILE_NAME}'</a>\n* <i>AList <b>登录</b>失败,请手动刷新子目录</i> <code>'${MSG_URI}'</code>'
else
echo "login success"
ORIGIN_PARTS=${FILE_REMOTE_PATH#*Aria}
IFS='/' read -ra DIR_PARTS <<< "$ORIGIN_PARTS"
REFRESH_DIRS=("$ALIST_DIR")
for DIR_PART in "${DIR_PARTS[@]}"
do
if [[ "${DIR_PART}" != "" ]]; then
REFRESH_DIRS=(${REFRESH_DIRS[@]} "${REFRESH_DIRS[-1]}/${DIR_PART}")
fi
done
for REFRESH_DIR in "${REFRESH_DIRS[@]}"
do
echo "$REFRESH_DIR"
RETRY_CNT=3
while [ $RETRY_CNT -gt 0 ]
do
REFRESH_RT=$(curl 'https://'${ALIST_ROOT}'/api/fs/list' \
-H 'authorization: '${LOGIN_RT} \
-H 'content-type: application/json;charset=UTF-8' \
--data-raw '{"path":"'${REFRESH_DIR}'","password":"","page":1,"per_page":0,"refresh":true}' \
--connect-timeout 30 --max-time 60 --compressed --silent | jq -r ".message")
if [[ "$REFRESH_RT" != "success" ]] ; then
RETRY_CNT=$(( $RETRY_CNT - 1 ))
else
break
fi
done
done
if [[ "$REFRESH_RT" != "success" ]] ; then
echo "update failed"
PUSH_MSG='<b>Aria2 文件离线下载完成</b>:<a href=\"https://'${ALIST_ROOT}${ALIST_DIR}'\">'${FILE_NAME}'</a>\n<i>* AList <b>刷新</b>失败,请手动刷新子目录</i> <code>'${MSG_URI}'</code>'
else
echo "update success"
if [[ "${FILE_NAME,,}" =~ .*(jpe?g|png|gif|webp)$ ]] ; then
PUSH_MSG='<b>Aria2 文件离线下载完成</b>:<a href=\"https://'${ALIST_ROOT}${ALIST_DIR}${MSG_URI}'\">'${FILE_NAME}'</a>\nhttps://'${ALIST_ROOT}'/d'${ALIST_DIR}${MSG_URI}'/'${FILE_NAME}
else
PUSH_MSG='<b>Aria2 文件离线下载完成</b>:<a href=\"https://'${ALIST_ROOT}${ALIST_DIR}${MSG_URI}'\">'${FILE_NAME}'</a>'
fi
fi
fi
fi
if [[ "${PUSH_MSG}" == "pass" ]] ; then
echo "no need to push"
else
CURL_DATA='{"chat_id": '${CHAT_ID}',"text": "'${PUSH_MSG}'","parse_mode": "HTML","disable_web_page_preview": false}'
curl -s -X POST 'https://api.telegram.org/bot'${BOT_TOKEN}'/sendMessage' \
-H "Content-Type: application/json;charset=UTF-8" -d "$CURL_DATA"
fi
}
# SENDMSG "${LOCAL_PATH}" "${REMOTE_PATH}"
SENDMSG "/downloads/Bot/Pixiv/84308202_p1.jpg" "MicrosoftStorage:/Aria/Bot/Pixiv"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment