npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

koishi-plugin-group-inspector

v0.1.2

Published

根据QQ等级、是否在其他群、是否重复加群等条件拒绝入群申请,可以防广告

Readme

koishi-plugin-group-inspector

npm

入群申请智能审核插件:支持“全局正则拒绝 + 频率/多群检测 + 自动通过规则 + 手动审批”全流程。

✨ 特性

  • 全局拒绝条件:配置一组正则表达式,验证信息命中任意一条即自动拒绝(用于过滤广告、骚扰模板)。
  • 重复 / 多群检测:短时间内多次申请或已在其他受管群时可直接拒绝。
  • 自动通过规则:按群配置关键词 (正则) + 最低 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 时:    │
│ └─ 不处理(保持待审批状态)          │
└─────────────────────────────────────┘

流程说明

  1. 自动拒绝优先级最高

    • 任何触发拒绝条件的请求会立即被拒绝,不会进入后续流程
    • 如果开启手动审批通知,会发送"已自动拒绝"消息
  2. 自动通过次之

    • 只有通过第一层检测(未被拒绝)的请求才会进入匹配
    • 规则按数组顺序匹配,第一个符合的规则生效
    • 关键词和等级条件可以单独使用或组合使用
  3. 手动审批兜底

    • 既未被拒绝也不符合自动通过的请求进入人工流程
    • 需要配置 enableManualApproval: truenotifyTarget
    • 支持单个和批量处理,支持超时自动处理

典型场景示例

场景 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 执行,并发送结果通知。

🛠 使用提示

  • 建议先只启用手动审批,观察真实验证信息,再逐步添加正则。
  • 正则请尽量避免过于宽泛,如 .* 或极易误杀的单字。
  • 若出现误杀,可在正则前加否定条件或拆分更精细的模式。