Files
blog/write-server/diagnose-comment-notify.sh
T
2026-06-24 15:08:41 +08:00

88 lines
2.7 KiB
Bash

#!/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 ""