fix: 紧急重构态势感知入库链路,引入交互式 [存档] 按钮,彻底解决 TG API 消息监听死锁

This commit is contained in:
hotyue
2026-04-24 15:06:02 +00:00
parent 05b1e21bba
commit e9d5023263
2 changed files with 34 additions and 24 deletions

View File

@@ -176,18 +176,30 @@ _👉 [🔍 详细信用图谱直达 (Scamalytics)](https://scamalytics.com/ip/$
SAFE_SCAM_SCORE=$(echo "$SCAM_SCORE" | tr -cd '0-9')
[ -z "$SAFE_SCAM_SCORE" ] && SAFE_SCAM_SCORE="0"
# [v4.0.2 扩容] 提取 Google(基于YouTube) 和 ChatGPT 的原生状态,供中枢态势感知使用
# [v4.0.2 扩容] 提取 Google(基于YouTube) 和 ChatGPT 的原生状态
RAW_GOOG_STAT="${RAW_YT_REG:-$RAW_YT_STAT}"
[ -z "$RAW_GOOG_STAT" ] && RAW_GOOG_STAT="未知"
RAW_GPT_STAT=$(echo "$JSON_DATA" | jq -r '.Media.ChatGPT.Status // "未知"' 2>/dev/null)
REPORT="$REPORT
# 截取前2个中文字符(控制在64字节内),构建内联按钮数据
S_GOOG=$(echo "$RAW_GOOG_STAT" | awk '{print substr($0,1,2)}')
S_NF=$(echo "$RAW_NF_STAT" | awk '{print substr($0,1,2)}')
S_GPT=$(echo "$RAW_GPT_STAT" | awk '{print substr($0,1,2)}')
CB_DATA="svq|${NODE_NAME}|${SAFE_SCAM_SCORE}|${S_GOOG}|${S_NF}|${S_GPT}"
\`[SYSTEM_REPORT]|QUALITY|${NODE_NAME}|${SAFE_SCAM_SCORE}|${RAW_GOOG_STAT}|${RAW_NF_STAT}|${RAW_GPT_STAT}\`"
# 8. 挂载内联键盘并直送指挥部
JSON_PAYLOAD=$(jq -n \
--arg cid "$CHAT_ID" \
--arg txt "$REPORT" \
--arg cb "$CB_DATA" \
'{
chat_id: $cid,
text: $txt,
parse_mode: "Markdown",
disable_web_page_preview: true,
reply_markup: {
inline_keyboard: [[{text: "📥 将本次体检录入趋势库", callback_data: $cb}]]
}
}')
# 8. 直送指挥部
curl -s -X POST "${TG_API_URL}" \
-d "chat_id=${CHAT_ID}" \
-d "parse_mode=Markdown" \
-d "disable_web_page_preview=true" \
-d "text=${REPORT}" >/dev/null
curl -s -X POST "${TG_API_URL}" -H "Content-Type: application/json" -d "$JSON_PAYLOAD" >/dev/null

View File

@@ -111,24 +111,22 @@ while true; do
CHAT_ID=$(echo "$UPDATE" | jq -r '.message.chat.id // .callback_query.message.chat.id')
TEXT=$(echo "$UPDATE" | jq -r '.message.text // .callback_query.data')
# ================== [v4.0.2 核心: 深海声呐暗号拦截与落盘] ==================
if [[ "$TEXT" == *"[SYSTEM_REPORT]|QUALITY|"* ]]; then
# 格式: [SYSTEM_REPORT]|QUALITY|NODE_NAME|SCORE|GOOG_STAT|NF_STAT|GPT_STAT
REPORT_DATA=$(echo "$TEXT" | grep -o "\[SYSTEM_REPORT\].*")
NODE_ID=$(echo "$REPORT_DATA" | cut -d'|' -f3 | tr -cd 'a-zA-Z0-9_.-')
SCORE=$(echo "$REPORT_DATA" | cut -d'|' -f4 | tr -cd '0-9')
# [v4.0.2 修复] 放弃极端的字母白名单,改用黑名单过滤引号和分号,完美保留中文状态
GOOG_ST=$(echo "$REPORT_DATA" | cut -d'|' -f5 | tr -d "\r\n;\"'\`")
NF_ST=$(echo "$REPORT_DATA" | cut -d'|' -f6 | tr -d "\r\n;\"'\`")
GPT_ST=$(echo "$REPORT_DATA" | cut -d'|' -f7 | tr -d "\r\n;\"'\`")
[ -z "$GOOG_ST" ] && GOOG_ST="Unknown"
[ -z "$NF_ST" ] && NF_ST="Unknown"
[ -z "$GPT_ST" ] && GPT_ST="Unknown"
# ================== [v4.0.2 核心: 态势感知按钮一键入库] ==================
if [[ "$TEXT" == "svq|"* ]]; then
# 格式: svq|NODE_NAME|SCORE|GOOG|NF|GPT
IFS='|' read -r MAGIC NODE_ID SCORE GOOG_ST NF_ST GPT_ST <<< "$TEXT"
CHAT_ID=$(echo "$CHAT_ID" | tr -cd '0-9-')
if [ -n "$NODE_ID" ] && [ -n "$SCORE" ]; then
# 1. 写入 SQLite
db_exec "INSERT INTO ip_trend_log (node_name, scam_score, goog_status, nf_status, gpt_status) VALUES ('$NODE_ID', '$SCORE', '$GOOG_ST', '$NF_ST', '$GPT_ST');"
# 2. 无损修改原消息:移除入库按钮,展示绿勾状态 (不破坏 Markdown 战报原文)
if [ -n "$MSG_ID" ]; then
curl -s --connect-timeout 5 -m 10 -X POST "https://api.telegram.org/bot${TG_TOKEN}/editMessageReplyMarkup" \
-H "Content-Type: application/json" \
-d "{\"chat_id\":\"${CHAT_ID}\",\"message_id\":\"${MSG_ID}\",\"reply_markup\":{\"inline_keyboard\":[[{\"text\":\"✅ 此报告已存档\",\"callback_data\":\"ignore\"}]]}}" > /dev/null
fi
fi
continue
fi