本插件使用 RayleaBot manifest v4 / JSONL v4 / artifact v2,不新增宿主接口。info.json.default_config 同时提供宿主、后端和页面的默认值。
| 顶层键 | 内容 |
|---|---|
trigger_commands |
1–20 个全局开枪触发词,每词 1–32 字,不含空白或 /、\,不可重复或占用「停止轮盘」 |
rules |
默认玩法参数 |
replies |
默认消息文案 |
group_overrides |
最多 500 个群覆盖 |
每个群覆盖由 bot_id、group_id 唯一确定,协议固定为 OneBot11,不绑定连接实例。可选 group_name 仅供展示。rules 和 replies 只保存显式覆盖的字段,缺少字段表示继承,不用 null 表示继承。
| 规则 | 说明 |
|---|---|
random_chambers / chambers / chambers_max |
随机开关、固定值或下限、随机上限;数量 2–100 |
random_bullets / bullets / bullets_max |
随机开关、固定值或下限、随机上限;数量 1–99 |
random_mute / mute_seconds / mute_max_seconds |
随机开关、固定值或下限、随机上限;秒数 1–2592000 |
timeout_seconds |
从开局计算的期限,整数 1–3570 秒;还受宿主当前后台期限约束 |
timeout_mute |
超时是否禁言发起人 |
end_when_all_loaded |
剩余均为实弹时是否提前结束 |
随机上下限允许相等。启用随机时上限不小于下限;关闭随机时仍校验上限本身的类型与数值范围,但不参与实际生成和跨参数比较。每个有效作用域的最大子弹数必须小于最小弹膛数。
所有已声明字段保持严格类型校验,拒绝 null 和非整数数值;未知字段在所有层级(包括数组中的群覆盖对象)忽略,不写回。
回复场景为 start、miss、hit、immune、end、all_loaded、timeout、timeout_hit、timeout_immune、stopped,每条非空且不超过 1000 字。占位符固定为 <bullet>、<chamber>、<remain-bullet>、<remain-chamber>、<mute-s>、<mute-f>、<timeout-s>、<timeout-f>、<target>。拒绝未知占位符,不执行 HTML 或 CQ 消息代码。
设置页是按机器人账号的页面,动作的账号取自宿主核对过的管理事件,只支持 OneBot11:
| 动作 | 语义 |
|---|---|
settings.get |
返回默认设置与当前账号的群覆盖 {values} |
settings.save |
values 为默认设置与当前账号的群覆盖;校验后写入默认设置,只替换当前账号的群覆盖,保留其他账号的覆盖。全部账号的群覆盖合计不超过 500 个;新的默认规则使其他账号的覆盖失效时拒绝。成功返回 {values} |
所有写入在同一把锁内读取插件最近一次提交的配置后合并,排队中的旧配置快照与插件自身写入产生的 config.changed 不会覆盖更新的写入。缺少账号、协议不是 OneBot11 或群覆盖的 bot_id 与当前账号不符时,返回 platform.invalid_request。
无效设置返回 platform.invalid_request,details.field 定位配置项。宿主返回的 plugin.settings_apply_failed 和 details.committed 原样传递,页面保留草稿并提供重试。未知管理动作不产生副作用。
每局在进程内持有不可变规则/回复快照、弹膛排列、位置、剩余子弹和绝对截止时间。按实例、账号、群进行互斥访问,不持久化进度。配置由宿主持久化,页面只有编辑草稿。
开局先验证身份、权限和配置,再转入后台并验证截止时间。每局只转入后台一次,后续消息使用新的普通事件。开局和首枪使用非终态消息动作,后台等待期间不持有群锁或前台并发许可。超时、耗尽、提前结束、管理员停止或身份变化唤醒等待并结束事件;旧局清理仅清理自身。
枪位消费先于禁言动作,失败不回退枪位或自动重试。管理员停止不施加超时惩罚。身份变化或进程停止结束旧局,已提交的平台副作用无法回滚。