@luoyi-dsh/instagram-scroll 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -5
- package/README.zh-Hant.md +35 -5
- package/client.js +171 -15
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +120 -8
- package/dist/config.js.map +1 -1
- package/dist/core/scrollDuty.d.ts +30 -1
- package/dist/core/scrollDuty.d.ts.map +1 -1
- package/dist/core/scrollDuty.js +353 -63
- package/dist/core/scrollDuty.js.map +1 -1
- package/dist/lib/ledger.d.ts +7 -0
- package/dist/lib/ledger.d.ts.map +1 -1
- package/dist/lib/ledger.js +23 -0
- package/dist/lib/ledger.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 就在該貼文底下留一條評論「@主人 + 推薦原因」,並記錄至今日日報。
|
|
8
8
|
* ============================================================================
|
|
9
9
|
*/
|
|
10
|
-
import type { InstagramMcpClient } from '@luoyi-dsh/instagram-mcp';
|
|
10
|
+
import type { InstagramMcpClient, InstagramPost } from '@luoyi-dsh/instagram-mcp';
|
|
11
11
|
import { InstagramScrollConfig } from '../config.js';
|
|
12
12
|
import { ScrollLedgerManager } from '../lib/ledger.js';
|
|
13
13
|
export interface ScrollRoundResult {
|
|
@@ -22,8 +22,37 @@ export interface ScrollRoundResult {
|
|
|
22
22
|
url: string;
|
|
23
23
|
score: number;
|
|
24
24
|
comment: string;
|
|
25
|
+
reason: string;
|
|
25
26
|
}>;
|
|
26
27
|
message: string;
|
|
27
28
|
}
|
|
29
|
+
export interface ParsedPostContent {
|
|
30
|
+
rawCaption: string;
|
|
31
|
+
cleanBody: string;
|
|
32
|
+
hashtags: string[];
|
|
33
|
+
mentions: string[];
|
|
34
|
+
tagCount: number;
|
|
35
|
+
tagCharLength: number;
|
|
36
|
+
cleanLength: number;
|
|
37
|
+
isTagSpam: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface EvaluationResult {
|
|
40
|
+
isWorthy: boolean;
|
|
41
|
+
score: number;
|
|
42
|
+
reason: string;
|
|
43
|
+
commentText: string;
|
|
44
|
+
rejectionReason?: string;
|
|
45
|
+
reviewMethod: 'llm' | 'heuristic';
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 正文解析與標籤分離器
|
|
49
|
+
* 徹底區分貼文真正的正文內容與文末堆砌的標籤 (防止標籤農場誤導)
|
|
50
|
+
*/
|
|
51
|
+
export declare function parsePostContent(caption?: string): ParsedPostContent;
|
|
52
|
+
/**
|
|
53
|
+
* 嚴密的高精度內容檢驗引擎 (Content Inspection Pipeline)
|
|
54
|
+
* 解決痛點:「不要隨便推薦、要依據用戶喜歡內容、@ 前要檢查貼文內容、不要只看 tag」
|
|
55
|
+
*/
|
|
56
|
+
export declare function inspectAndEvaluatePost(ctx: any, post: InstagramPost, config: InstagramScrollConfig): Promise<EvaluationResult>;
|
|
28
57
|
export declare function executeScrollRound(ctx: any, config: InstagramScrollConfig, mcp: InstagramMcpClient, ledger: ScrollLedgerManager, log?: (msg: string) => void): Promise<ScrollRoundResult>;
|
|
29
58
|
//# sourceMappingURL=scrollDuty.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollDuty.d.ts","sourceRoot":"","sources":["../../src/core/scrollDuty.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"scrollDuty.d.ts","sourceRoot":"","sources":["../../src/core/scrollDuty.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEtD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAA;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,KAAK,CAAC;QACrB,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,GAAG,EAAE,MAAM,CAAA;QACX,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;KACf,CAAC,CAAA;IACF,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,KAAK,GAAG,WAAW,CAAA;CAClC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAAW,GAAG,iBAAiB,CAkCxE;AAqED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAoM3B;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,mBAAmB,EAC3B,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAkB,GACvC,OAAO,CAAC,iBAAiB,CAAC,CA4M5B"}
|
package/dist/core/scrollDuty.js
CHANGED
|
@@ -8,76 +8,316 @@
|
|
|
8
8
|
* ============================================================================
|
|
9
9
|
*/
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* 正文解析與標籤分離器
|
|
12
|
+
* 徹底區分貼文真正的正文內容與文末堆砌的標籤 (防止標籤農場誤導)
|
|
13
13
|
*/
|
|
14
|
-
function
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
14
|
+
export function parsePostContent(caption = '') {
|
|
15
|
+
const rawCaption = String(caption || '').trim();
|
|
16
|
+
// 提取所有 hashtag 與 mention
|
|
17
|
+
const hashtags = (rawCaption.match(/#[\p{L}\p{N}_]+/gu) || []).map((t) => t.slice(1).toLowerCase());
|
|
18
|
+
const mentions = (rawCaption.match(/@[\p{L}\p{N}._]+/gu) || []).map((m) => m.slice(1));
|
|
19
|
+
// 移除所有 #tag 與 @mention,整理出真正的正文文字
|
|
20
|
+
let cleanBody = rawCaption
|
|
21
|
+
.replace(/#[\p{L}\p{N}_]+/gu, ' ')
|
|
22
|
+
.replace(/@[\p{L}\p{N}._]+/gu, ' ')
|
|
23
|
+
.replace(/[ \t]+/g, ' ')
|
|
24
|
+
.replace(/\n\s*\n+/g, '\n')
|
|
25
|
+
.trim();
|
|
26
|
+
const cleanLength = cleanBody.length;
|
|
27
|
+
const tagCount = hashtags.length;
|
|
28
|
+
const tagCharLength = hashtags.reduce((acc, tag) => acc + tag.length, 0);
|
|
29
|
+
// 判定是否為標籤農場 (Hashtag Spam):
|
|
30
|
+
// 1. 標籤數量超過 12 個
|
|
31
|
+
// 2. 標籤總長度超越正文長度且正文字數小於 40 字
|
|
32
|
+
const isTagSpam = tagCount > 12 || (tagCount >= 6 && tagCharLength > cleanLength && cleanLength < 40);
|
|
33
|
+
return {
|
|
34
|
+
rawCaption,
|
|
35
|
+
cleanBody,
|
|
36
|
+
hashtags,
|
|
37
|
+
mentions,
|
|
38
|
+
tagCount,
|
|
39
|
+
tagCharLength,
|
|
40
|
+
cleanLength,
|
|
41
|
+
isTagSpam,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 調用宿主 LLM 或環境變數中的 DeepSeek / OpenAI 服務進行深度語義內容審查
|
|
46
|
+
*/
|
|
47
|
+
async function callLlmInference(ctx, systemPrompt, userPrompt) {
|
|
48
|
+
// 1. 優先嘗試 DSH 宿主注入的 LLM 服務
|
|
49
|
+
const llm = (typeof ctx?.get === 'function' ? ctx.get('llm') : null) || ctx?.llm;
|
|
50
|
+
if (llm) {
|
|
51
|
+
try {
|
|
52
|
+
if (typeof llm.chat === 'function') {
|
|
53
|
+
const res = await llm.chat({
|
|
54
|
+
messages: [
|
|
55
|
+
{ role: 'system', content: systemPrompt },
|
|
56
|
+
{ role: 'user', content: userPrompt },
|
|
57
|
+
],
|
|
58
|
+
temperature: 0.3,
|
|
59
|
+
});
|
|
60
|
+
const reply = res?.content || res?.text || (typeof res === 'string' ? res : '');
|
|
61
|
+
if (reply)
|
|
62
|
+
return reply;
|
|
63
|
+
}
|
|
64
|
+
if (typeof llm.complete === 'function') {
|
|
65
|
+
const reply = await llm.complete(`${systemPrompt}\n\n${userPrompt}`);
|
|
66
|
+
if (reply)
|
|
67
|
+
return reply;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
console.warn(`[ScrollDuty LLM] 宿主 ctx.llm 調用異常: ${e.message}`);
|
|
25
72
|
}
|
|
26
73
|
}
|
|
27
|
-
// 2.
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
74
|
+
// 2. 檢查備援環境變數 (DeepSeek / OpenAI)
|
|
75
|
+
const apiKey = process.env.DEEPSEEK_API_KEY || process.env.OPENAI_API_KEY;
|
|
76
|
+
const baseUrl = process.env.DEEPSEEK_API_BASE || process.env.OPENAI_BASE_URL || 'https://api.deepseek.com';
|
|
77
|
+
if (apiKey) {
|
|
78
|
+
try {
|
|
79
|
+
const resp = await fetch(`${baseUrl}/chat/completions`, {
|
|
80
|
+
method: 'POST',
|
|
81
|
+
headers: {
|
|
82
|
+
'Content-Type': 'application/json',
|
|
83
|
+
Authorization: `Bearer ${apiKey}`,
|
|
84
|
+
},
|
|
85
|
+
body: JSON.stringify({
|
|
86
|
+
model: process.env.DEEPSEEK_MODEL || 'deepseek-chat',
|
|
87
|
+
messages: [
|
|
88
|
+
{ role: 'system', content: systemPrompt },
|
|
89
|
+
{ role: 'user', content: userPrompt },
|
|
90
|
+
],
|
|
91
|
+
temperature: 0.3,
|
|
92
|
+
response_format: { type: 'json_object' },
|
|
93
|
+
}),
|
|
94
|
+
});
|
|
95
|
+
if (resp.ok) {
|
|
96
|
+
const data = (await resp.json());
|
|
97
|
+
return data.choices?.[0]?.message?.content || null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
console.warn(`[ScrollDuty LLM] 外部 API 調用異常: ${err.message}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* 嚴密的高精度內容檢驗引擎 (Content Inspection Pipeline)
|
|
108
|
+
* 解決痛點:「不要隨便推薦、要依據用戶喜歡內容、@ 前要檢查貼文內容、不要只看 tag」
|
|
109
|
+
*/
|
|
110
|
+
export async function inspectAndEvaluatePost(ctx, post, config) {
|
|
52
111
|
const master = (config.masterUsername || '').replace(/^@/, '').trim();
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
112
|
+
const parsed = parsePostContent(post.caption || '');
|
|
113
|
+
const minScore = config.minScore || 80;
|
|
114
|
+
const minLength = config.minCaptionLength || 30;
|
|
115
|
+
const userInterests = config.userInterests ||
|
|
116
|
+
'專注於前沿 AI 技術、開源軟體、全端與前端架構、實用開發工具、優質 UI/UX 設計技巧或實用技術深度解析;喜愛實踐乾貨與原創見解。';
|
|
117
|
+
// === 第 1 關:正文實質內容字數檢驗 (拒絕無內文或純圖廢文) ===
|
|
118
|
+
if (parsed.cleanLength < minLength) {
|
|
119
|
+
return {
|
|
120
|
+
isWorthy: false,
|
|
121
|
+
score: 15,
|
|
122
|
+
reason: '',
|
|
123
|
+
rejectionReason: `正文有效字數不足 (${parsed.cleanLength} 字 < 門檻 ${minLength} 字),資訊量過少無實質乾貨內容。`,
|
|
124
|
+
commentText: '',
|
|
125
|
+
reviewMethod: 'heuristic',
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// === 第 2 關:標籤農場檢查 (拒絕標籤堆砌蹭熱度) ===
|
|
129
|
+
if (parsed.isTagSpam) {
|
|
130
|
+
return {
|
|
131
|
+
isWorthy: false,
|
|
132
|
+
score: 20,
|
|
133
|
+
reason: '',
|
|
134
|
+
rejectionReason: `判定為標籤農場 (包含 ${parsed.tagCount} 個標籤,標籤佔比過高且正文空洞)。`,
|
|
135
|
+
commentText: '',
|
|
136
|
+
reviewMethod: 'heuristic',
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// === 第 3 關:負面詞與廣告過濾 (Negative Keywords / Spam Filter) ===
|
|
140
|
+
const negativeWords = config.negativeKeywords || [];
|
|
141
|
+
const rawLower = parsed.rawCaption.toLowerCase();
|
|
142
|
+
for (const badKw of negativeWords) {
|
|
143
|
+
const cleanKw = badKw.toLowerCase().trim();
|
|
144
|
+
if (cleanKw && rawLower.includes(cleanKw)) {
|
|
145
|
+
return {
|
|
146
|
+
isWorthy: false,
|
|
147
|
+
score: 10,
|
|
148
|
+
reason: '',
|
|
149
|
+
rejectionReason: `命中排除關鍵字/廣告宣傳詞彙 [${cleanKw}]。`,
|
|
150
|
+
commentText: '',
|
|
151
|
+
reviewMethod: 'heuristic',
|
|
152
|
+
};
|
|
64
153
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
154
|
+
}
|
|
155
|
+
// === 第 4 關:正文實質主題核驗 (不能只看文末 tag) ===
|
|
156
|
+
const positiveWords = config.positiveKeywords || [];
|
|
157
|
+
const cleanLower = parsed.cleanBody.toLowerCase();
|
|
158
|
+
const hitBodyKeywords = [];
|
|
159
|
+
for (const kw of positiveWords) {
|
|
160
|
+
const cleanKw = kw.toLowerCase().trim();
|
|
161
|
+
if (cleanKw && cleanLower.includes(cleanKw)) {
|
|
162
|
+
hitBodyKeywords.push(cleanKw);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// 若設定要求「正文必須命中用戶偏好」,且正文未命中任何關鍵字,直接退回
|
|
166
|
+
if (config.requireBodyMatch && hitBodyKeywords.length === 0) {
|
|
167
|
+
return {
|
|
168
|
+
isWorthy: false,
|
|
169
|
+
score: 30,
|
|
170
|
+
reason: '',
|
|
171
|
+
rejectionReason: `正文實質內容未提及主人偏好領域關鍵字 (僅文末標籤包含相關字詞,判定為蹭熱度)。`,
|
|
172
|
+
commentText: '',
|
|
173
|
+
reviewMethod: 'heuristic',
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// === 第 5 關:LLM 深度語義質檢 (如果環境具備 LLM 能力) ===
|
|
177
|
+
const systemPrompt = `你是一位高品味、眼光極為嚴格的私人內容審查特助。
|
|
178
|
+
主人的核心原則是:「絕對不要隨便推薦、必須切合主人喜歡的內容,在留言 @ 主人之前必須深入檢查正文實質內容,嚴禁只看文末的 tag 就隨意推薦」。
|
|
179
|
+
主人的內容偏好定義如下:
|
|
180
|
+
"""
|
|
181
|
+
${userInterests}
|
|
182
|
+
"""
|
|
183
|
+
|
|
184
|
+
任務要求:
|
|
185
|
+
1. 請審查貼文正文是否深度探討主人喜歡的主題,還是只是空泛的標籤農場或蹭流量。
|
|
186
|
+
2. 評估內容是否具備前沿實踐、技術見解、架構乾貨或優質教學價值。
|
|
187
|
+
3. 若內容確實極為優秀且深度符合主人喜好,請給出大於等於 ${minScore} 的高分,並撰寫簡短真誠、針對此篇貼文具體乾貨的一句話推坑留言 (不要千篇一律套話)。
|
|
188
|
+
4. 若品質普通、偏題或僅表面蹭熱度,給予低於 ${minScore} 的分數並給出 rejectionReason。
|
|
189
|
+
|
|
190
|
+
請嚴格輸出 JSON 格式:
|
|
191
|
+
{
|
|
192
|
+
"isWorthy": boolean,
|
|
193
|
+
"score": number, // 0-100
|
|
194
|
+
"summary": "貼文真正主旨簡介 (30字內)",
|
|
195
|
+
"rejectionReason": "未通過的原因 (若不合格)",
|
|
196
|
+
"reason": "推薦給主人的實質價值說明 (若合格)",
|
|
197
|
+
"hookPhrase": "針對本篇內容亮點量身打造的推坑一句話 (若合格,25字內,真誠具體,嚴禁空洞廢話)"
|
|
198
|
+
}`;
|
|
199
|
+
const userPrompt = `請審查以下 Instagram 貼文:
|
|
200
|
+
- 作者:@${post.user?.username || 'unknown'}
|
|
201
|
+
- 互動數據:${post.like_count || 0} 讚, ${post.comment_count || 0} 則留言
|
|
202
|
+
- 貼文真正正文內容 (已剔除標籤):
|
|
203
|
+
"""
|
|
204
|
+
${parsed.cleanBody.slice(0, 800)}
|
|
205
|
+
"""
|
|
206
|
+
- 文末標籤清單:#${parsed.hashtags.join(', #')}
|
|
207
|
+
- 正文命中之領域詞:${hitBodyKeywords.join(', ') || '無'}
|
|
208
|
+
|
|
209
|
+
請依據審查原則進行嚴格評估並以 JSON 返回。`;
|
|
210
|
+
const llmResponse = await callLlmInference(ctx, systemPrompt, userPrompt);
|
|
211
|
+
if (llmResponse) {
|
|
212
|
+
try {
|
|
213
|
+
const cleanedJson = llmResponse.replace(/^```json\s*/i, '').replace(/\s*```$/i, '').trim();
|
|
214
|
+
const parsedLlm = JSON.parse(cleanedJson);
|
|
215
|
+
const score = Number(parsedLlm.score || 0);
|
|
216
|
+
const isWorthy = Boolean(parsedLlm.isWorthy) && score >= minScore;
|
|
217
|
+
if (isWorthy) {
|
|
218
|
+
const hook = String(parsedLlm.hookPhrase || parsedLlm.reason || '這篇分析非常到位,強烈推薦!').trim();
|
|
219
|
+
const commentText = master ? `@${master} ${hook}` : hook;
|
|
220
|
+
return {
|
|
221
|
+
isWorthy: true,
|
|
222
|
+
score,
|
|
223
|
+
reason: String(parsedLlm.reason || parsedLlm.summary || '內容深度契合主人關注領域且具備乾貨價值。'),
|
|
224
|
+
commentText,
|
|
225
|
+
reviewMethod: 'llm',
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
return {
|
|
230
|
+
isWorthy: false,
|
|
231
|
+
score,
|
|
232
|
+
reason: '',
|
|
233
|
+
rejectionReason: String(parsedLlm.rejectionReason || '內容深度未達主人品味標準或主題不符。'),
|
|
234
|
+
commentText: '',
|
|
235
|
+
reviewMethod: 'llm',
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch (e) {
|
|
240
|
+
console.warn(`[ScrollDuty] LLM 結果 JSON 解析異常: ${e.message}`);
|
|
68
241
|
}
|
|
69
242
|
}
|
|
70
|
-
|
|
243
|
+
// === 備援:啟發式嚴密內容質檢 (Heuristic Rule Engine) ===
|
|
244
|
+
// 當宿主無 LLM 或 LLM 調用異常時,依然嚴守品質底線,絕不隨便推薦!
|
|
245
|
+
let heuristicScore = 40; // 底分
|
|
246
|
+
// 正文字數深度加分 (有較長詳細說明通常具備更高乾貨密度)
|
|
247
|
+
if (parsed.cleanLength > 300)
|
|
248
|
+
heuristicScore += 18;
|
|
249
|
+
else if (parsed.cleanLength > 150)
|
|
250
|
+
heuristicScore += 12;
|
|
251
|
+
else if (parsed.cleanLength > 60)
|
|
252
|
+
heuristicScore += 6;
|
|
253
|
+
// 正文實質命中關鍵詞加分
|
|
254
|
+
heuristicScore += Math.min(25, hitBodyKeywords.length * 8);
|
|
255
|
+
// 乾貨排版特徵檢查 (具備條列、步驟或結構化排版)
|
|
256
|
+
if (/[0-9][.、]|👉|✅|🔹|💡|📌|\n- |\n\* /.test(parsed.cleanBody)) {
|
|
257
|
+
heuristicScore += 10;
|
|
258
|
+
}
|
|
259
|
+
// 社群互動數據適度輔助加分 (最多 12 分,避免高讚垃圾貼文)
|
|
260
|
+
const likes = post.like_count || 0;
|
|
261
|
+
const comments = post.comment_count || 0;
|
|
262
|
+
if (likes > 300)
|
|
263
|
+
heuristicScore += 6;
|
|
264
|
+
if (comments > 15)
|
|
265
|
+
heuristicScore += 6;
|
|
266
|
+
heuristicScore = Math.min(96, Math.max(10, heuristicScore));
|
|
267
|
+
const isHeuristicWorthy = heuristicScore >= minScore;
|
|
268
|
+
if (isHeuristicWorthy) {
|
|
269
|
+
const reason = `正文實質深度探討 [${hitBodyKeywords.slice(0, 3).join(', ')}],文字詳實完整 (${parsed.cleanLength} 字),結構條理分明。`;
|
|
270
|
+
const hookPhrases = [
|
|
271
|
+
`這篇關於 ${hitBodyKeywords[0] || '該主題'} 的內容分享非常扎實,特別推薦你看!`,
|
|
272
|
+
`發現這篇乾貨對你的方向很有啟發,特地 @ 你存起來!`,
|
|
273
|
+
`這篇思路與案例分析得很透徹,內容很硬核,推推!`,
|
|
274
|
+
];
|
|
275
|
+
const chosenHook = hookPhrases[Math.floor(Math.random() * hookPhrases.length)];
|
|
276
|
+
const commentText = master ? `@${master} ${chosenHook}` : `這篇乾貨非常精彩,推薦關注!`;
|
|
277
|
+
return {
|
|
278
|
+
isWorthy: true,
|
|
279
|
+
score: heuristicScore,
|
|
280
|
+
reason,
|
|
281
|
+
commentText,
|
|
282
|
+
reviewMethod: 'heuristic',
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
return {
|
|
287
|
+
isWorthy: false,
|
|
288
|
+
score: heuristicScore,
|
|
289
|
+
reason: '',
|
|
290
|
+
rejectionReason: `內容乾貨密度評分 (${heuristicScore}) 未達嚴選門檻 (${minScore})。`,
|
|
291
|
+
commentText: '',
|
|
292
|
+
reviewMethod: 'heuristic',
|
|
293
|
+
};
|
|
294
|
+
}
|
|
71
295
|
}
|
|
72
296
|
export async function executeScrollRound(ctx, config, mcp, ledger, log = console.log) {
|
|
73
|
-
|
|
297
|
+
// 防風控冷卻保護檢查
|
|
298
|
+
if (ledger.isInCooldown()) {
|
|
299
|
+
const rem = ledger.getCooldownRemainingSeconds();
|
|
300
|
+
const reason = ledger.getCooldownReason();
|
|
301
|
+
const msg = `防風控冷卻保護中(剩餘 ${rem} 秒,原因: ${reason}),暫停本輪滾動瀏覽`;
|
|
302
|
+
log(`[ScrollDuty] 🚨 ${msg}`);
|
|
303
|
+
return {
|
|
304
|
+
ok: true,
|
|
305
|
+
totalScanned: 0,
|
|
306
|
+
worthyCount: 0,
|
|
307
|
+
recommendedCount: 0,
|
|
308
|
+
recommendations: [],
|
|
309
|
+
message: msg,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
log('[ScrollDuty] 🚀 開始替主人刷一輪 Instagram (啟動正文內容嚴格審查模式)...');
|
|
74
313
|
const master = (config.masterUsername || '').replace(/^@/, '').trim();
|
|
75
314
|
if (!master) {
|
|
76
|
-
log('[ScrollDuty] ⚠️ 尚未配置主人帳號 (masterUsername)
|
|
315
|
+
log('[ScrollDuty] ⚠️ 尚未配置主人帳號 (masterUsername),將僅進行瀏覽審核而不留言 @主人。');
|
|
77
316
|
}
|
|
78
317
|
const batchSize = Math.max(5, config.batchSize || 15);
|
|
318
|
+
const maxPerRun = config.maxRecommendsPerRun || 1;
|
|
79
319
|
const candidatePosts = [];
|
|
80
|
-
// 1.
|
|
320
|
+
// 1. 抓取首頁時間軸動態牆 (Feed)
|
|
81
321
|
try {
|
|
82
322
|
log(`[ScrollDuty] 正在滾動時間軸動態牆 (抓取上限: ${batchSize})...`);
|
|
83
323
|
const feedRes = await mcp.igGetTimelineFeed(batchSize);
|
|
@@ -88,8 +328,19 @@ export async function executeScrollRound(ctx, config, mcp, ledger, log = console
|
|
|
88
328
|
}
|
|
89
329
|
catch (e) {
|
|
90
330
|
log(`[ScrollDuty] 獲取時間軸動態異常: ${e.message}`);
|
|
331
|
+
if (/feedback|action block|checkpoint|rate limit/i.test(e.message)) {
|
|
332
|
+
ledger.triggerCooldown(config.cooldownOnBlockMinutes || 30, e.message);
|
|
333
|
+
return {
|
|
334
|
+
ok: false,
|
|
335
|
+
totalScanned: 0,
|
|
336
|
+
worthyCount: 0,
|
|
337
|
+
recommendedCount: 0,
|
|
338
|
+
recommendations: [],
|
|
339
|
+
message: `時間軸獲取異常並觸發風控冷卻: ${e.message}`,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
91
342
|
}
|
|
92
|
-
// 2.
|
|
343
|
+
// 2. 隨機選取一個主人感興趣的標籤進行探索抓取 (Explore Tag)
|
|
93
344
|
const tags = config.interestTags || [];
|
|
94
345
|
if (tags.length > 0) {
|
|
95
346
|
const randomTag = tags[Math.floor(Math.random() * tags.length)].replace(/^#/, '').trim();
|
|
@@ -103,14 +354,21 @@ export async function executeScrollRound(ctx, config, mcp, ledger, log = console
|
|
|
103
354
|
}
|
|
104
355
|
catch (e) {
|
|
105
356
|
log(`[ScrollDuty] 探索標籤異常: ${e.message}`);
|
|
357
|
+
if (/feedback|action block|checkpoint|rate limit/i.test(e.message)) {
|
|
358
|
+
ledger.triggerCooldown(config.cooldownOnBlockMinutes || 30, e.message);
|
|
359
|
+
}
|
|
106
360
|
}
|
|
107
361
|
}
|
|
108
362
|
let totalScanned = 0;
|
|
109
363
|
let worthyCount = 0;
|
|
110
364
|
let recommendedCount = 0;
|
|
111
365
|
const recommendations = [];
|
|
112
|
-
// 3.
|
|
366
|
+
// 3. 逐條讀內文進行深度內容審查與推薦
|
|
113
367
|
for (const post of candidatePosts) {
|
|
368
|
+
if (recommendedCount >= maxPerRun) {
|
|
369
|
+
log(`[ScrollDuty] 達到本輪推坑上限 (${maxPerRun} 則),結束本輪推薦。`);
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
114
372
|
const postPk = String(post.pk || post.id || '');
|
|
115
373
|
if (!postPk)
|
|
116
374
|
continue;
|
|
@@ -118,26 +376,53 @@ export async function executeScrollRound(ctx, config, mcp, ledger, log = console
|
|
|
118
376
|
if (ledger.hasSeen(postPk)) {
|
|
119
377
|
continue;
|
|
120
378
|
}
|
|
379
|
+
// 模擬人類瀏覽閱讀貼文微延遲
|
|
380
|
+
const minDelay = config.minPostReadDelaySeconds || 3;
|
|
381
|
+
const maxDelay = Math.max(minDelay, config.maxPostReadDelaySeconds || 7);
|
|
382
|
+
const readWaitMs = Math.floor((minDelay + Math.random() * (maxDelay - minDelay)) * 1000);
|
|
383
|
+
await new Promise((r) => setTimeout(r, readWaitMs));
|
|
121
384
|
totalScanned++;
|
|
122
|
-
const evalRes =
|
|
385
|
+
const evalRes = await inspectAndEvaluatePost(ctx, post, config);
|
|
123
386
|
if (evalRes.isWorthy) {
|
|
124
387
|
worthyCount++;
|
|
125
|
-
log(`[ScrollDuty] ⭐
|
|
388
|
+
log(`[ScrollDuty] ⭐ 發現極高價值內容!審查機制: [${evalRes.reviewMethod.toUpperCase()}], 評分: ${evalRes.score}/100, 作者: @${post.user?.username || 'unknown'}`);
|
|
389
|
+
log(`[ScrollDuty] 推薦原因: ${evalRes.reason}`);
|
|
126
390
|
// 檢查是否還能推坑 (每日上限控制)
|
|
127
391
|
const cap = config.dailyRecommendCap || 5;
|
|
128
392
|
if (ledger.canRecommend(cap) && master) {
|
|
129
|
-
|
|
393
|
+
// @ 前進行最後確認檢查 (Pre-mention Verification)
|
|
394
|
+
if (!evalRes.commentText || !evalRes.commentText.includes(master)) {
|
|
395
|
+
log(`[ScrollDuty] ⚠️ 推坑語句缺少 @${master},自動補上主人名稱`);
|
|
396
|
+
evalRes.commentText = `@${master} ${evalRes.commentText || '這篇分析非常到位,特地推薦你看看!'}`;
|
|
397
|
+
}
|
|
398
|
+
log(`[ScrollDuty] 正在貼文下留言推坑: "${evalRes.commentText}"...`);
|
|
130
399
|
try {
|
|
131
400
|
const commentRes = await mcp.igPostComment({
|
|
132
401
|
media_pk: postPk,
|
|
133
402
|
text: evalRes.commentText,
|
|
403
|
+
jitter_min: 6.0,
|
|
404
|
+
jitter_max: 15.0,
|
|
134
405
|
});
|
|
406
|
+
if (commentRes?.in_cooldown ||
|
|
407
|
+
(commentRes?.error &&
|
|
408
|
+
/action block|feedback|checkpoint|please wait|rate limit/i.test(commentRes.error))) {
|
|
409
|
+
ledger.triggerCooldown(config.cooldownOnBlockMinutes || 30, commentRes.error || 'Instagram 頻率風控阻擋');
|
|
410
|
+
log(`[ScrollDuty] 🚨 偵測到風控或熔斷保護,停止後續推坑!`);
|
|
411
|
+
ledger.markSeen(postPk, true);
|
|
412
|
+
break;
|
|
413
|
+
}
|
|
135
414
|
if (commentRes?.ok) {
|
|
136
415
|
log(`[ScrollDuty] ✅ 成功留言 @${master}!`);
|
|
137
416
|
recommendedCount++;
|
|
138
417
|
// 若開啟,順便點讚
|
|
139
418
|
if (config.likeOnRecommend) {
|
|
140
|
-
await mcp.igLikeMedia(postPk).catch(() => {
|
|
419
|
+
const likeRes = await mcp.igLikeMedia(postPk).catch(() => ({}));
|
|
420
|
+
if (likeRes?.in_cooldown ||
|
|
421
|
+
(likeRes?.error &&
|
|
422
|
+
/action block|feedback|checkpoint|please wait|rate limit/i.test(likeRes.error))) {
|
|
423
|
+
ledger.triggerCooldown(config.cooldownOnBlockMinutes || 30, likeRes.error || 'Instagram 點讚風控阻擋');
|
|
424
|
+
break;
|
|
425
|
+
}
|
|
141
426
|
}
|
|
142
427
|
const recItem = {
|
|
143
428
|
postPk,
|
|
@@ -160,6 +445,10 @@ export async function executeScrollRound(ctx, config, mcp, ledger, log = console
|
|
|
160
445
|
catch (e) {
|
|
161
446
|
log(`[ScrollDuty] 留言異常: ${e.message}`);
|
|
162
447
|
ledger.markSeen(postPk, true);
|
|
448
|
+
if (/feedback|action block|checkpoint|rate limit/i.test(e.message)) {
|
|
449
|
+
ledger.triggerCooldown(config.cooldownOnBlockMinutes || 30, e.message);
|
|
450
|
+
break;
|
|
451
|
+
}
|
|
163
452
|
}
|
|
164
453
|
}
|
|
165
454
|
else {
|
|
@@ -168,10 +457,11 @@ export async function executeScrollRound(ctx, config, mcp, ledger, log = console
|
|
|
168
457
|
}
|
|
169
458
|
}
|
|
170
459
|
else {
|
|
460
|
+
log(`[ScrollDuty] ⏭️ 未通過內容審核: ${evalRes.rejectionReason || '評分未達標準'}`);
|
|
171
461
|
ledger.markSeen(postPk, false);
|
|
172
462
|
}
|
|
173
463
|
}
|
|
174
|
-
const msg =
|
|
464
|
+
const msg = `本輪滾動完畢!共掃描 ${totalScanned} 則內容,經正文與語義嚴格審查,精選 ${worthyCount} 則符合主人偏好,成功留評推薦 ${recommendedCount} 則。`;
|
|
175
465
|
log(`[ScrollDuty] 🎉 ${msg}`);
|
|
176
466
|
return {
|
|
177
467
|
ok: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollDuty.js","sourceRoot":"","sources":["../../src/core/scrollDuty.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scrollDuty.js","sourceRoot":"","sources":["../../src/core/scrollDuty.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/ledger.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ export interface ScrollLedgerState {
|
|
|
29
29
|
scrolledCount: number;
|
|
30
30
|
recommendedCount: number;
|
|
31
31
|
};
|
|
32
|
+
cooldownUntil?: number;
|
|
33
|
+
cooldownReason?: string;
|
|
32
34
|
}
|
|
33
35
|
export declare class ScrollLedgerManager {
|
|
34
36
|
private filePath;
|
|
@@ -51,5 +53,10 @@ export declare class ScrollLedgerManager {
|
|
|
51
53
|
};
|
|
52
54
|
private appendReport;
|
|
53
55
|
getTodayReport(): string;
|
|
56
|
+
isInCooldown(): boolean;
|
|
57
|
+
getCooldownRemainingSeconds(): number;
|
|
58
|
+
getCooldownReason(): string;
|
|
59
|
+
triggerCooldown(minutes?: number, reason?: string): void;
|
|
60
|
+
resetCooldown(): void;
|
|
54
61
|
}
|
|
55
62
|
//# sourceMappingURL=ledger.d.ts.map
|
package/dist/lib/ledger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/lib/ledger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAClE,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,CAAA;QACrB,gBAAgB,EAAE,MAAM,CAAA;KACzB,CAAA;
|
|
1
|
+
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/lib/ledger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAClE,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,CAAA;QACrB,gBAAgB,EAAE,MAAM,CAAA;KACzB,CAAA;IACD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,KAAK,CAAmB;gBAEpB,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAehD,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,IAAI;IAyBL,IAAI,IAAI,IAAI;IAQnB,OAAO,CAAC,aAAa;IAUd,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIhC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,OAAe,GAAG,IAAI;IAUvD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAMlC,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IASjD,aAAa;;uBAvGH,MAAM;0BACH,MAAM;;;IA+G1B,OAAO,CAAC,YAAY;IAqBb,cAAc,IAAI,MAAM;IAWxB,YAAY,IAAI,OAAO;IAIvB,2BAA2B,IAAI,MAAM;IAKrC,iBAAiB,IAAI,MAAM;IAI3B,eAAe,CAAC,OAAO,SAAK,EAAE,MAAM,SAAK,GAAG,IAAI;IAShD,aAAa,IAAI,IAAI;CAK7B"}
|