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 +29 -1
- package/package.json +1 -1
- package/src/index.ts +45 -12
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
|
-
|
|
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
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
|
-
|
|
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
|
-
|
|
442
|
-
|
|
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} 的提醒消息已被禁用,跳过发送`)
|