#!/bin/bash # ========================================================== # 脚本名称: tg_report.sh (Telegram 每日战报模块 V6.0 动态拼装版) # 核心功能: 适配 Feature Flag 架构,按需展示 Google/Trust 独立统计数据 # ========================================================== INSTALL_DIR="/opt/ip_sentinel" CONFIG_FILE="${INSTALL_DIR}/config.conf" LOG_FILE="${INSTALL_DIR}/logs/sentinel.log" # 1. 加载配置并自检 if [ ! -f "$CONFIG_FILE" ]; then exit 1; fi source "$CONFIG_FILE" if [ -z "$TG_TOKEN" ] || [ -z "$CHAT_ID" ]; then echo "⚠️ 未配置 Telegram 机器人参数,取消播报。" exit 0 fi # 2. 节点元数据抓取 (v3.0.1修复: 严格使用配置中的协议探测出口与多节点容灾) NODE_NAME=$(hostname | cut -c 1-15) # 多节点容灾探测 CURRENT_IP=$( (curl -${IP_PREF:-4} -s -m 5 api.ip.sb/ip || curl -${IP_PREF:-4} -s -m 5 ifconfig.me) 2>/dev/null | tr -d '[:space:]' ) # 强制兜底:如果所有外部 API 都挂了,直接使用本地强行锁定的 BIND_IP [ -z "$CURRENT_IP" ] && CURRENT_IP="$BIND_IP" # 为可能获取到的 IPv6 自动添加方括号护甲 [[ "$CURRENT_IP" == *":"* ]] && [[ "$CURRENT_IP" != *"["* ]] && CURRENT_IP="[${CURRENT_IP}]" # 智能判断 IP 属性 ISP_INFO=$(curl -${IP_PREF:-4} -s -m 5 api.ip.sb/geoip | jq -r '.organization' 2>/dev/null) [ -z "$ISP_INFO" ] || [ "$ISP_INFO" == "null" ] && ISP_INFO="未知 ISP" if [[ "$ISP_INFO" == *"Cloudflare"* ]]; then IP_TYPE="Cloudflare Warp 🛰️" else IP_TYPE="$ISP_INFO 🏠" fi # 动态国旗 case "$REGION_CODE" in "JP") FLAG="🇯🇵" ;; "US") FLAG="🇺🇸" ;; "DE") FLAG="🇩🇪" ;; "SG") FLAG="🇸🇬" ;; "HK") FLAG="🇭🇰" ;; "GB"|"UK") FLAG="🇬🇧" ;; *) FLAG="🌐" ;; esac # 3. 截取过去 24 小时的日志 LOG_CONTENT=$(find "$LOG_FILE" -mtime -1 -exec cat {} \; 2>/dev/null) if [ -z "$LOG_CONTENT" ]; then read -r -d '' MSG <> "${INSTALL_DIR}/logs/error.log" else echo "✅ 战报推送成功!" fi