fix: 打通登录门禁死锁,失败信息区分未连接/登录被拒/未通过验证

继续修复部署时暴露的门禁设计问题:

- 登录门禁死锁:/login、/register、简幻通的 /auth 本身就是登录流程的一部分,
  原先门禁把它们一并拦下,形成「要先登录才能发登录指令」,账号永远卡在未验证状态。
  新增 server.preLoginCommands 白名单(默认 login,l,register,reg,auth),
  这些前缀在未验证时也放行,其余指令仍要求已完成验证。

- 离线时指令被静默丢弃却回报「已发送」:bot.chat() 在未连接时无处可发。
  canSendCommand() 现在要求已连接并进入世界,失败信息区分
  「未连接」「登录被服务器拒绝」「未通过登录验证」三种情况并给出对应建议。

- 前端配置表单支持 list 类型字段(逗号分隔的字符串数组)。

测试从 252 增至 263,全部通过。
这个提交包含在:
lyizai
2026-09-27 22:11:52 +08:00
父节点 d6b1339867
当前提交 2671da95d5
共修改 10 个文件,包含 279 行新增和 18 行删除
+5
查看文件
@@ -166,9 +166,14 @@ squaremap 前端用 `L.CRS.Simple` + `tileSize: 512`,瓦片路径为
- **登录确认兜底**:部分离线服登录成功后不回明确提示,`server.loginConfirmTimeoutMs`
(默认 10 秒)内既没收到成功也没收到失败提示时按「已登录」放行,避免机器人永远卡死;
收到「密码错误 / 登录失败」则标记 `loginFailed` 且不放行。设为 `0` 可禁用兜底
- **免登录指令白名单**:有些服务器的登录流程本身就是指令(`/login`、`/register`,
简幻通体系还要先 `/auth`),若把门禁一刀切会形成「要先登录才能发登录指令」的死锁。
`server.preLoginCommands`(默认 `login,l,register,reg,auth`)里列出的前缀在未验证时也放行
- **外站账号绑定(如简幻通)**:服务器要求 `/auth <UID> <验证码>` 或扫码绑定时,
密码无法自动完成,程序会输出明确的中文告警(每个连接只提示一次)而不是静默死循环。
若该服务器提供固定验证码,可在配置的「账号绑定 / 二次验证模板」(`server.authCommand`)里填写
- **失败信息可操作**:发送失败会区分「未连接」「登录被服务器拒绝」「未通过登录验证」三种情况,
而不是笼统报一句「发送失败」
**控制台侧**(`src/web/server.js`)