Skip to content

Repository files navigation

SLDataAPI

⚠️ 安全警告

服务端链路为明文: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


能力概览

能力 说明
数据查询 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
  1. 确认上述依赖 DLL 已就位
  2. 复制 bin/Release/net48/SLDataAPI.dll → LabAPI/plugins/global/
  3. 启动服务器,编辑生成的 config.yml,重启生效
  4. 防火墙放行 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]。


鉴权(2.6.0 PEAK)

通道 凭据 配置位置
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)。

全服广播 / 管理聊天(2.6.0 PEAK)

两个 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

插件:astrbot_plugin_sl_query — /bindlab <IP> <verify_token> 后 /sl 显示 [LAB] 标记。


开发

[Development-Guide] · [Architecture] · [Building]


支持

许可证

GPLv3

About

面向astrbot_plugin_sl_query和FDC控制台的LabAPI服务端信息提供/服务器控制管理插件,通过在服务器上创建http/ws接口来实现远程管理服务器,拥有丰富的管理功能

Topics

Resources

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Contributors

Languages