服务端链路为明文:HTTP(默认 8081)、控制/语音 WebSocket(
ws://,语音默认 8082)。中间节点可窃听凭据与语音;凭据泄露等同服务器被控。防火墙、反向代理(HTTPS/WSS)、凭据强度与保管由使用者自行负责;相关后果本项目与作者不承担责任。建议仅内网使用,对外必须走加密代理。详见 Wiki [Security-Model]。
版本: 2.6.0(PEAK) · LabAPI 原生插件(v2.4 起,非 EXILED)
依赖: LabAPI(游戏自带)· 0Harmony 2.3.x · Newtonsoft.Json 13.0.x(后两者须放在 LabAPI/dependencies/global/,缺失会加载失败)
产品版本是 2.6.0 PEAK(自 preview/v2.6.0-DevOnly 合入 main)。
📚 接口与开发文档: https://github.com/DNTOF/SLDataAPI/wiki
- 本版本(2.6.0 PEAK /
main):[Preview-HTTP-API] · API Key + RA 对齐路径 - 上一稳定线 2.5.x:[HTTP-API] ·
control_token
| 能力 | 说明 |
|---|---|
| 数据查询 | GET /get_sl_data;适配发现:GET /plugins/adapted + adapted_plugins(verify_token):人数、回合、核弹、玩家(SteamID/坐标)、DNT_OF 插件状态 |
| 控制接口 | /control/*:玩家/回合/地图/CASSIE/全服广播/管理聊天/控制台/插件/文件/日志/举报等;HTTP 或 WS 二选一 |
| 事件流 | 控制 WS 订阅:回合、进出、死亡、电梯、门等(v2.5.4+) |
| 语音转发 | 独立端口 WS,全频道 48kHz PCM(SPY) |
| 语音录音 | 分轨 WAV + 时间轴 TSV,按局保留(v2.5+);可选 WebDAV 自动上传定稿 zip(默认关) |
| 举报 | Esc 服务器设置面板 + /control/reports(默认关) |
| 审计 | 侵入性控制操作写入 control_log.json(默认开) |
从 EXILED 迁移:DLL 放 LabAPI/plugins/global/;配置 LabAPI/configs/<端口>/SLDataAPI/config.yml;启停用 properties.yml 或 /control/plugins。同服 EXILED 插件仍可通过反射桥探测/控制。
| 文件 | 版本 | 路径 |
|---|---|---|
0Harmony.dll |
2.3.x | %AppData%/SCP Secret Laboratory/LabAPI/dependencies/global/ |
Newtonsoft.Json.dll |
13.0.x | 同上 |
编译需本机 SCP:SL 专用服务器与 LabAPI 目录(SCPSL_DIR / LABAPI_DIR,见 Wiki [Building])。
dotnet build -c Release- 确认上述依赖 DLL 已就位
- 复制
bin/Release/net48/SLDataAPI.dll→LabAPI/plugins/global/ - 启动服务器,编辑生成的
config.yml,重启生效 - 防火墙放行
http_port(及voice_port若启用)
路径:LabAPI/configs/<端口或 global>/SLDataAPI/config.yml(键名 snake_case)
debug: false
verify_token: "your_secret_token" # 必须改成强随机值;默认/弱口令会 fail-closed 关闭数据口
http_port: 8081
push_interval_seconds: 8
control_enabled: false # 关则所有 /control/* → 404
control_transport: http # http | ws(硬互斥)
# control_token 已废弃(2.6.0 PEAK 忽略并打警告)
auto_update_check: true # 启动 + 72h 静默复查,同一 GitHub 通道
auto_update_install: true # 有稳定版时下载替换 DLL(与原先启动检查相同)
# auto_update_check_interval_hours: 72 # 距上次检查不足则跳过(防重启刷 API);0=仅启动查一次
voice_enabled: false
voice_port: 8082
voice_record_enabled: false
# 定稿 zip 可选 WebDAV 自动上传(默认关;失败入队退避重试,不阻塞游戏)
webdav_upload_enabled: false
webdav_url: "" # 仅 https:// 目录 URL,或含 {filename} 的模板
# apikey_copy_to_clipboard: false # Windows 创建 Key 后是否复制到剪贴板(默认关)
webdav_username: ""
webdav_password: ""
# webdav_remote_path_prefix: ""
# webdav_timeout_seconds: 30
# webdav_max_retries: 5
# webdav_retry_interval_seconds: 15
report_enabled: false
control_log_enabled: true完整字段、YAML 坑、token 写法见 Wiki [Configuration]。
| 通道 | 凭据 | 配置位置 |
|---|---|---|
GET /get_sl_data |
verify_token(Authorization: Bearer / X-SLDataAPI-Token;?token= 仍兼容但已弃用) |
config.yml |
/control/*、控制 WS、语音口 |
API Key(明文写入一次性 txt,命令只回路径) | apikey.config(同配置目录) |
控制面请求头(二选一):
Authorization: Bearer <api_key>
X-SLDataAPI-Key: <api_key>已移除:X-Control-Token、控制面 URL ?token= / ?key=。
本地管理 Key(不可经远程 /control/console/command 执行):
sldataapi apikey create <id> <duty|admin> [note]
sldataapi apikey list
sldataapi apikey revoke <id>
sldataapi / slda 管理 CLI 已被远程控制通道(HTTP + WS 的 /control/console/command)硬拒绝,且 create / revoke / list 在远程执行标记下会再次拒绝。本地控制台(LocalAdmin / RemoteAdmin / 游戏内控制台)执行会立即生效,不再弹出确认窗口或 [y/N] 提示。若用权限插件收窄 RemoteAdmin,请同时拒绝 sldataapi / slda。create 成功后明文写入配置目录下 apikey_once_<id>.txt(同 id 覆盖上一份),命令 response 只回该路径(不回密钥,避免进入 LocalAdmin 命令历史);请尽快复制到密码管理器。文件在创建 5 分钟后自动删除(若你已删/移走则跳过);也可自行提前删除。Linux 会尽力 chmod 0600(失败不阻断创建)。Windows 剪贴板复制默认关闭(apikey_copy_to_clipboard: true 才开启)。duty 偏只读,默认不授予 /control/audit/list;admin 按端点 catalog 授权,不会自动开放 catalog 为 false 的路径(控制台、插件、文件等),可用 endpoints_override 单独放开。
路径与 curl 示例:Wiki [Preview-HTTP-API]。2.5.x 仍用 [HTTP-API](control_token)。
两个 SERVER 写端点:admin catalog 默认开放,duty 默认拒绝(与 /control/cassie 同级)。走主线程 + 控制审计。
| 路径 | 作用 | 游戏 API |
|---|---|---|
POST /control/broadcast |
全服屏幕中央广播(RA Broadcasting) | LabAPI Server.SendBroadcast |
POST /control/staffchat |
RA 管理聊天,仅有 AdminChat 权限的玩家可见 |
LabAPI Server.SendAdminChatMessage |
单人广播仍用 /control/moderation/msg(msg_type: "broadcast" → player.SendBroadcast)。
POST /control/broadcast
Authorization: Bearer <admin_key>
Content-Type: application/json
{"message":"服务器将于 5 分钟后重启","duration_seconds":10}duration_seconds 可选:≤0 回落到 5,上限 60(与 /control/moderation/msg 相同)。可选 clear_previous: true 先清空当前广播队列。
POST /control/staffchat
Authorization: Bearer <admin_key>
Content-Type: application/json
{"message":"请值班注意 173"}可选 is_silent: true:只走管理聊天频道,不附带屏幕广播提示。message 必填,上限 500 字符;空白或超长返回中文 400。
| 类型 | 地址 |
|---|---|
| 数据 | GET http://<host>:8081/get_sl_data + Authorization: Bearer <verify_token>(?token= 仍兼容但已弃用,后续版本将移除) |
| 控制 HTTP | POST http://<host>:8081/control/... + API Key 头(含 /control/broadcast、/control/staffchat) |
| 控制 WS | ws://<host>:8081/control + 握手带 API Key 头(control_transport: ws) |
| 语音 | ws://<host>:8082/ws · GET :8082/status + API Key |
WS 协议、语音帧格式、错误码:[WS-Control-Protocol] · [Voice-Forwarding]。
插件:astrbot_plugin_sl_query — /bindlab <IP> <verify_token> 后 /sl 显示 [LAB] 标记。
[Development-Guide] · [Architecture] · [Building]
- QQ 群:984840871
- Issues:https://github.com/DNTOF/SLDataAPI/issues