#!/bin/bash # ========================================= # 💡 LanYu VPS FlowBot 一键安装多功能脚本 # 作者邮箱:admin@lanyu.org # 版权所有 © LanYu Network 2025 # ========================================= CONFIG_DIR="/root/.flowbot" CONFIG_FILE="${CONFIG_DIR}/config.env" SERVICE_FILE="/etc/systemd/system/tg-flow-poll.service" BOT_SCRIPT="/root/tg_flow_bot.sh" # ------------------------- # 主菜单 # ------------------------- show_main_menu() { clear echo "------------------------------------" echo "🌊 蓝宇流量监控助手(FlowBot)v1.0" echo "------------------------------------" echo "1️⃣ 安装 / 重新安装" echo "2️⃣ 查询当前流量" echo "3️⃣ 校准流量偏差" echo "4️⃣ 重启 Telegram 机器人" echo "5️⃣ 卸载全部文件和服务" echo "6️⃣ 关于(作者:admin@lanyu.org)" echo "------------------------------------" read -p "请选择功能编号 [1-6]: " choice case $choice in 1) install_bot ;; 2) query_flow ;; 3) calibrate_offset ;; 4) restart_bot ;; 5) uninstall_bot ;; 6) about_info ;; *) echo "❌ 无效选项,请重试。"; sleep 2; show_main_menu ;; esac } # ------------------------- # 安装 / 重新安装 # ------------------------- install_bot() { echo "🚀 开始安装蓝宇流量监控程序" read -p "请输入 Telegram BOT_TOKEN: " BOT_TOKEN read -p "请输入 Telegram CHAT_ID: " CHAT_ID read -p "请输入服务器名称(如 🇸🇬 新加坡阿里云): " SERVER_NAME read -p "请输入网卡名称(默认 ens3): " IFACE read -p "请输入每月出站流量上限(GB): " LIMIT read -p "请输入每日推送时间(小时 0-23): " PUSH_HOUR IFACE=${IFACE:-ens3} mkdir -p $CONFIG_DIR cat > "$CONFIG_FILE" < "$BOT_SCRIPT" <<'EOF' #!/bin/bash source /root/.flowbot/config.env API="https://api.telegram.org/bot${BOT_TOKEN}" convert_to_gb() { VALUE=$1; UNIT=$2 case $UNIT in KiB) GB=$(echo "scale=4; $VALUE/1048576" | bc) ;; MiB) GB=$(echo "scale=4; $VALUE/1024" | bc) ;; GiB) GB=$VALUE ;; *) GB=0 ;; esac echo "$GB" } report_usage() { TX_SUM=0 while read -r iface rx_unit rx tx_unit tx _; do if [[ "$iface" =~ ^($IFACE|he-ipv6): ]]; then TX_GB=$(convert_to_gb "$tx" "$tx_unit") TX_SUM=$(echo "$TX_SUM + $TX_GB" | bc) fi done < <(vnstat --oneline | awk -F';' '{print $1,$3,$4,$7,$8}') OFFSET=0 [[ -f /root/.flowbot/offset.txt ]] && OFFSET=$(cat /root/.flowbot/offset.txt) TX_SUM=$(echo "$TX_SUM + $OFFSET" | bc) USED=$(printf "%.2f" "$TX_SUM") PERCENT=$(echo "scale=2; $USED/$LIMIT*100" | bc) MSG="📊 流量统计(${SERVER_NAME})\n\n🔹 出站流量:$USED GiB / $LIMIT GiB\n🔹 使用率:$PERCENT %\n\n数据来源:vnStat" curl -s -X POST "$API/sendMessage" -d chat_id="$CHAT_ID" --data-urlencode text="$MSG" >/dev/null } send_keyboard() { local text="${1:-请选择操作(${SERVER_NAME})👇}" local kb='{"keyboard":[[{"text":"📊 查询流量"}]],"resize_keyboard":true,"one_time_keyboard":false}' curl -s -X POST "$API/sendMessage" -d chat_id="$CHAT_ID" --data-urlencode text="$text" -d "reply_markup=$kb" >/dev/null } poll() { OFFSET=0 while true; do UPDATES=$(curl -s "$API/getUpdates?offset=$OFFSET") [[ -z "$UPDATES" ]] && sleep 2 && continue OFFSET=$(echo "$UPDATES" | jq '.result[-1].update_id + 1') TEXT=$(echo "$UPDATES" | jq -r '.result[-1].message.text') [[ "$TEXT" == "📊 查询流量" ]] && report_usage sleep 1 done } case "$1" in once) report_usage ;; daily) report_usage ;; poll) poll ;; *) send_keyboard ;; esac EOF chmod +x $BOT_SCRIPT cat > "$SERVICE_FILE" </dev/null | grep -v tg_flow_bot.sh; echo "0 ${PUSH_HOUR} * * * $BOT_SCRIPT daily >/dev/null 2>&1") | crontab - echo "✅ 安装完成。" sleep 2 show_main_menu } # ------------------------- # 查询当前流量 # ------------------------- query_flow() { echo "------------------------------------" echo "📊 当前出站流量统计:" vnstat echo "------------------------------------" read -p "按回车返回菜单..." show_main_menu } # ------------------------- # 校准偏差 # ------------------------- calibrate_offset() { echo "⚙️ 校准出站流量(补偿丢失统计)" read -p "请输入要增加的出站量 (GB): " offset echo "$offset" > /root/.flowbot/offset.txt echo "✅ 已校准 +$offset GB" sleep 2 show_main_menu } # ------------------------- # 重启机器人 # ------------------------- restart_bot() { systemctl restart tg-flow-poll.service echo "✅ 已重启 Telegram Bot 服务。" sleep 2 show_main_menu } # ------------------------- # 卸载全部 # ------------------------- uninstall_bot() { echo "⚠️ 确认卸载全部组件?(y/n)" read -p "> " confirm [[ "$confirm" != "y" ]] && show_main_menu systemctl disable --now tg-flow-poll.service rm -f "$BOT_SCRIPT" "$SERVICE_FILE" rm -rf "$CONFIG_DIR" crontab -r echo "✅ 卸载完成。" sleep 2 show_main_menu } # ------------------------- # 关于 # ------------------------- about_info() { clear echo "------------------------------------" echo "🌐 LanYu FlowBot - VPS 流量助手" echo "📧 作者邮箱:admin@lanyu.org" echo "📅 版本:v1.0" echo "------------------------------------" read -p "按回车返回菜单..." show_main_menu } show_main_menu