#!/bin/bash # 诊断评论通知问题 echo "" echo "===================================" echo " 评论通知诊断" echo "===================================" echo "" # 读取配置 if [ ! -f ".env" ]; then echo "错误: .env 文件不存在" exit 1 fi ARTALK_SERVER=$(grep "^ARTALK_SERVER=" .env | cut -d'=' -f2) ARTALK_SITE=$(grep "^ARTALK_SITE=" .env | cut -d'=' -f2) ARTALK_ADMIN_EMAIL=$(grep "^ARTALK_ADMIN_EMAIL=" .env | cut -d'=' -f2) ARTALK_ADMIN_PASSWORD=$(grep "^ARTALK_ADMIN_PASSWORD=" .env | cut -d'=' -f2) echo "1. 配置信息" echo " 服务器: $ARTALK_SERVER" echo " 站点: $ARTALK_SITE" echo "" # 登录 echo "2. 登录 Artalk..." TOKEN=$(curl -s -X POST "$ARTALK_SERVER/api/v2/auth/email/login" \ -H "Content-Type: application/json" \ -d "{\"email\":\"$ARTALK_ADMIN_EMAIL\",\"password\":\"$ARTALK_ADMIN_PASSWORD\"}" | \ grep -o '"token":"[^"]*"' | cut -d'"' -f4) if [ -z "$TOKEN" ]; then echo " ✗ 登录失败" exit 1 fi echo " ✓ 登录成功" echo "" # 获取最新评论 echo "3. 获取最新 10 条评论..." RESPONSE=$(curl -s "$ARTALK_SERVER/api/v2/comments?site_name=$ARTALK_SITE&page_key=/&limit=10&sort_by=date&sort_order=desc" \ -H "Authorization: Bearer $TOKEN") COUNT=$(echo "$RESPONSE" | grep -o '"count":[0-9]*' | cut -d':' -f2) echo " 首页评论数: $COUNT" if [ "$COUNT" -gt 0 ]; then echo " 最新评论:" echo "$RESPONSE" | python3 -c " import sys, json data = json.load(sys.stdin) for c in data.get('comments', [])[:3]: print(f' ID {c[\"id\"]}: {c[\"nick\"]} - {c[\"content\"][:40]}...') " 2>/dev/null || echo " (需要 python3 来解析 JSON)" fi echo "" # 获取最新评论(所有页面) echo "4. 获取所有页面最新评论(前 5 条)..." ALL_COMMENTS="[]" # 获取前 5 个页面的评论 for page_key in "/" "/20260623235948.html" "/202606231801.html" "/20211101.html" "/20210903.html"; do RESPONSE=$(curl -s "$ARTALK_SERVER/api/v2/comments?site_name=$ARTALK_SITE&page_key=$page_key&limit=2&sort_by=date&sort_order=desc" \ -H "Authorization: Bearer $TOKEN") COUNT=$(echo "$RESPONSE" | grep -o '"count":[0-9]*' | cut -d':' -f2) if [ "$COUNT" -gt 0 ]; then echo " ✓ $page_key: $COUNT 条评论" fi done echo "" # 检查通知日志 echo "5. 最近的通知日志..." docker compose logs --tail 20 2>&1 | grep -E "\[comment-notify\]|fetched.*comments" | tail -5 echo "" echo "===================================" echo " 诊断完成" echo "===================================" echo "" echo "如果评论存在但没有通知,可能原因:" echo "1. 评论的文章不在最新 20 个页面中" echo "2. 启动时已记录最新 ID,新评论 ID 必须更大" echo "3. Artalk API 返回的评论顺序问题" echo ""