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-sb6657-bot

v1.1.5

Published

A Koishi-based QQ bot plugin for sb6657.cn

Downloads

191

Readme

sb6657-bot

sb6657.cn 官方 Koishi QQbot 插件,提供烂梗搜索、随机烂梗、热门烂梗,附带若干群娱乐命令(俄罗斯轮盘赌、睡觉禁言)以及群管类被动监听器(复读禁言、刷屏禁言)。


安装方法

在 Koishi 插件市场搜索并安装 sb6657-bot(包名:koishi-plugin-sb6657-bot)即可。

本地运行方法

1. 运行项目并打包

需要 Node 24 版本

pnpm i       # 安装依赖
pnpm build   # 打包(输出到 dist/)

2. 安装至 Koishi

在你自己的 Koishi 根目录下,external 文件夹内(如果没有就自己新建一个),建立 sb6657-bot 文件夹。

然后把项目里打包出来的 dist 文件夹,以及 package.json 文件都丢进去。

随后在你自己 Koishi 根目录的终端里,输入:

yarn add ./external/sb6657-bot

本地安装上这个插件。

最后找到你自己 Koishi 项目的 koishi.yml 文件,在 plugins: 层级下面加上 sb6657-bot: {} 直接硬启用插件。

重启项目(比如说你是 Docker 就重启镜像)。

3. 启用插件

在 Koishi Web 管理端的插件配置里,找到 sb6657-bot 插件,按需配置并启用。

面板按功能分组,每个分组第一项都是 是否启用 开关,可单独开启 / 关闭而不影响其他功能。

所有功能的 enabled 默认都是 false:插件首次安装后所有指令和监听器都不会工作,需要在 Koishi 控制台手动逐项启用。


功能一览

本插件包含两类功能:

  • 主动命令:用户在群里输入对应指令触发
  • 被动监听器:不需要用户主动调用,插件会监听群内消息自动触发

命令列表

| 命令 | 别名 | 说明 | 是否需要群聊 | | ---------------------- | -------------------------------- | ---------------------------------------- | ------------ | | 搜烂梗 <关键词> | 搜 / search / meme | 根据关键词搜索 sb6657 烂梗站的梗 | 否 | | 随机 | 随机烂梗 / 抽烂梗 / random | 随机抽一条烂梗 | 否 | | 热门24h | hot24h / 24h热门 | 获取最近 24 小时的热门烂梗 | 否 | | 热门7d | hot7d / 7d热门 | 获取最近 7 天的热门烂梗 | 否 | | 开枪 | —— | 俄罗斯轮盘赌,运气不好就被禁言 | 是 | | 睡觉 | —— | 禁言自己一段时间,来次精致睡眠 | 是 | | 投票禁言 <user:user> | —— | 发起投票禁言某个用户,达到票数后执行禁言 | 是 | | 投票解禁 <user:user> | —— | 发起投票解禁某个用户,达到票数后执行解禁 | 是 |

被动监听器

| 名称 | 触发条件 | 禁言对象 | | ----------- | ---------------------------------------------------------------------------------------------------------- | -------------------- | | 🔁 复读禁言 | 同一条消息在频道内被连续重复 N 次 | 最后那个跟风复读的人 | | 🚿 刷屏禁言 | 单个用户在滑动时间窗口内发送消息数达到阈值(频率),或在更长窗口内连续发送相同内容次数达到阈值(相同内容) | 刷屏那个用户 |

群聊限制说明:开枪 / 睡觉 以及两个被动监听器都依赖 QQ 禁言能力,只能在群聊中使用,且机器人需要具备群管权限。

群生效范围:两个被动监听器都支持单独配置 所有群 / 白名单 / 黑名单 三种模式,可针对不同 QQ 群独立控制是否开启,避免"一开全开"。


可配置项列表

所有配置项都在 Koishi Web 管理端按功能分组展示。以下分组 ↔ 功能一一对应:

🔍 搜烂梗 指令 (search)

| 字段 | 类型 | 默认值 | 说明 | | ----------------- | ------- | ------- | ----------------------------------------------------------------------- | | enabled | boolean | false | 是否启用本指令 | | minInterval | number | 1000 | 指令触发的冷却时间(毫秒) | | defaultMaxUsage | number | 50 | 普通群友每天的默认搜索次数 | | customLimits | array | [] | VIP 用户的自定义次数白名单(可添加多条),每项含 userId 和 maxUsage |

🎲 随机烂梗 指令 (random)

| 字段 | 类型 | 默认值 | 说明 | | ------------- | ------- | ------- | -------------------------- | | enabled | boolean | false | 是否启用本指令 | | minInterval | number | 1000 | 指令触发的冷却时间(毫秒) |

🔥 热门烂梗 指令 (hotMemes)

启用后会同时注册 热门24h 和 热门7d 两个指令,结果以合并转发消息展示。

| 字段 | 类型 | 默认值 | 说明 | | ------------- | ------- | ------- | -------------------------------- | | enabled | boolean | false | 是否启用两个热门烂梗指令 | | minInterval | number | 1000 | 两个指令共用的冷却时间(毫秒) |

🔫 开枪(俄罗斯轮盘赌)指令 (roulette)

基础字段:

| 字段 | 类型 | 默认值 | 说明 | | ------------- | ------------------------------ | --------------- | -------------------------- | | enabled | boolean | false | 是否启用本指令 | | minInterval | number | 600 | 指令触发的冷却时间(毫秒) | | mode | 'probability' / 'sequence' | 'probability' | 游戏模式,两种模式互斥 |

模式 A:放回抽样(概率模式)

每次开枪独立判定,中弹概率恒定;空枪后禁言时间叠加增长。

| 字段 | 类型 | 默认值 | 说明 | | ------------- | ------------ | -------------------------- | ---------------------------------- | | probability | number (0-1) | 0.2 | 每次中弹概率 | | initTime | number | 180 | 每轮初始禁言时间(秒),无上限 | | timeStepMin | number | 60 | 空枪后叠加的最小时间(秒),无上限 | | timeStepMax | number | 180 | 空枪后叠加的最大时间(秒),无上限 | | msgHit | string | 见下 | 中弹文案 | | msgNewRound | string | 见下(可清空,留空则不发) | 中弹后下一轮开始时追加的文案 | | msgMiss | string | 见下 | 空枪文案 |

模式 B:不放回抽样(弹巢模式)

N 格弹巢中装 1 发子弹,每开一次减少一格,保证 N 枪内必定中弹。禁言时间固定。

| 字段 | 类型 | 默认值 | 说明 | | ------------- | ------ | ------ | --------------------------------- | | chambers | number | 6 | 弹巢总格数(N 格装 1 发),无上限 | | muteTime | number | 300 | 中弹后禁言时间(秒),无上限 | | msgHit | string | 见下 | 中弹文案 | | msgNewRound | string | 见下 | 新一轮装填后追加的文案 | | msgMiss | string | 见下 | 空枪文案 |

开枪文案占位符

所有开枪文案都支持 {key} 占位符替换:

| 占位符 | 含义 | 适用模式 | | ------------- | --------------------------------------------- | ----------------------- | | {at} | 艾特触发命令的用户 | 全部 | | {time} | 格式化后的时长,如 1分钟30秒 / 1小时5分钟 | 全部 | | {seconds} | 原始秒数 | 全部 | | {chamber} | 当前是第几枪(1-based) | 仅弹巢模式 | | {remaining} | 空枪后弹巢剩余格数 | 仅弹巢模式(msgMiss) | | {total} | 弹巢总格数 | 仅弹巢模式 |

默认文案:

  • 概率模式 · 中弹:钢铁般的左键,无解的直架!{at} 被杀死了!
  • 概率模式 · 新一轮:加油吧{at} ,我们科隆major干回来。下一轮初始禁言时长为{time}
  • 概率模式 · 空枪:先瞄准再空枪。{at} 恭喜你躲过一劫!禁言时间将增加到{time}!
  • 弹巢模式 · 中弹:Bang!第{chamber}/{total}枪抽中了!{at} 被杀死了!
  • 弹巢模式 · 空枪:{at} 咔哒——空的。弹巢剩余{remaining}/{total}格……
  • 弹巢模式 · 新一轮:弹巢重新装填完毕,共{total}格。

😴 睡觉 指令 (sleep)

| 字段 | 类型 | 默认值 | 说明 | | ------------- | ------- | ----------------- | -------------------------- | | enabled | boolean | false | 是否启用本指令 | | minInterval | number | 600 | 指令触发的冷却时间(毫秒) | | minSeconds | number | 21600(6 小时) | 睡眠最短时长(秒),无上限 | | maxSeconds | number | 28800(8 小时) | 睡眠最长时长(秒),无上限 | | msgSleep | string | 见下 | 睡觉文案 |

文案占位符同"开枪通用占位符":{at} / {time} / {seconds}。

默认文案:{at} 好好睡觉,{time}后再醒来吧!

🔁 复读禁言 (repeatMute)

被动监听器。当同一条消息在频道内被连续重复 N 次,会禁言最后那条复读的人。

| 字段 | 类型 | 默认值 | 说明 | | ----------------------- | --------------------------------------- | -------------- | ------------------------------------------------------ | | enabled | boolean | false | 是否启用本功能(关闭后不再监听) | | guildMode | 'all' / 'whitelist' / 'blacklist' | 'all' | 群生效范围:所有群 / 白名单 / 黑名单 | | guilds | string[] | [] | 群号列表(白名单 / 黑名单模式下使用) | | minTimes | number | 10 | 触发禁言所需的最少重复次数 | | muteSeconds | number | 60(1 分钟) | 基础禁言时长(秒),无上限。实际 = 此值 × 随机倍率 | | maxDurationMultiplier | number | 5 | 随机倍率上限(1 ~ 该值随机取整数) | | msgMute | string | 见下 | 触发禁言时的提示文案 |

复读禁言文案占位符

| 占位符 | 含义 | | --------------- | ------------------------------------------------- | | {at} | 艾特触发用户 | | {time} | 本次禁言时长(格式化,如 5分钟 / 1小时5分钟) | | {seconds} | 本次禁言秒数 | | {times} | 触发所需重复次数(取自 minTimes) | | {baseSeconds} | 基础禁言秒数(取自 muteSeconds) | | {multiplier} | 本次随机倍率 |

默认文案:检测到复读,已禁言{time}

🚿 刷屏禁言 (spamMute)

被动监听器。内置两个相互独立、互不干扰的计数器,按 群:用户 维度分别维护:

  1. 频率计数器(始终启用,受 enabled 控制) 单个用户在 windowSeconds 秒内发送消息数达到 threshold,触发禁言。 抓"短时间内连发"。
  2. 相同内容计数器(受 sameContentEnabled 单独开关控制) 单个用户在 sameContentWindowSeconds 秒内连续发送同样内容的次数达到 sameContentThreshold,触发禁言。一旦发了不同内容就会重置为新内容。 抓"间隔几秒就发一次同样内容"这种慢速刷屏 / 复读。

两个计数器同时工作,配置上互不影响。同一条消息若同时命中(极少见),只会触发优先判定的相同内容计数器,不会被同一条消息重复禁言两次。

频率计数器字段

| 字段 | 类型 | 默认值 | 说明 | | --------------- | --------------------------------------- | --------------- | --------------------------------------------- | | enabled | boolean | false | 是否启用本功能(关闭后两个计数器都不工作) | | guildMode | 'all' / 'whitelist' / 'blacklist' | 'all' | 群生效范围:所有群 / 白名单 / 黑名单 | | guilds | string[] | [] | 群号列表(白名单 / 黑名单模式下使用) | | windowSeconds | number | 6 | 频率滑动时间窗口大小(秒),判定"最近 N 秒内" | | threshold | number | 5 | 触发阈值:窗口内消息数达到该值即触发 | | muteSeconds | number | 300(5 分钟) | 触发后禁言时长(秒),无上限 | | msgMute | string | 见下 | 触发禁言时的提示文案 |

相同内容计数器字段

| 字段 | 类型 | 默认值 | 说明 | | -------------------------- | ------- | ---------------- | ---------------------------------------------------------------------------- | | sameContentEnabled | boolean | false | 是否启用相同内容检测(与频率计数器互不影响,可单独开关) | | sameContentWindowSeconds | number | 300(5 分钟) | 相同内容滑动时间窗口大小(秒),无上限。一旦用户发送不同内容,本计数器会重置 | | sameContentThreshold | number | 5 | 触发阈值:窗口内连续发送相同内容次数达到该值即触发 | | sameContentMuteSeconds | number | 600(10 分钟) | 触发后禁言时长(秒),无上限 | | msgSameContentMute | string | 见下 | 触发禁言时的提示文案 |

刷屏禁言文案占位符

两个计数器的文案占位符同名,含义按各自计数器解释({count}、{threshold}、{window} 都取所属计数器的字段):

| 占位符 | 含义 | | ------------- | -------------------------------------------------------------- | | {at} | 艾特触发用户 | | {time} | 本次禁言时长(格式化) | | {seconds} | 本次禁言秒数 | | {count} | 本次窗口内实际消息数 / 相同内容连续次数 | | {threshold} | 触发阈值(取自 threshold 或 sameContentThreshold) | | {window} | 窗口秒数(取自 windowSeconds 或 sameContentWindowSeconds) |

默认文案:

  • 频率计数器 (msgMute):{at} 刷屏了!{window}秒内发送了{count}条消息,禁言{time}冷静一下。
  • 相同内容计数器 (msgSameContentMute):{at} 刷屏了!{window}秒内连续发送了{count}条相同内容,禁言{time}冷静一下。

群生效范围模式说明

| 模式 | 行为 | | --------------------- | ------------------------------------------------------- | | all(所有群) | 无论哪个群都生效,guilds 字段忽略(但填写内容会保留) | | whitelist(白名单) | 仅 guilds 列出的群生效 | | blacklist(黑名单) | 除 guilds 列出的群之外的群生效 |

复读禁言和刷屏禁言各自有独立的 guildMode / guilds,可以互不干扰地配置。

🗳️ 投票禁言 指令 (voteMute)

| 字段 | 类型 | 默认值 | 说明 | | ------------------ | --------------------------------------- | ------------------ | ---------------------------------------------------- | | enabled | boolean | false | 是否启用投票禁言与解禁功能 | | guildMode | 'all' / 'whitelist' / 'blacklist' | 'all' | 群生效范围模式 | | guilds | string[] | [] | 群号列表(白名单/黑名单模式下使用) | | muteNeedsVotes | number | 5 | 禁言所需票数 | | unmuteNeedsVotes | number | 5 | 解禁所需票数 | | muteSeconds | number | 86400(24 小时) | 投票禁言时长(秒) | | enableUnmute | boolean | false | 是否允许投票解禁非投票禁言的用户(如管理员手动禁言) |

  • 投票禁言会实时查询目标当前是否已被禁言(不限来源),已禁言则禁止发起投票。
  • 解禁投票默认只能解禁由本插件投票产生的禁言;若开启 enableUnmute,则可对任何被禁言用户发起解禁投票。
  • 群友输入指令时需使用群聊的 @ 功能(蓝色艾特),手打昵称无法识别,请参照提示。
  • 每人在同一种投票中只能投一票,不能给自己投票,也不能投票禁言机器人。

注意事项

  • QQ 禁言上限:QQ 官方群禁言最长约 30 天。本插件不做配置上限(按需无限填写),但若传入超过官方允许的值,muteGuildMember 会抛错,插件会捕获并给出可读提示,不会直接崩溃。
  • 权限:所有涉及禁言的功能(开枪 / 睡觉 / 复读禁言 / 刷屏禁言)都依赖机器人的群管禁言权限,请确保机器人已被设置为管理员。
  • 多群隔离:开枪 的游戏状态按群独立管理;复读禁言按子频道(cid)独立计数;刷屏禁言按 群:用户 独立计数。互不干扰。
  • 状态持久化:上述所有状态都存在内存中,插件重启/重载会重置。
  • 互斥模式:开枪 两种模式互斥,切换 mode 时面板下方字段会自动切换;运行时改模式,本群残留的旧状态会被自动重建。
  • 两个禁言功能可以同时启用:复读针对"团体跟风",刷屏针对"个人连发",互不冲突。
  • 投票禁言:与 开枪 等玩法类似,禁言执行依赖机器人管理员权限;投票状态存于内存,重启即清空。若目标已被管理员手动禁言或自然解禁,插件会通过实时查询自动修正内存状态,保证逻辑正确。