andtun

andtun

以Apex为例,监听Steam游戏更新

58
2024-10-17
以Apex为例,监听Steam游戏更新

通过记录分支更新时间并对比,监听游戏是否更新,并发送通知到邮件/discord

这是shell脚本,同理可以使用python或其他语言编程(ai一丢转换即可)

#!/bin/bash

# 邮箱配置
EMAIL="收件"
SUBJECT="Apex Legends 更新通知"
SMTP_SERVER="smtp.gmail.com"
SMTP_PORT=587
GMAIL_USER="发" 
GMAIL_PASS="发"

# Discord Webhook URL
DISCORD_WEBHOOK_URL="#"

# 获取 Apex Legends 游戏信息的函数
get_game_info() {
    curl -s "https://api.steamcmd.net/v1/info/1172470" || echo "null"  # 如果请求失败,返回 "null"
}

# 将时间戳转换为可读时间的函数
convert_timestamp() {
    date -u -d @$1 +"%Y-%m-%d %H:%M:%S"
}

# 检查 public 分支的更新
check_for_public_update() {
    game_data=$(get_game_info)

    # 验证 JSON 中的 status 是否是 success
    if echo "$game_data" | jq -e '.status' > /dev/null && [ "$(echo "$game_data" | jq -r '.status')" == "success" ]; then
        # 获取 depots 中的 branches 中的 public 信息
        public_branch=$(echo "$game_data" | jq -r '.data."1172470".depots.branches.public')

        if [ "$public_branch" != "null" ]; then
            # 提取并转换 public 分支的更新时间戳
            public_update_time=$(convert_timestamp $(echo "$public_branch" | jq -r '.timeupdated'))
            public_build_id=$(echo "$public_branch" | jq -r '.buildid')

            echo "公开分支最新更新时间: $public_update_time (Build ID: $public_build_id)"

            # 检查是否有更新(假设你保存了上次的 Build ID)
            LAST_BUILD_ID_FILE="last_build_id.txt"
            if [ -f "$LAST_BUILD_ID_FILE" ]; then
                last_build_id=$(cat "$LAST_BUILD_ID_FILE")
                if [ "$public_build_id" != "$last_build_id" ]; then
                    echo "检测到更新,发送邮件和 Discord 通知..."
                    
                    # 更新消息内容
                    update_message="Apex Legends 已更新!\n最新 Build ID: $public_build_id\n更新时间: $public_update_time\n提醒:游戏更新,已邮件通知开发。如您正在游戏,请勿退出,否则在软件更新前,您将无法继续使用 HOOZI。"
                    
                    send_email "$update_message"
                    send_discord_notification "$update_message"
                    echo "$public_build_id" > "$LAST_BUILD_ID_FILE"  # 更新保存的 Build ID
                else
                    echo "没有检测到更新。"
                fi
            else
                echo "未找到上次的 Build ID,保存当前 Build ID。"
                echo "$public_build_id" > "$LAST_BUILD_ID_FILE"
            fi
        else
            echo "未找到 public 分支的信息。"
        fi
    else
        echo "获取游戏信息失败或 status 不是 success。"
    fi
}

# 发送邮件的函数
send_email() {
    local body_message=$1  # 从参数获取邮件内容
    # 使用 ssmtp 发送邮件
    {
        echo "To: $EMAIL"
        echo "From: $GMAIL_USER"  # 添加发件人地址
        echo "Subject: $SUBJECT"
        echo
        echo "$body_message"
    } | ssmtp -v "$EMAIL"  # 将收件人放在 ssmtp 命令行参数中
}

# 发送 Discord 通知的函数
send_discord_notification() {
    local discord_message=$1
    curl -H "Content-Type: application/json" \
         -X POST \
         -d "{\"content\": \"$discord_message\"}" \
         "$DISCORD_WEBHOOK_URL"
}

# 调用检查更新的函数
check_for_public_update