#!/usr/bin/env bash Ver="Build 20220314-001-Alpha" ## 导入通用变量与函数 dir_shell=/ql/shell . $dir_shell/share.sh . $dir_shell/api.sh # 定义 json 数据查询工具 def_envs_tool() { for i in $@; do . $dir_shell/api.sh curl -s --noproxy "*" "http://0.0.0.0:5600/api/envs?searchValue=$i" -H "Authorization: Bearer $token" | jq .data | perl -pe "{s|^\[\|\]$||g; s|\n||g; s|\},$|\}\n|g}" done } def_envs_match() { def_envs_tool $1 | grep "$2" | jq -r .$3 | grep -v "null" } def_json_match() { if [[ -f $1 ]]; then if [[ $3 && $(cat "$1" | grep "$3") ]]; then cat "$1" | perl -pe '{s|^\[\|\]$||g; s|\n||g; s|\},$|\}\n|g}' | grep "$2" | jq -r .$3 | grep -v "null" else cat "$1" | perl -pe '{s|^\[\|\]$||g; s|\n||g; s|\},$|\}\n|g}' | grep "$2" | grep -v "null" fi fi } def_json_value() { if [[ -f $1 ]]; then if [[ $(cat "$1" | grep "$2") ]]; then cat "$1" | perl -pe "{s|^\[\|\]$||g; s|\n||g; s|\},$|\}\n|g}" | grep "$3" | jq -r .$2 | grep -v "null" fi fi } ## WxPusher 通知 API WxPusher_notify_api() { local appToken=$1 local uids=$2 local title=$3 local summary=$4 local content=$5 local frontcontent=$6 local summary=$(echo -e "$title\n\n$summary" | perl -pe '{s|(\")|'\\'\\1|g; s|\n|
|g}') [[ ${#summary} -ge 100 ]] && local summary="${summary:0:90} ……" local content=$(echo -e "$title\n\n$content" | perl -pe '{s|(\")|'\\'\\1|g; s|\n|
|g}') local url="http://wxpusher.zjiecode.com/api/send/message" local api=$( curl -s --noproxy "*" "$url" \ -X 'POST' \ -H "Content-Type: application/json" \ --data-raw "{\"appToken\":\"${appToken}\",\"content\":\"${content}\",\"summary\":\"${summary}\",\"contentType\":\"2\",\"uids\":[$uids]}" ) code=$(echo $api | jq -r .code) msg=$(echo $api | jq -r .msg) if [[ $code == 1000 ]]; then echo -e "#$frontcontent WxPusher 消息发送成功(${uids})\n" else [[ ! $msg ]] && msg="访问 API 超时" echo -e "#$frontcontent WxPusher 消息发送处理失败(${msg})\n" fi } ## 企业微信应用通知 API QYWX_notify_api() { local corpid="$(echo $1 | awk -F ',' '{print $1}')" local corpsecret="$(echo $1 | awk -F ',' '{print $2}')" local userId="$(echo $1 | awk -F ',' '{print $3}')" local agentid="$(echo $1 | awk -F ',' '{print $4}')" local thumb_media_id="$(echo $1 | awk -F ',' '{print $5}')" local author=$2 local title=$3 local digest=$4 local content=$5 local frontcontent=$6 local ACCESS_TOKEN local digest=$(echo -e "$digest" | perl -pe '{s|(\")|'\\'\\1|g}') local content=$(echo -e "$content" | perl -pe '{s|(\")|'\\'\\1|g; s|\n|
|g}') local url="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corpid}&corpsecret=${corpsecret}" local api=$( curl -s --noproxy "*" "$url" ) local code=$(echo $api | jq -r .errcode) local msg=$(echo $api | jq -r .errmsg) if [[ $code == 0 ]]; then ACCESS_TOKEN=$(echo $api | jq -r .access_token) local url="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${ACCESS_TOKEN}" if [[ $thumb_media_id ]]; then local api=$( curl -s --noproxy "*" "$url" \ -X 'POST' \ -H "Content-Type: application/json" \ --data-raw "{\"touser\":\"$userId\",\"msgtype\":\"mpnews\",\"agentid\":\"$agentid\",\"mpnews\":{\"articles\":[{\"title\":\"$title\",\"thumb_media_id\":\"$thumb_media_id\",\"author\":\"$author\",\"content\":\"$content\",\"digest\":\"$digest\"}]}}" ) else local api=$( curl -s --noproxy "*" "$url" \ -X 'POST' \ -H "Content-Type: application/json" \ --data-raw "{\"touser\":\"$userId\",\"msgtype\":\"mpnews\",\"agentid\":\"$agentid\",\"mpnews\":{\"articles\":[{\"title\":\"$title\",\"thumb_media_id\":\"$thumb_media_id\",\"author\":\"$author\",\"content\":\"$content\",\"digest\":\"$digest\"}]}}" ) fi code=$(echo $api | jq -r .errcode) msg=$(echo $api | jq -r .errmsg) if [[ $code == 0 ]]; then echo -e "#$frontcontent 企业微信应用消息发送成功\n" else [[ ! $msg ]] && msg="访问 API 超时" echo -e "#$frontcontent 企业微信应用消息发送处理失败(${msg})\n" fi fi } ## pushplus 通知 API pushplus_notify_api() { local token=$1 local topic=$2 local title=$3 local content=$4 local frontcontent=$5 local content=$(echo -e "$content" | perl -pe '{s|(\")|'\\'\\1|g; s|\n|
|g}') local url="http://www.pushplus.plus/send" local api=$( curl -s --noproxy "*" "$url" \ -X 'POST' \ -H "Content-Type: application/json" \ --data-raw "{\"token\":\"$token\",\"title\":\"$title\",\"content\":\"$content\"}" ) code=$(echo $api | jq -r .code) msg=$(echo $api | jq -r .msg) if [[ $code == 200 ]]; then echo -e "#$frontcontent pushplus 消息发送成功\n" else if [[ $code == 500 ]]; then msg="服务器宕机" fi [[ ! $msg ]] && msg="访问 API 超时" echo -e "#$frontcontent pushplus 消息发送处理失败(${msg})\n" fi } ## hxtrip pushplus 通知 API hxtrip_pushplus_notify_api() { local token=$1 local topic=$2 local title=$3 local content=$4 local frontcontent=$5 local content=$(echo -e "$content" | perl -pe '{s|(\")|'\\'\\1|g; s|\n|
|g}') local url="http://pushplus.hxtrip.com/send" local api=$( curl -s --noproxy "*" "$url" \ -X 'POST' \ -H "Content-Type: application/json" \ --data-raw "{\"token\":\"$token\",\"title\":\"$title\",\"content\":\"$content\"}" ) code=$(echo $api | perl -pe '{s|.*([\d]+).*|\1|g}') msg=$(echo $api | perl -pe '{s|.*([\S]+).*|\1|g}') if [[ $code == 200 ]]; then echo -e "#$frontcontent hxtrip pushplus 消息发送成功\n" else if [[ $code == 500 ]]; then msg="服务器宕机" fi [[ ! $msg ]] && msg="访问 API 超时" echo -e "#$frontcontent hxtrip pushplus 消息发送处理失败(${msg})\n" fi } Notify_to_Public() { local title summary content title=$1 summary=$2 content=$3 if [[ ${title} ]]; then echo -e "# 公告标题:${title}" else echo -e "# 未填写公告标题" fi if [[ ${summary} ]]; then echo -e "# 公告摘要:${summary}" else echo -e "# 未填写公告摘要" fi if [[ ${content} ]]; then echo -e "# 公告正文:${content}" else echo -e "# 未填写公告正文" fi echo -e "" # WxPusher 公告 if [[ $Filter_Disabled_Variable = true ]]; then if [[ $WxPusher_UID_src = 1 ]]; then WxPusher_UID_Array=($(def_envs_match JD_COOKIE '"status": 0' remarks | grep -Eo 'UID_\w{28}')) elif [[ $WxPusher_UID_src = 2 ]]; then WxPusher_UID_Array=($(def_json_match "$dir_scripts/CK_WxPusherUid.json" '"status": 0' Uid | grep -Eo 'UID_\w{28}')) fi elif [[ $Filter_Disabled_Variable = false ]]; then if [[ $WxPusher_UID_src = 1 ]]; then WxPusher_UID_Array=($(def_envs_tool JD_COOKIE remarks | grep -Eo 'UID_\w{28}')) elif [[ $WxPusher_UID_src = 2 ]]; then WxPusher_UID_Array=($(def_json_value "$dir_scripts/CK_WxPusherUid.json" Uid | grep -Eo 'UID_\w{28}')) fi fi if [[ $(echo $WP_APP_TOKEN_ONE | grep -Eo 'AT_(\w{32})') && ${#WxPusher_UID_Array[@]} -gt 0 ]]; then uids="$(echo "${WxPusher_UID_Array[*]}" | perl -pe '{s|^|\"|; s| |\",\"|g; s|$|\"|}')" WxPusher_notify_api "$WP_APP_TOKEN_ONE" "$uids" "$title" "$summary" "$content" else if [[ ! $(echo $WP_APP_TOKEN_ONE | grep -Eo 'AT_(\w{32})') ]]; then echo -e "# 未填写 WxPusher 应用的 token (WP_APP_TOKEN_ONE),请检查后重试!" fi if [[ ${#WxPusher_UID_Array[@]} -eq 0 ]]; then echo -e "# 未找到 WxPusher UID,请检查后重试!" fi fi # 企业微信公告 if [[ $QYWX_AM ]]; then QYWX_notify_api "$QYWX_AM" "Shell版公告工具notify2" "$title" "$summary" "$content" else echo -e "# 未填写企业微信应用的 token (QYWX_AM),请检查后重试!" fi # pushplus 公告 if [[ $PUSH_PLUS_TOKEN && $PUSH_PLUS_USER ]]; then pushplus_notify_api "$PUSH_PLUS_TOKEN" "$PUSH_PLUS_USER" "$title" "$content" else if [[ ! $PUSH_PLUS_TOKEN ]]; then echo -e "# 未填写 pushplus 的 token (PUSH_PLUS_TOKEN),请检查后重试!" fi if [[ ! $PUSH_PLUS_USER ]]; then echo -e "# 未填写 hxtrip pushplus 的群组编码 (PUSH_PLUS_USER),请检查后重试!" fi fi # hxtrip pushplus 公告 if [[ $PUSH_PLUS_TOKEN_hxtrip && $PUSH_PLUS_USER_hxtrip ]]; then hxtrip_pushplus_notify_api "$PUSH_PLUS_TOKEN_hxtrip" "$PUSH_PLUS_USER_hxtrip" "$title" "$content" else if [[ ! $PUSH_PLUS_TOKEN_hxtrip ]]; then echo -e "# 未填写 hxtrip pushplus 的 token (PUSH_PLUS_TOKEN),请检查后重试!" fi if [[ ! $PUSH_PLUS_USER_hxtrip ]]; then echo -e "# 未填写 hxtrip pushplus 的群组编码 (PUSH_PLUS_USER_hxtrip),请检查后重试!" fi fi } echo -e "# 当前版本:$Ver\n" Notify_to_Public "${NOTICE_TITLE}" "${NOTICE_SUMMARY}" "${NOTICE_CONTENT}"