Skip to content

9WiSHao/sb6657-bot

Repository files navigation

sb6657-bot

一个基于 Koishi 的 QQ 机器人插件。核心功能是接入 sb6657.cn 烂梗站,附带若干群娱乐命令(俄罗斯轮盘赌、睡觉禁言)以及群管类被动监听器(复读禁言、刷屏禁言)。


本地运行方法

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 随机抽一条烂梗
开枪 —— 俄罗斯轮盘赌,运气不好就被禁言
睡觉 —— 禁言自己一段时间,来次精致睡眠
投票禁言 <user:user> —— 发起投票禁言某个用户,达到票数后执行禁言
投票解禁 <user:user> —— 发起投票解禁某个用户,达到票数后执行解禁

被动监听器

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

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

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


可配置项列表

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

🔍 搜烂梗 指令 (search)

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

🎲 随机烂梗 指令 (random)

字段 类型 默认值 说明
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} 触发阈值(取自 thresholdsameContentThreshold
{window} 窗口秒数(取自 windowSecondssameContentWindowSeconds

默认文案:

  • 频率计数器 (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 时面板下方字段会自动切换;运行时改模式,本群残留的旧状态会被自动重建。
  • 两个禁言功能可以同时启用:复读针对"团体跟风",刷屏针对"个人连发",互不冲突。
  • 投票禁言:与 开枪 等玩法类似,禁言执行依赖机器人管理员权限;投票状态存于内存,重启即清空。若目标已被管理员手动禁言或自然解禁,插件会通过实时查询自动修正内存状态,保证逻辑正确。

About

a QQ bot of sb6657 which can be used in QQ groups

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors