From d73c3154f938a28a286f43f1cfe9706521ead668 Mon Sep 17 00:00:00 2001 From: hotyue <52734432+hotyue@users.noreply.github.com> Date: Fri, 24 Apr 2026 12:29:54 +0000 Subject: [PATCH] =?UTF-8?q?feat(agent):=20=E4=B8=B0=E5=AF=8C=E6=B7=B1?= =?UTF-8?q?=E6=B5=B7=E5=A3=B0=E5=91=90=E6=88=98=E6=8A=A5=EF=BC=8C=E5=BA=95?= =?UTF-8?q?=E9=83=A8=E8=BF=BD=E5=8A=A0=E6=8E=A2=E9=92=88=E5=BC=95=E6=93=8E?= =?UTF-8?q?=E7=9A=84=E8=BF=90=E8=A1=8C=E6=97=B6=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?=E4=B8=8E=E6=83=85=E6=8A=A5=E7=94=9F=E6=88=90=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=88=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/mod_quality.sh | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/core/mod_quality.sh b/core/mod_quality.sh index 9c070bc..7a0bdf4 100755 --- a/core/mod_quality.sh +++ b/core/mod_quality.sh @@ -51,6 +51,13 @@ IPQS_SCORE=$(echo "$JSON_DATA" | jq -r '.Score.IPQS // "0"' 2>/dev/null) IP2L_SCORE=$(echo "$JSON_DATA" | jq -r '.Score.IP2LOCATION // "0"' 2>/dev/null) FRAUD_RISK=$(echo "$JSON_DATA" | jq -r '.Score.ipapi // "0%"' 2>/dev/null) +# [修复] 清洗 API 阻断返回的 null 值,保障面板整洁 +[ "$SCAM_SCORE" == "null" ] || [ -z "$SCAM_SCORE" ] && SCAM_SCORE="N/A" +[ "$ABUSE_SCORE" == "null" ] || [ -z "$ABUSE_SCORE" ] && ABUSE_SCORE="N/A" +[ "$IPQS_SCORE" == "null" ] || [ -z "$IPQS_SCORE" ] && IPQS_SCORE="N/A" +[ "$IP2L_SCORE" == "null" ] || [ -z "$IP2L_SCORE" ] && IP2L_SCORE="N/A" +[ "$FRAUD_RISK" == "null" ] || [ -z "$FRAUD_RISK" ] && FRAUD_RISK="N/A" + # 代理/VPN 特征探针 (只要有一家认为是代理,就亮黄灯) IS_PROXY="🟢 干净" if echo "$JSON_DATA" | jq -e '.Factor.Proxy | to_entries | any(.value == true)' >/dev/null 2>&1 || \ @@ -65,11 +72,15 @@ parse_media() { local type=$(echo "$JSON_DATA" | jq -r ".Media.$1.Type // \"\"" 2>/dev/null) if [[ "$status" == *"解锁"* ]]; then - echo "🟢 $reg ($type)" - elif [[ "$status" == *"屏蔽"* ]] || [[ "$status" == *"失败"* ]]; then - echo "🔴 屏蔽" + echo "🟢 ${reg} (${type})" + elif [[ "$status" == *"仅"* ]] || [[ "$status" == *"机房"* ]] || [[ "$status" == *"待支持"* ]]; then + # 捕捉 Netflix "仅自制"、ChatGPT "仅网页"、TikTok "机房" 等半残状态 + echo "🟡 ${status} ${reg}" + elif [[ "$status" == *"屏蔽"* ]] || [[ "$status" == *"失败"* ]] || [[ "$status" == *"中国"* ]] || [[ "$status" == *"禁"* ]]; then + # 捕捉 "屏蔽"、"失败"、"禁会员"、"中国"(送中) + echo "🔴 ${status}" else - echo "⚪ $status" + echo "⚪ ${status}" fi } @@ -93,11 +104,16 @@ DNS_MARK=$(echo "$JSON_DATA" | jq -r '.Mail.DNSBlacklist.Marked // "0"' 2>/dev/n # 6. “送中” 逻辑判定 WARNING_MSG="" -if [[ "$RAW_YT_REG" == *"[CN]"* ]] || [[ "$RAW_YT_STAT" == *"China"* ]]; then +# [修复] 官方 JSON 已经去除了方括号,直接匹配 CN 或者状态包含中国 +if [[ "$RAW_YT_REG" == "CN" ]] || [[ "$RAW_YT_STAT" == *"中国"* ]]; then WARNING_MSG="%0A🚨 **[高危] 该节点已被 Google 判定为中国大陆 (送中)!**%0A" fi # 7. 组装情报级 Markdown 战报 +# 提取本地运行态版本与生成时间戳 +LOCAL_VER="${AGENT_VERSION:-未知}" +CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S") + REPORT="🎯 *IP-Sentinel 深海声呐报告* 📍 节点:\`${NODE_ALIAS}\` 🌐 地址:\`${IP_ADDR}\`${WARNING_MSG} @@ -129,7 +145,15 @@ REPORT="🎯 *IP-Sentinel 深海声呐报告* _👉 [🔍 详细信用图谱直达 (Scamalytics)](https://scamalytics.com/ip/${TARGET_IP})_ -\`[SYSTEM_REPORT]|QUALITY|${NODE_NAME}|${SCAM_SCORE}|${RAW_NF_STAT}\`" +⏱️ \`${CURRENT_TIME}\` | ⚙️ \`v${LOCAL_VER}\`" + +# [修复] 剥离显示层的 N/A,确保传给 Master 趋势数据库的是纯数字 (无效则记为0) +SAFE_SCAM_SCORE=$(echo "$SCAM_SCORE" | tr -cd '0-9') +[ -z "$SAFE_SCAM_SCORE" ] && SAFE_SCAM_SCORE="0" + +REPORT="$REPORT + +\`[SYSTEM_REPORT]|QUALITY|${NODE_NAME}|${SAFE_SCAM_SCORE}|${RAW_NF_STAT}\`" # 8. 直送指挥部 curl -s -X POST "${TG_API_URL}" \