This commit is contained in:
Vaica committed 2026-06-24 14:00:50 +08:00
1 parent ccd66dfa11
commit ea26eef4e4
2 files changed
+123 -8

No files matched your search

+71 -8
View File
@@ -11,23 +11,86 @@ interface ArtalkComment {
created_at: string;
}
interface ArtalkPage {
id: number;
key: string;
title: string;
}
let lastCheckedId = 0;
let notifierStarted = false;
async function fetchLatestComments(): Promise<ArtalkComment[]> {
// 获取所有页面
async function fetchAllPages(): Promise<ArtalkPage[]> {
try {
const url = `${ARTALK_SERVER}/api/v2/comments?site_name=${encodeURIComponent(ARTALK_SITE)}&limit=5&sort_by=created_at&sort_order=desc`;
const headers: Record<string, string> = {
"Content-Type": "application/json",
};
// Artalk 公开 API 不需要认证,但加上 token 以备后续需要
const res = await fetch(url, { headers });
const url = `${ARTALK_SERVER}/api/v2/pages?site_name=${encodeURIComponent(ARTALK_SITE)}&limit=100`;
const res = await fetch(url, {
headers: { "Content-Type": "application/json" },
});
if (!res.ok) {
console.error("[comment-notify] fetch failed:", res.status, res.statusText);
console.error("[comment-notify] fetch pages failed:", res.status);
return [];
}
const data = await res.json() as { pages?: ArtalkPage[] };
return data.pages || [];
} catch (e) {
console.error("[comment-notify] fetch pages error:", e instanceof Error ? e.message : String(e));
return [];
}
}
// 获取特定页面的最新评论
async function fetchCommentsForPage(pageKey: string): Promise<ArtalkComment[]> {
try {
const url = `${ARTALK_SERVER}/api/v2/comments?site_name=${encodeURIComponent(ARTALK_SITE)}&page_key=${encodeURIComponent(pageKey)}&limit=5&sort_by=created_at&sort_order=desc`;
const res = await fetch(url, {
headers: { "Content-Type": "application/json" },
});
if (!res.ok) {
return [];
}
const data = await res.json() as { comments?: ArtalkComment[] };
return data.comments || [];
} catch (e) {
return [];
}
}
// 获取所有页面的最新评论,合并后返回最新的 5 条
async function fetchLatestComments(): Promise<ArtalkComment[]> {
try {
// 1. 获取所有页面
const pages = await fetchAllPages();
if (pages.length === 0) {
console.log("[comment-notify] no pages found");
return [];
}
console.log("[comment-notify] found", pages.length, "pages, checking comments...");
// 2. 获取每个页面的最新评论(并行请求)
const allComments: ArtalkComment[] = [];
const promises = pages.map(async (page) => {
const comments = await fetchCommentsForPage(page.key);
return comments;
});
const results = await Promise.all(promises);
results.forEach(comments => allComments.push(...comments));
// 3. 按时间排序,取最新的 5 条
allComments.sort((a, b) =>
new Date(b.created_at).getTime() - new Date(a.created_at).getTime()
);
const latestComments = allComments.slice(0, 5);
console.log("[comment-notify] fetched", latestComments.length, "latest comments from", pages.length, "pages");
return latestComments;
} catch (e) {
console.error("[comment-notify] fetch error:", e instanceof Error ? e.message : String(e));
return [];