koishi-plugin-weibo-post-monitor 1.0.1 → 1.0.3-beta.0

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.
Files changed (2) hide show
  1. package/lib/index.js +73 -5
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -177,7 +177,9 @@ async function getWeibo(config, callback, retry = false) {
177
177
  setCookie(auto_cookie2);
178
178
  }
179
179
  if (!auto_cookie2) {
180
- throw new Error("Cookie config is null, please check the config");
180
+ const errorMsg = `[getWeibo] Cookie配置为空,请检查配置。weiboUID: ${weiboUID}, is_using_cookie: ${is_using_cookie}`;
181
+ logger.error(errorMsg);
182
+ throw new Error(errorMsg);
181
183
  }
182
184
  const headers = {
183
185
  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
@@ -200,29 +202,93 @@ async function getWeibo(config, callback, retry = false) {
200
202
  body += chunk;
201
203
  });
202
204
  res.on("end", async () => {
205
+ if (res.statusCode !== 200) {
206
+ const statusCode = res.statusCode;
207
+ const bodyPreview = body.substring(0, 200);
208
+ const errorMsg = `[getWeibo] HTTP状态码错误: ${statusCode}`;
209
+ logger.error(`${errorMsg}, weiboUID: ${weiboUID}, 响应预览: ${bodyPreview}`);
210
+ if (statusCode === 403 && !retry && !is_using_cookie) {
211
+ logger.warn(`[getWeibo] 检测到403错误,尝试更新Cookie后重试。weiboUID: ${weiboUID}`);
212
+ try {
213
+ const randomUserAgent = getRandomUserAgent();
214
+ setUserAgent(randomUserAgent);
215
+ const newCookie = await fetchCookie();
216
+ setCookie(newCookie);
217
+ logger.info(`[getWeibo] Cookie更新成功,开始重试请求。weiboUID: ${weiboUID}`);
218
+ const retryResult = await getWeibo(config, callback, true);
219
+ resolve(retryResult);
220
+ } catch (retryError) {
221
+ const retryErrorMsg = `[getWeibo] 403错误重试失败。weiboUID: ${weiboUID}`;
222
+ logger.error(`${retryErrorMsg}, 原始错误: ${errorMsg}, 重试错误: ${retryError?.message || retryError}`);
223
+ reject({
224
+ error: new Error(`${retryErrorMsg}: ${retryError?.message || retryError}`),
225
+ body,
226
+ statusCode,
227
+ retryError,
228
+ errorType: "HTTP_403_RETRY_FAILED"
229
+ });
230
+ }
231
+ } else {
232
+ const finalErrorMsg = statusCode === 403 ? `[getWeibo] HTTP 403错误,已重试过或使用手动Cookie,无法自动重试。weiboUID: ${weiboUID}` : `[getWeibo] HTTP ${statusCode}错误。weiboUID: ${weiboUID}`;
233
+ logger.error(`${finalErrorMsg}, 响应预览: ${bodyPreview}`);
234
+ reject({
235
+ error: new Error(finalErrorMsg),
236
+ body,
237
+ statusCode,
238
+ errorType: statusCode === 403 ? "HTTP_403_NO_RETRY" : `HTTP_${statusCode}`
239
+ });
240
+ }
241
+ return;
242
+ }
203
243
  try {
204
244
  const returnData = JSON.parse(body);
205
245
  callback?.(returnData);
206
246
  resolve(returnData);
207
247
  } catch (error) {
248
+ const parseErrorMsg = `[getWeibo] JSON解析失败`;
249
+ logger.error(`${parseErrorMsg}, weiboUID: ${weiboUID}, 错误: ${error?.message || error}, 响应体预览: ${body.substring(0, 200)}`);
208
250
  if (!retry && !is_using_cookie) {
251
+ logger.warn(`[getWeibo] JSON解析失败,尝试更新Cookie后重试。weiboUID: ${weiboUID}`);
209
252
  try {
210
253
  const randomUserAgent = getRandomUserAgent();
211
254
  setUserAgent(randomUserAgent);
212
255
  const newCookie = await fetchCookie();
213
256
  setCookie(newCookie);
257
+ logger.info(`[getWeibo] Cookie更新成功,开始重试请求。weiboUID: ${weiboUID}`);
214
258
  const retryResult = await getWeibo(config, callback, true);
215
259
  resolve(retryResult);
216
260
  } catch (retryError) {
217
- reject({ error, body, retryError });
261
+ const retryErrorMsg = `[getWeibo] JSON解析错误重试失败`;
262
+ logger.error(`${retryErrorMsg}, weiboUID: ${weiboUID}, 原始错误: ${error?.message || error}, 重试错误: ${retryError?.message || retryError}`);
263
+ reject({
264
+ error: new Error(`${retryErrorMsg}: ${retryError?.message || retryError}`),
265
+ body,
266
+ retryError,
267
+ originalError: error,
268
+ errorType: "JSON_PARSE_RETRY_FAILED"
269
+ });
218
270
  }
219
271
  } else {
220
- reject({ error, body });
272
+ const finalErrorMsg = `[getWeibo] JSON解析失败,已重试过或使用手动Cookie,无法自动重试`;
273
+ logger.error(`${finalErrorMsg}, weiboUID: ${weiboUID}, 错误: ${error?.message || error}`);
274
+ reject({
275
+ error: new Error(`${finalErrorMsg}: ${error?.message || error}`),
276
+ body,
277
+ originalError: error,
278
+ errorType: "JSON_PARSE_NO_RETRY"
279
+ });
221
280
  }
222
281
  }
223
282
  });
224
283
  res.on("error", (error) => {
225
- reject({ error, body });
284
+ const networkErrorMsg = `[getWeibo] 网络请求错误`;
285
+ logger.error(`${networkErrorMsg}, weiboUID: ${weiboUID}, 错误: ${error?.message || error}, 已接收数据: ${body.substring(0, 100)}`);
286
+ reject({
287
+ error: new Error(`${networkErrorMsg}: ${error?.message || error}`),
288
+ body,
289
+ originalError: error,
290
+ errorType: "NETWORK_ERROR"
291
+ });
226
292
  });
227
293
  });
228
294
  });
@@ -512,7 +578,9 @@ function apply(ctx, config) {
512
578
  waitMinutes: config.waitMinutes,
513
579
  is_using_cookie: config.is_using_cookie
514
580
  };
515
- setCookie(config.manual_cookie);
581
+ if (config.is_using_cookie) {
582
+ setCookie(config.manual_cookie);
583
+ }
516
584
  setUserAgent(USER_AGENT_LIST[0]);
517
585
  ctx.setInterval(async () => {
518
586
  for (const singleConfig of config.sendINFO) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-weibo-post-monitor",
3
3
  "description": "微博帖子更新推送插件,用于获取指定微博用户的最新帖子推送到指定群聊,参考代码https://github.com/moehuhu/weibo-monitor",
4
- "version": "1.0.1",
4
+ "version": "1.0.3-beta.0",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [