88 lines
2.7 KiB
Bash
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 ""
|