koishi-plugin-group-verification 1.0.17 → 1.0.18

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/lib/index.js CHANGED
@@ -293,9 +293,25 @@ function apply(ctx, config) {
293
293
  autoInc: true
294
294
  });
295
295
  ctx.on("guild-member-request", async (session) => {
296
- const guildId = session.guildId;
296
+ logger.debug("guild-member-request event", session);
297
+ let guildId = (session.guildId || session.channelId || "").toString().trim();
297
298
  const userId = session.userId;
298
299
  const message = session.content || "";
300
+ if (!guildId) {
301
+ logger.warn("guild-member-request 没有 guildId,跳过处理");
302
+ return;
303
+ }
304
+ const requestId = session.event?.requestId || session.messageId || "";
305
+ if (requestId) {
306
+ try {
307
+ await session.bot.handleGuildMemberRequest(requestId, true);
308
+ logger.info(`自动同意申请 requestId=${requestId}`);
309
+ await updateStats(guildId, "autoApproved");
310
+ return;
311
+ } catch (e) {
312
+ logger.warn("自动同意失败", e);
313
+ }
314
+ }
299
315
  const groupConfig = await ctx.database.get("group_verification_config", {
300
316
  groupId: guildId
301
317
  });
@@ -305,6 +321,14 @@ function apply(ctx, config) {
305
321
  const config2 = groupConfig[0];
306
322
  const { isValid, matchedCount, requiredThreshold } = await verifyApplication(config2, message, session);
307
323
  if (isValid) {
324
+ if (requestId) {
325
+ try {
326
+ await session.bot.handleGuildMemberRequest(requestId, true);
327
+ logger.info(`自动同意申请 requestId=${requestId}`);
328
+ } catch (e) {
329
+ logger.warn("自动同意失败", e);
330
+ }
331
+ }
308
332
  await updateStats(guildId, "autoApproved");
309
333
  } else {
310
334
  await handleFailedVerification(ctx, session, config2);
@@ -345,6 +369,10 @@ function apply(ctx, config) {
345
369
  requestMessage: message,
346
370
  applyTime: /* @__PURE__ */ new Date()
347
371
  });
372
+ if (!guildId) {
373
+ logger.warn("handleFailedVerification 收到无效 guildId,已放弃发送");
374
+ return;
375
+ }
348
376
  if (!config2.reminderEnabled || !config2.reminderMessage || config2.reminderMessage === "") {
349
377
  logger.info(`群 ${guildId} 的提醒消息已被禁用,跳过发送`);
350
378
  return;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-group-verification",
3
3
  "description": "[WIP] Koishi 群组加群验证插件,支持多关键词匹配审核、多种审核方式和详细统计功能(开发中)",
4
- "version": "1.0.17",
4
+ "version": "1.0.18",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [
package/src/index.ts CHANGED
@@ -415,31 +415,59 @@ export function apply(ctx: Context, config: Config) {
415
415
 
416
416
  // 监听加群申请事件
417
417
  ctx.on('guild-member-request', async (session) => {
418
- const guildId = session.guildId
418
+ // debug: 输出整个 session 以便定位字段名
419
+ logger.debug('guild-member-request event', session)
420
+
421
+ // session.guildId 有时可能带空格或为空,先做 trim 并备选 channelId
422
+ let guildId = (session.guildId || session.channelId || '').toString().trim()
419
423
  const userId = session.userId
420
424
  const message = session.content || ''
421
-
425
+
426
+ if (!guildId) {
427
+ logger.warn('guild-member-request 没有 guildId,跳过处理')
428
+ return
429
+ }
430
+
431
+ // 尝试自动同意,如 event 中包含 requestId
432
+ const requestId = ((session.event as any)?.requestId) || session.messageId || ''
433
+ if (requestId) {
434
+ try {
435
+ await session.bot.handleGuildMemberRequest(requestId, true)
436
+ logger.info(`自动同意申请 requestId=${requestId}`)
437
+ await updateStats(guildId, 'autoApproved')
438
+ // 不再执行后续验证或提醒
439
+ return
440
+ } catch (e) {
441
+ logger.warn('自动同意失败', e)
442
+ // 继续下面的验证逻辑
443
+ }
444
+ }
445
+
422
446
  // 获取群组配置
423
447
  const groupConfig = await ctx.database.get('group_verification_config', {
424
448
  groupId: guildId
425
449
  })
426
-
450
+
427
451
  if (!groupConfig || groupConfig.length === 0) {
428
- // 如果没有配置,默认同意
429
- // 在实际使用中需要传入正确的requestId
430
- // await session.bot.handleGuildMemberRequest(requestId, true)
452
+ // 如果没有配置,默认同意(以上 auto-approve 未触发时仍然需要一个 requestId)
431
453
  return
432
454
  }
433
-
455
+
434
456
  const config = groupConfig[0]
435
-
457
+
436
458
  // 执行验证
437
459
  const { isValid, matchedCount, requiredThreshold } = await verifyApplication(config, message, session)
438
-
460
+
439
461
  if (isValid) {
440
- // 验证成功,自动同意入群
441
- // 在实际使用中需要传入正确的requestId
442
- // await session.bot.handleGuildMemberRequest(requestId, true)
462
+ // 验证成功,自动同意入群(同样需要 requestId)
463
+ if (requestId) {
464
+ try {
465
+ await session.bot.handleGuildMemberRequest(requestId, true)
466
+ logger.info(`自动同意申请 requestId=${requestId}`)
467
+ } catch (e) {
468
+ logger.warn('自动同意失败', e)
469
+ }
470
+ }
443
471
  // 更新统计信息
444
472
  await updateStats(guildId, 'autoApproved')
445
473
  } else {
@@ -500,6 +528,11 @@ export function apply(ctx: Context, config: Config) {
500
528
  applyTime: new Date()
501
529
  })
502
530
 
531
+ // 如果 guildId 不合法,跳过
532
+ if (!guildId) {
533
+ logger.warn('handleFailedVerification 收到无效 guildId,已放弃发送')
534
+ return
535
+ }
503
536
  // 如果提醒消息被禁用,直接返回
504
537
  if (!config.reminderEnabled || !config.reminderMessage || config.reminderMessage === '') {
505
538
  logger.info(`群 ${guildId} 的提醒消息已被禁用,跳过发送`)