koishi-plugin-group-inspector
v0.1.2
Published
根据QQ等级、是否在其他群、是否重复加群等条件拒绝入群申请,可以防广告
Readme
koishi-plugin-group-inspector
入群申请智能审核插件:支持“全局正则拒绝 + 频率/多群检测 + 自动通过规则 + 手动审批”全流程。
✨ 特性
- 全局拒绝条件:配置一组正则表达式,验证信息命中任意一条即自动拒绝(用于过滤广告、骚扰模板)。
- 重复 / 多群检测:短时间内多次申请或已在其他受管群时可直接拒绝。
- 自动通过规则:按群配置关键词 (正则) + 最低 QQ 等级 (可选),符合即自动通过。
- 手动审批:未命中拒绝也不满足自动通过时,转发到指定群或私聊等待人工指令处理。
- 批量操作:支持“ya/na/全部同意/全部拒绝”一键处理积压请求。
- 超时策略:人工未处理时自动执行“通过”或“拒绝”。
- 可选调试日志:便于观察匹配与触发过程。
🔄 入群检测流程
插件采用三层过滤策略,按优先级依次处理每个入群请求:
┌─────────────────────┐
│ 收到入群请求事件 │
└──────────┬──────────┘
│
▼
┌─────────────────────────────────────┐
│ 第一层:自动拒绝检测 │
├─────────────────────────────────────┤
│ 1. 全局拒绝正则 (globalDenyPatterns) │
│ └─ 验证信息命中 → 立即拒绝 │
│ │
│ 2. 重复申请检测 (uniqueEnable) │
│ └─ 短时间内重复 → 立即拒绝 │
│ │
│ 3. 多群成员检测 (groups) │
│ └─ 已在其他受管群 → 立即拒绝 │
└──────────┬──────────────────────────┘
│ 未触发拒绝
▼
┌─────────────────────────────────────┐
│ 第二层:自动通过检测 │
├─────────────────────────────────────┤
│ MemberRequestAutoRules 规则匹配: │
│ • 群号匹配 │
│ • 关键词匹配 (可选) │
│ • QQ 等级达标 (可选) │
│ └─ 全部满足 → 立即通过 │
└──────────┬──────────────────────────┘
│ 未匹配通过规则
▼
┌─────────────────────────────────────┐
│ 第三层:手动审批 │
├─────────────────────────────────────┤
│ enableManualApproval = true 时: │
│ 1. 分配请求编号 #N │
│ 2. 发送详情到 notifyTarget │
│ 3. 等待管理员输入指令 │
│ • y/n + 编号:处理单个 │
│ • ya/na:批量处理 │
│ 4. 超时未处理 → 自动执行默认操作 │
│ │
│ enableManualApproval = false 时: │
│ └─ 不处理(保持待审批状态) │
└─────────────────────────────────────┘流程说明
自动拒绝优先级最高
- 任何触发拒绝条件的请求会立即被拒绝,不会进入后续流程
- 如果开启手动审批通知,会发送"已自动拒绝"消息
自动通过次之
- 只有通过第一层检测(未被拒绝)的请求才会进入匹配
- 规则按数组顺序匹配,第一个符合的规则生效
- 关键词和等级条件可以单独使用或组合使用
手动审批兜底
- 既未被拒绝也不符合自动通过的请求进入人工流程
- 需要配置
enableManualApproval: true和notifyTarget - 支持单个和批量处理,支持超时自动处理
典型场景示例
场景 1:广告请求
验证信息: "管理员你好,我是做xxx的,可以通过一下吗"
→ 命中全局拒绝正则 → 立即拒绝 ✗场景 2:正常新人(有验证规则)
验证信息: "2025届-清华-张三"
→ 未触发拒绝 ✓
→ 关键词匹配 "^\d{4}届-.+-.*",等级 ≥ 5 → 自动通过 ✓场景 3:不确定请求
验证信息: "我是学生"
→ 未触发拒绝 ✓
→ 不匹配任何自动通过规则 ✗
→ 发送到管理群等待人工审批 → 管理员输入 y1 通过 ✓场景 4:短时重复申请
同一用户 3 分钟内第 3 次申请
→ 触发频率限制 → 立即拒绝 ✗⚙️ 核心配置概览
| 配置项 | 说明 |
| ----------------------------------------- | ---------------------------------------------------------- |
| groups | 需要进行重复成员检测的已管理群列表 |
| interval | 缓存时间窗口 (分钟),用于频率检测 |
| uniqueEnable / uniqueDenyThreshold | 是否启用多群/频率检测与最大拒绝次数 |
| globalDenyEnable / globalDenyPatterns | 全局拒绝正则开关与正则数组,命中即拒绝 |
| MemberRequestAutoRules[] | 自动通过规则:guildId + 可选 keyword + 可选 minLevel |
| enableManualApproval / notifyTarget | 手动审批开关与通知目标 (guild:123 / private:456) |
| manualTimeout / manualTimeoutAction | 超时分钟数与超时默认操作 (accept/reject) |
| enableDebug | 调试日志开关 |
全局拒绝正则示例
globalDenyPatterns:
- '(?i)管理员你好.*交流学习'
- '(?i)通过一下'
- '(?i)管理员你好'说明:
- 使用标准 JS 正则语法,不需要包裹斜杠
/.../。 - 可以使用分组、前瞻、忽略大小写等高级特性。
- 建议从宽到紧,避免过度误杀。
自动通过规则示例
MemberRequestAutoRules:
- guildId: '123456789'
keyword: '交流|学习|技术'
minLevel: 10以上示例表示:在群 123456789 中,验证信息包含"交流/学习/技术"任意一个且 QQ 等级 ≥ 10 时自动通过。
手动审批配置示例
enableManualApproval: true
notifyTarget: guild:987654321 # 或 private:你的QQ号
manualTimeout: 60 # 60 分钟未处理自动执行默认操作
manualTimeoutAction: reject # 超时默认拒绝 (可选 accept)notifyTarget 格式说明:
guild:群号- 将审批请求发送到指定群聊private:QQ号- 将审批请求发送到指定私聊
注意事项:
- Bot 必须在该群内或能与该用户私聊
- 只有在 notifyTarget 指定的会话中输入指令才会生效
- 建议使用专门的管理群,避免与业务群混淆
手动审批指令
在通知目标里回复:
| 指令 | 作用 | 示例 |
| ------------------------- | ---------------------- | ------------------- |
| y<编号> | 通过指定请求 | y1 / y 1 / Y1 |
| n<编号> [理由] | 拒绝指定请求并附理由 | n1 僵尸号 |
| 通过<编号> | 通过指定请求(中文) | 通过1 / 通过 1 |
| 拒绝<编号> [理由] | 拒绝指定请求(中文) | 拒绝1 不符合要求 |
| ya / YA | 批量通过所有待处理请求 | ya |
| na [理由] / NA [理由] | 批量拒绝所有待处理请求 | na 暂停招新 |
| 全部同意 | 批量通过(中文) | 全部同意 |
| 全部拒绝 [理由] | 批量拒绝(中文) | 全部拒绝 本周暂停 |
指令特性:
- ✅ 支持大小写(
y1/Y1/n1/N1) - ✅ 支持空格(
y 1/n 1) - ✅ 支持中英文混用
- ⚠️ 必须在配置的
notifyTarget群聊/私聊中输入 - ⚠️ 请求编号从 1 开始,每次重启 Koishi 会重置
超时处理
未在 manualTimeout 分钟内处理的请求自动按 manualTimeoutAction 执行,并发送结果通知。
🛠 使用提示
- 建议先只启用手动审批,观察真实验证信息,再逐步添加正则。
- 正则请尽量避免过于宽泛,如
.*或极易误杀的单字。 - 若出现误杀,可在正则前加否定条件或拆分更精细的模式。
