80 lines
2.5 KiB
Bash
80 lines
2.5 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# NodeSeek 自动签到脚本 v2.0
|
||
|
|
# 支持多账号、CDP 控制、状态记录
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
STATE_FILE="$SCRIPT_DIR/nodeseek-checkin-state.json"
|
||
|
|
CDP_URL="http://127.0.0.1:18800"
|
||
|
|
|
||
|
|
# 账号配置
|
||
|
|
declare -A ACCOUNTS=(
|
||
|
|
["menglong"]="dc4d1551406351a93c09082ea08e2d2e"
|
||
|
|
["vp404"]="3cfeb30b562daec31ba63bf64fdb3838"
|
||
|
|
)
|
||
|
|
declare -A ACCOUNT_NAMES=(
|
||
|
|
["menglong"]="朦胧"
|
||
|
|
["vp404"]="VP404"
|
||
|
|
)
|
||
|
|
|
||
|
|
# 初始化状态文件
|
||
|
|
if [ ! -f "$STATE_FILE" ]; then
|
||
|
|
echo '{"lastCheckin": null, "accounts": {}}' > "$STATE_FILE"
|
||
|
|
fi
|
||
|
|
|
||
|
|
TODAY=$(date '+%Y-%m-%d')
|
||
|
|
LAST_CHECKIN=$(jq -r '.lastCheckin // "never"' "$STATE_FILE")
|
||
|
|
|
||
|
|
if [ "$LAST_CHECKIN" = "$TODAY" ]; then
|
||
|
|
echo "今天已经签到过了 ($TODAY)"
|
||
|
|
jq -r '.accounts | to_entries[] | " \(.key): \(.value.status) (\(.value.reward // "N/A"))"' "$STATE_FILE"
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "开始签到 NodeSeek ($TODAY)..."
|
||
|
|
|
||
|
|
# 签到函数
|
||
|
|
checkin_account() {
|
||
|
|
local key=$1
|
||
|
|
local cookie=$2
|
||
|
|
local name=${ACCOUNT_NAMES[$key]}
|
||
|
|
|
||
|
|
echo "[$name] 签到中..."
|
||
|
|
|
||
|
|
# 使用 curl 签到
|
||
|
|
response=$(curl -s -X POST "https://www.nodeseek.com/api/attendance?random=false" \
|
||
|
|
-H "Cookie: _nk=$cookie" \
|
||
|
|
-H "User-Agent: Mozilla/5.0" \
|
||
|
|
-H "Accept: application/json")
|
||
|
|
|
||
|
|
success=$(echo "$response" | jq -r '.success // false')
|
||
|
|
message=$(echo "$response" | jq -r '.message // "未知错误"')
|
||
|
|
|
||
|
|
if [ "$success" = "true" ]; then
|
||
|
|
reward=$(echo "$response" | jq -r '.data // "未知"')
|
||
|
|
echo "[$name] ✅ 签到成功!奖励: $reward"
|
||
|
|
jq --arg name "$name" --arg reward "$reward" \
|
||
|
|
'.accounts[$name] = {status: "success", reward: $reward, time: now|todate}' \
|
||
|
|
"$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE"
|
||
|
|
else
|
||
|
|
echo "[$name] ❌ 签到失败: $message"
|
||
|
|
jq --arg name "$name" --arg msg "$message" \
|
||
|
|
'.accounts[$name] = {status: "failed", error: $msg, time: now|todate}' \
|
||
|
|
"$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# 遍历所有账号签到
|
||
|
|
for key in "${!ACCOUNTS[@]}"; do
|
||
|
|
checkin_account "$key" "${ACCOUNTS[$key]}"
|
||
|
|
sleep 2
|
||
|
|
done
|
||
|
|
|
||
|
|
# 更新最后签到日期
|
||
|
|
jq --arg today "$TODAY" '.lastCheckin = $today' "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "签到完成!"
|
||
|
|
jq -r '.accounts | to_entries[] | " \(.key): \(.value.status) (\(.value.reward // .value.error))"' "$STATE_FILE"
|