昨天发了go版的,不过会搭建go开发环境进行编译的人毕竟不多,发编译后的二进制码也不是我作风。今天发一个bash脚本版的吧。
感谢cctv,感谢gpt,这代码是直接让它改写的go,我没有改动。测试了一下没问题。
我说说使用步骤:

  1. 把代码保存到服务器上这个不用说了吧,比如名字叫ovh.sh,然后 chmod +x ovh.sh了。当然,不加x也可以,那就运行的时候bash ovh.sh。
  2. 在telegram中,加 @botfather ,建立一个自己的机器人,好了后,注意保存 token 。怎么建自己网上查吧。当然,如果你有机器的人话,直接用它就可以了。
  3. 在tg中,加 @userinfobot , 获得自己的 id。
  4. 自己加自己的bot,一定要 /start ,简单说,自己和自己bot说句话。这样bot才有权限发消息给自己。
  5. 安装jq,如果你没有的话。 sudo apt install jq
  6. 安装screen,如果你没有的话, sudo apt install screen
  7. 运行 screen,进去后, ./ovh.sh 你的token 你的id
  8. ctrl-ad退出screen。 然后等待吧。

为了验证上面的tg参数是否正确,可以在第6步后, ./ovh.sh 你的token 你的id test 试运行一下,它会报告法国有货,即发送通知到Tg: Server availability changed to: 72H in datacenter: bhs。没问题的话就ctrl-c,然后继续第7步。

#!/bin/bash

if [ "$#" -lt 2 ]; then
    echo "Usage: $0 <telegram_bot_token> <chat_id> [test]"
    exit 1
fi

TELEGRAM_BOT_TOKEN=$1
CHAT_ID=$2
TEST_MODE=$3
API_URL="https://ca.ovh.com/engine/apiv6/dedicated/server/datacenter/availabilities/?excludeDatacenters=false&planCode=24ska01&server=24ska01"

send_telegram_notification() {
    local datacenter=$1
    local availability=$2
    local message="Server availability changed to: $availability in datacenter: $datacenter"
    
    echo "Sending notification: $message"

    curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \
        -d "chat_id=$CHAT_ID" \
        -d "text=$message" >/dev/null

    echo "Notification sent."
}

check_availability() {
    echo "Fetching server availability data..."

    response=$(curl -s "$API_URL")

    if [ -z "$response" ]; then
        echo "Failed to fetch data."
        return
    fi

    echo "Received JSON response: $response"

    if [ "$TEST_MODE" == "test" ]; then
        echo "Test mode enabled. Forcing bhs datacenter availability to 72H."
        response=$(echo "$response" | jq '.[0].datacenters |= map(if .datacenter == "bhs" then .availability = "72H" else . end)')
    fi

    echo "$response" | jq -c '.[0].datacenters[]' | while read -r datacenter; do
        availability=$(echo "$datacenter" | jq -r '.availability')
        name=$(echo "$datacenter" | jq -r '.datacenter')

        echo "Checking datacenter: $name, availability: $availability"

        if [ "$availability" != "unavailable" ]; then
            echo "Availability change detected: $availability in datacenter: $name"
            send_telegram_notification "$name" "$availability"
            break
        fi
    done

    echo "Finished checking all datacenters."
}

while true; do
    check_availability
    sleep 60
done

标签: none

添加新评论

*如果只是需要与我沟通联系,请telegram @ohyessure, 而不要用评论方式,因为没有你的个人资料,我无法回复及联络你。