phira-mp-plus-server [OPTIONS]
-p, --port <PORT> 覆盖 TCP 监听端口(内置默认 12346)
-d, --plugins-dir <DIR> 覆盖 WASM 插件目录(内置默认 "plugins")
-e, --ext-file <FILE> 覆盖扩展数据文件(内置默认 "data/extensions.json")
--no-cli 禁用交互式 CLI 管理控制台
-l, --log-file <NAME> 日志文件基础名称 [默认: "phira-mp-plus"]
-m, --monitor <IDS>... 覆盖允许旁观的用户 ID
--http-port <PORT> 覆盖 HTTP/SSE 端口(内置默认 12347)
--proxy-port <PORT> 覆盖可信转发头兼容端口(不是 PROXY v1/v2;内置默认 0)
-c, --config <FILE> YAML 配置文件路径 [默认: "server_config.yml"]
-h, --help 显示帮助信息
-V, --version 显示版本号
配置加载规则:默认读取 server_config.yml,也可通过 --config <FILE> 指定;只有显式提供的命令行参数才覆盖 YAML。配置文件存在但解析或校验失败时服务端拒绝启动。RUST_LOG、NO_COLOR 等环境变量只影响日志或终端显示。完整配置说明见 deployment.md。
服务器在普通交互式终端和 tmux 中启动 ratatui 管理控制台。GNU Screen、Linux console、ansi/cons25 等兼容性较差的终端会进入保守 TUI:不启用备用屏幕、鼠标捕获或 Bracketed Paste,并修正 Ctrl+H Backspace;如果 TUI 初始化失败,会自动回落到逐行兼容控制台。重定向、systemd 和其他非 TTY 环境始终使用逐行控制台。设置 NO_COLOR 可关闭颜色。
TUI 快捷键:Tab 补全、Ctrl+A/E 跳到行首/行尾、Ctrl+B/F 左右移动、Alt+←/→ 按词移动、Ctrl+W 删除前一个词、Alt+Delete 删除后一个词、Ctrl+K 删除到行尾、Ctrl+L 清屏、PgUp/PgDn 或 Shift+↑/↓ 滚动日志。
<必填参数>— 尖括号表示必须提供[可选参数]— 方括号表示可选[默认值]— 方括号内等号表示默认值
查看命令帮助。help 无参数时显示全部命令清单。
| 参数 | 类型 | 说明 |
|---|---|---|
command |
str (可选) |
要查看详情的命令名,如 help room close |
all |
字面量 | 完整视图(含命令级别统计) |
advanced |
字面量 | 仅显示高级命令 |
dev |
字面量 | 仅显示开发诊断命令 |
输出: 命令清单或指定命令的详细说明(用法、参数、别名、示例)
示例:
help
help room close
help all
help groups
关闭服务器。
输出: 终止进程(无输出)
显示服务器版本号。
输出: ◆ PMP v0.5.2087(CARGO_PKG_VERSION)
验证当前加载的配置并显示脱敏摘要(含活跃会话/房间数,吸收原 status/doctor)。
输出: 服务端版本、端口、数据库、插件目录、容量、保留期、活跃会话/房间数等
查看活跃房间列表。
输出: 每行一个房间,格式:
<room_id> │ 用户 N │ <InternalRoomState> │ 谱面 <chart_id>
| 字段 | 说明 |
|---|---|
| room_id | 房间名称 |
| 用户数 | 房间内玩家数 |
| 状态 | 房间状态 (Wait/Playing/SelectChart) |
| 谱面 | 当前谱面 ID |
查看房间详情。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
输出: 房间全部信息:状态、用户列表、房主、封禁列表、配置等。
创建无人持久空房间。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
phira_api_endpoint |
str (可选) |
可选 Phira API endpoint 覆盖 |
输出: 创建成功 或 房间 <room_id> 已存在
解散房间。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
输出: 成功消息或错误
修改房间设置。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
field |
str |
支持字段:lock cycle hidden persistent degraded host chart-id phira_api_endpoint tournament live |
value |
因字段而异 | lock/cycle/hidden/persistent/degraded/tournament/live 接受 true/false;host 接受用户 ID、?/system(系统房主) |
live true/false: 房间 live 状态(建房自动置 true,此处可手动开关,供 Panel/PPB 控制)。
tournament true: 赛事模式房间(房间级配置,非全局)。开启后禁用 PMP 默认交互行为——准备倒计时自动开赛、每轮结算广播、房主自动转移、cycle 自动轮换、Playing 期 late-join 确认、聊天,全部交由 PPB 编排(PPB 经 OpenUDS room.set_tournament 设置)。
输出: 执行结果消息
字段说明:
persistent true:把房间转为持久空房间(房间空置后保留,服务器重启自动恢复);persistent false取消degraded true:清除房间持久化降级状态host ?/host system:设为系统房主(host -1)
让房间进入准备状态,或强制指定玩家准备。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
user_id |
int (可选) |
不指定则房间进入准备状态;指定则强制该玩家准备 |
输出: 准备状态结果
服务端强制发起房间游戏;客户端完成谱面加载并准备后正式开始。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
输出: 游戏开始状态
取消管理员发起的游戏开始。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
输出: 取消结果
从房间踢出用户。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
user_id |
int |
目标用户 ID |
输出: 踢出结果。目标客户端会立即收到 LeaveRoom(Ok) 并退出本地房间状态,不再等待超时重连。
强制迁移用户到指定房间。原房间 ID 会被替换,此操作不可逆。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
目标房间名 |
user_id |
int |
用户 ID |
monitor |
str (可选) |
指定为 monitor 时用户以旁观者加入 |
输出: 迁移结果
查看房间游玩历史。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
输出: 历史轮次列表,含谱面 ID 和各玩家成绩
查看房间轮次列表。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
输出: 轮次 UUID 列表
查看指定轮次详情。
| 参数 | 类型 | 说明 |
|---|---|---|
round_uuid |
uuid |
轮次 UUID |
输出: 该轮次的完整数据(谱面、所有玩家提交的成绩)
查看房间 UUID。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
输出: 房间唯一标识 UUID
将用户加入房间黑名单。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
user_id |
int |
用户 ID |
reason |
str |
可选封禁原因 |
输出: 封禁结果。若目标当前仍在房间,服务端先向其显示封禁原因,再立即发送离房响应并移出房间。
将用户移出房间黑名单。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
user_id |
int |
用户 ID |
输出: 已解除封禁 或 未找到封禁记录
查看房间黑名单。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
输出: 黑名单用户列表(含用户 ID 和原因)
将用户加入房间白名单。白名单非空时,仅白名单内用户(+ 房主 + 管理员)可加入该房间;为空则开放。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
user_id |
int |
Phira 用户 ID |
若该用户同时在房间黑名单中,提示黑名单优先(黑名单仍然生效)。
将用户移出房间白名单。
查看房间白名单(为空显示"开放加入")。
清空房间白名单,恢复开放加入。
查看在线用户列表。
输出: 每行一个用户,格式:
<user_id> │ <user_name> │ IP <addr> │ 在线 N │ 房间 <room_id> │ [host] [monitor]
| 字段 | 说明 |
|---|---|
| user_id | 用户数字 ID |
| user_name | 用户名 |
| IP | 连接 IP 地址 |
| 在线时长 | 已连接时间 |
| 房间 | 当前所在房间 |
| host/monitor | 身份标签 |
踢出在线用户。
| 参数 | 类型 | 说明 |
|---|---|---|
user_id |
int |
用户 ID |
输出: Kicked user <user_id> from server
全局封禁用户。
| 参数 | 类型 | 说明 |
|---|---|---|
user_id |
int |
用户 ID |
reason |
str (可选) |
封禁原因 |
输出: 封禁确认消息
取消全局封禁。
| 参数 | 类型 | 说明 |
|---|---|---|
user_id |
int |
用户 ID |
输出: 解封确认消息
查看全局封禁列表。
输出: 被封禁的用户 ID 及其原因列表
封禁指定 IP 地址。
| 参数 | 类型 | 说明 |
|---|---|---|
ip |
str |
IP 地址 |
reason |
str (可选) |
封禁原因 |
输出: 封禁确认消息
取消指定 IP 封禁。
| 参数 | 类型 | 说明 |
|---|---|---|
ip |
str |
IP 地址 |
输出: 解封确认消息
查看被封禁的 IP 列表。
输出: 被封禁的 IP 及原因列表
查看用户使用过的 IP 历史。
| 参数 | 类型 | 说明 |
|---|---|---|
user_id |
int |
用户 ID |
输出: 用户使用过的 IP、次数与最近使用日期
向所有已连接用户发送消息。
| 参数 | 类型 | 说明 |
|---|---|---|
message |
str |
消息文本 |
输出: Sent to N users
向指定房间内所有用户发送消息。
| 参数 | 类型 | 说明 |
|---|---|---|
room_id |
str |
房间名 |
message |
str |
消息文本 |
输出: Sent to room: N users
向指定用户发送私信。
| 参数 | 类型 | 说明 |
|---|---|---|
user_id |
int |
目标用户 ID |
message |
str |
消息文本 |
输出: Sent direct message
查看管理员 Phira ID 列表。
输出: 管理员 ID 列表
添加管理员。
| 参数 | 类型 | 说明 |
|---|---|---|
PhiraID |
int |
Phira 用户 ID |
输出: Added admin <PhiraID>
移除管理员。
| 参数 | 类型 | 说明 |
|---|---|---|
PhiraID |
int |
Phira 用户 ID |
输出: Removed admin <PhiraID>
替换整个管理员列表。
| 参数 | 类型 | 说明 |
|---|---|---|
PhiraID... |
int... |
一个或多个 Phira 用户 ID,空格分隔 |
输出: Set admin IDs: [N]
列出所有已加载插件。
输出: 插件列表,每行格式:
<name> v<version> │ <author> │ <enabled|disabled>
启用插件。
| 参数 | 类型 | 说明 |
|---|---|---|
name |
str |
插件名 |
输出: Enabled plugin <name>
禁用插件。
| 参数 | 类型 | 说明 |
|---|---|---|
name |
str |
插件名 |
输出: Disabled plugin <name>
重新加载所有插件。
输出: 重载结果
查看插件详情。
| 参数 | 类型 | 说明 |
|---|---|---|
id_or_name |
str |
插件 ID 或名称 |
输出: 插件详细信息(名称、版本、作者、描述、能力集、注册路由)
调用插件导出 API。
| 参数 | 类型 | 说明 |
|---|---|---|
id_or_name |
str |
插件 ID 或名称 |
method |
str |
API 方法名 |
JSON_ARRAY |
json (可选) |
JSON 数组格式参数 |
输出: API 调用返回的 JSON
卸载插件(删除插件文件、清除扩展与私有数据,不可撤销)。
| 参数 | 类型 | 说明 |
|---|---|---|
name |
str |
插件名 |
-y |
flag | 跳过确认直接删除(供 OpenUDS / 非交互调用) |
输出: Removed plugin <name> 或错误信息
交互环境(TTY)删除需输入
y确认;非 TTY 环境自动取消,需用-y(OpenUDS 经cli.execute "plugin remove X -y"可完成删除)。
运行基准测试(进程内纯内部调用版)。直接调用服务器内部 API 生成负载,
不跑 phira 线协议、不拉起独立子进程、不依赖独立数据库(复用当前实例,
虚拟会话用负数 id、房间用 bench- 前缀,结束后全清理,不影响真实玩家)。
运行期间 CLI 输入被锁定,输入框上方显示状态矩形(会话数/游玩房间/CPU/RAM/
速率/进度条),按 x 键结束;结束(手动或正常完成)显示报告。
两种模式:
fixed—— 维持最大同时在线游玩房间数,持续到时长或取消。ramp—— 自动加压直到 CPU / RAM 触顶后维持,持续到时长或取消。
会话数由房间自动推导:每个房间 2 个独立虚拟成员,
sessions = playing_rooms × 2。
| 参数 | 类型 | 说明 |
|---|---|---|
--playing-rooms <M> |
int |
fixed:最大同时在线游玩房间数 |
--cpu <P> |
float |
ramp:CPU 上限(百分比 0-100) |
--ram <S> |
str |
ramp:RAM 上限(如 4096m / 4g / 字节数) |
--duration <D> |
str (可选) |
时长:30 / 10m / 2h(缺省 60s) |
--forever |
flag | 永久运行(直到 x 键结束) |
--output <fmt> |
str (可选) |
输出格式:text(默认)、json、markdown |
示例:
benchmark run fixed --playing-rooms 50 --duration 10m
benchmark run fixed --playing-rooms 100 --forever
benchmark run ramp --cpu 80 --ram 4g --duration 1h
输出: Benchmark 报告(时长、峰值/平均会话数与游玩房间数、CPU%、RSS、
命令速率、错误数、模式参数、ramp 触顶到达点)。报告同时写入当前实例的
mp_runtime_benchmark_reports 表。
一次打印全部运行时诊断分区:command registry / Phira HTTP / events / schema / persistence / latency。
输出: 各分区的统计与诊断信息(一次出完)。
重新读取启动时 --config 指定的 YAML 文件。热更新 chat_enabled 和 monitors;YAML 中显式声明的管理员/压测凭据也会同步更新。显式 --monitor 始终保持高于 YAML 的优先级;YAML 与持久化文件都未声明的动态管理员/凭据状态不会被重载误清空。端口、目录、数据库、限流和持久化内部策略仍需重启。
输出: 实际读取路径、已热更新字段及错误信息。配置失败或运行时锁繁忙时保留现有运行配置。
查看已注册扩展字段。
输出: 已注册的用户扩展字段列表(名称、默认值、注册者、描述)
获取扩展数据。
| 参数 | 类型 | 说明 |
|---|---|---|
target |
str |
user:<id> 或 room:<id> 格式 |
key |
str |
字段键名 |
输出: 扩展数据的 JSON 值,或 Field not found
扩展字段命令只提供查看能力;写入由服务端内部逻辑、WIT/host API 或插件完成。
查看游玩过的玩家总数。
输出: ◆ 玩家总数: N
查看欢迎语配置与占位符说明。
输出: 欢迎语消息列表、可用占位符及当前配置
欢迎语模板:server_config.yml 的 welcome.messages[lang](单文件配置)> 内置国际化默认(en-US/zh-CN/zh-TW 三语键集一致,随版本更新)。缺省不配置 → 内置国际化,按用户语言渲染。welcome-config 命令可查看内置默认与占位符。
开关玩家建房功能。
| 参数 | 类型 | 说明 |
|---|---|---|
on/enable/1 |
— | 开启玩家建房 |
off/disable/0 |
— | 关闭玩家建房 |
无参数时显示当前开关状态。输出: ◆ 玩家建房:已开启/已关闭
开关新用户连接(运维工具:维护时防止新玩家进入,等存量玩家下线)。
| 参数 | 类型 | 说明 |
|---|---|---|
on/enable/1 |
— | 开启新用户连接 |
off/disable/0 |
— | 关闭新用户连接(已连接用户重连不受影响) |
无参数时显示当前状态。关闭时新用户 Authenticate 被拒(auth-not-accepting),已在 server.users 中的用户重连放行。该标志运行时切换,config reload 不重置。
管理员在聊天消息中发送 /命令 可直接执行原生 CLI 语法(空格分隔,无字符限制,无需 _ 房间名转换语法)。命令输出以 [CLI] 前缀回显给发送者,不广播给房间。
/rooms
/connections off
/server stats
查看 WAL 状态统计。
输出: WAL 文件路径、文件大小
列出 dead-letter 记录摘要。
| 参数 | 类型 | 说明 |
|---|---|---|
limit |
int (可选) |
显示最近 N 条(默认 10) |
输出: dead-letter 总记录数与最近条目摘要
重放 dead-letter 事件到持久化队列。
输出: 已提交重放的事件数
自动更新默认关闭。启用后服务器启动时与每隔 check_interval_secs 检查
GitHub Release;检测到新版本时自动"预约"(写入 pending_update,幂等,
不重复预约),下线满 min_idle_minutes 分钟后由后台执行器自动下载替换
并尝试重启。手动 update schedule 与自动更新统一走该预约流程。
检查失败静默降级(只记 warn),不影响运行。
自动更新命令入口。无子命令时显示全部可用子命令。
子命令: update check(检查版本)、update apply(立即更新,不预约)、update force(强制立刻更新)、update schedule(预约更新)、update cancel(取消预约)、update auto [on|off](开关自动更新)
检查 GitHub 最新 Release 并与当前版本对比。
输出: 当前版本、最新版本、是否有更新、发布页链接
示例:
update check
立即启动更新流程(不预约):检查在线玩家与空闲时长,满足条件则下载并
替换可执行文件、尝试重启;有玩家在线或最近下线未满 min_idle_minutes
时只返回原因、不预约。需要自动执行时可改用 update schedule 预约。
输出: 更新结果或拒绝原因
强制立即更新,跳过在线玩家与空闲时长检查。
输出: 更新结果或失败原因
预约更新:检查 GitHub 最新 Release,有新版本则记录为预约目标
(pending_update),下线满 min_idle_minutes 分钟后由后台执行器自动
执行(与自动更新同一流程)。无新版本时返回"已是最新"。
预约幂等:若已存在相同或更新版本的预约,不覆盖、不重复预约,返回当前 预约版本;仅当新版本高于已预约版本时才更新预约。
输出: 预约结果或拒绝原因
示例:
update schedule
取消预约更新(清除 pending_update)。无预约时提示"当前无预约更新"。
输出: 取消结果
示例:
update cancel
开关自动更新(修改运行时 live_config.auto_update.enabled,无需重启)。
无参数时显示当前状态。
| 参数 | 类型 | 说明 |
|---|---|---|
on/off |
字面量 (可选) | 开启 / 关闭自动更新;省略则显示状态 |
示例:
update auto
update auto on
update auto off