7.8 KiB
7.8 KiB
问题修复:发车和爬塔错误 v3.10.3
版本: v3.10.3
日期: 2025-10-08
类型: Bug Fix
问题描述
在批量自动化运行时,发现以下三个错误:
1. role_getroleinfo 请求超时 (1000ms)
现象:
❌ [token_xxx] 请求超时: role_getroleinfo (1000ms)
影响:
- Token 1 和 Token 3 在执行
dailyFix任务时遇到此超时 - 虽然 Token 1 的后续
car_getrolecar仍成功,但 Token 3 因此失败
原因:
dailyFix任务中的role_getroleinfo命令使用 1000ms 超时- 在高并发或服务器负载较高时,1000ms 不足以等待服务器响应
2. car_getrolecar 返回错误 200400
现象:
❌ [token_xxx] 发车任务失败: Error: 服务器错误: 200400 - 未知错误
影响:
- Token 2 和 Token 3 在执行
sendCar任务时遇到此错误 - 导致发车任务完全失败,无法查询车辆
原因:
- 错误码 200400 表示账号未加入俱乐部或没有赛车权限
- 当前代码没有针对此错误码的特定处理,仅抛出通用错误
3. presetteam_changeteam 未知命令
现象:
❌ [token_xxx] presetteam_changeteam Error: Unknown cmd: presetteam_changeteam
影响:
- Token 2 在执行
climbTower任务时遇到此错误 - 导致爬塔任务中的阵容切换失败
原因:
presetteam_changeteam命令未在CommandRegistry中注册presetteam_changeteamresp响应未在responseToCommandMap中映射
解决方案
1. 增加 role_getroleinfo 超时时间
修改文件: src/stores/batchTaskStore.js
修改内容:
- 将
role_getroleinfo的超时时间从 1000ms 增加到 10000ms - 影响范围:
dailyFix任务中的两处role_getroleinfo调用- 执行前获取任务状态(第 538 行)
- 执行后获取任务状态(第 918 行)
修改前:
const beforeRoleInfo = await client.sendWithPromise('role_getroleinfo', {}, 1000)
修改后:
const beforeRoleInfo = await client.sendWithPromise('role_getroleinfo', {}, 10000)
优势:
- 为服务器响应提供更充足的时间
- 减少因网络波动导致的超时
- 与其他关键命令(如
car_getrolecar20000ms)的超时策略保持一致
2. 为错误 200400 添加特定错误处理
修改文件: src/stores/batchTaskStore.js
修改内容:
- 在
sendCar任务的car_getrolecar调用处添加 try-catch - 检测错误消息是否包含 "200400"
- 如果是,抛出更友好的错误消息:"该账号未加入俱乐部或没有赛车权限"
修改前:
const queryResponse = await tokenStore.sendMessageAsync(tokenId, 'car_getrolecar', {}, 20000)
if (!queryResponse || !queryResponse.roleCar) {
throw new Error('查询车辆失败:未返回车辆数据')
}
修改后:
let queryResponse
try {
queryResponse = await tokenStore.sendMessageAsync(tokenId, 'car_getrolecar', {}, 20000)
} catch (error) {
// 检查是否是 200400 错误(账号未加入俱乐部或没有赛车权限)
if (error.message && error.message.includes('200400')) {
throw new Error('该账号未加入俱乐部或没有赛车权限')
}
// 其他错误直接抛出
throw error
}
if (!queryResponse || !queryResponse.roleCar) {
throw new Error('查询车辆失败:未返回车辆数据')
}
优势:
- 为用户提供更明确的错误原因
- 便于快速定位问题(账号未加入俱乐部)
- 避免误认为是服务器或客户端代码错误
3. 注册 presetteam_changeteam 命令
修改文件: src/utils/xyzwWebSocket.js
修改内容:
3.1 在 CommandRegistry 中注册命令
修改位置: 第 163 行(registerDefaultCommands 函数)
修改前:
.register("presetteam_getinfo")
.register("presetteam_getinfo")
.register("presetteam_setteam")
.register("presetteam_saveteam", { teamId: 1 })
.register("role_gettargetteam")
修改后:
.register("presetteam_getinfo")
.register("presetteam_getinfo")
.register("presetteam_setteam")
.register("presetteam_changeteam", { teamId: 1 })
.register("presetteam_saveteam", { teamId: 1 })
.register("role_gettargetteam")
3.2 在 responseToCommandMap 中添加响应映射
修改位置: 第 638 行(_handlePromiseResponse 方法)
修改前:
'presetteam_saveteamresp': 'presetteam_saveteam',
'presetteam_getinforesp': 'presetteam_getinfo',
修改后:
'presetteam_saveteamresp': 'presetteam_saveteam',
'presetteam_changeteamresp': 'presetteam_changeteam',
'presetteam_getinforesp': 'presetteam_getinfo',
优势:
- 使
presetteam_changeteam命令能够被 WebSocket 客户端识别 - 确保 Promise 能够正确解析响应
- 修复爬塔任务中的阵容切换功能
测试验证
测试场景 1:role_getroleinfo 不再超时
预期结果:
dailyFix任务中的role_getroleinfo命令在 10000ms 内成功响应- 不再出现 "请求超时: role_getroleinfo (1000ms)" 错误
日志示例:
🔍 正在获取执行前的任务完成状态...
📊 执行前任务状态: { "101": true, "102": true, ... }
测试场景 2:错误 200400 显示友好消息
预期结果:
- 对于未加入俱乐部的账号,
sendCar任务失败,但显示明确的错误原因 - 错误消息为:"该账号未加入俱乐部或没有赛车权限"
日志示例:
🚗 [token_xxx] 开始查询俱乐部车辆...
❌ [token_xxx] 发车任务失败: Error: 该账号未加入俱乐部或没有赛车权限
测试场景 3:presetteam_changeteam 命令正常工作
预期结果:
climbTower任务中的阵容切换功能正常工作- 不再出现 "Unknown cmd: presetteam_changeteam" 错误
日志示例:
🗼 [token_xxx] 开始爬塔(目标层数: 18)...
✅ 已切换到阵容1
🏆 [token_xxx] 成功挑战第 1 层
影响范围
修改的文件
src/stores/batchTaskStore.js- 批量任务核心逻辑src/utils/xyzwWebSocket.js- WebSocket 客户端命令注册
影响的功能
- 批量自动化 - dailyFix 任务: 任务状态获取更稳定
- 批量自动化 - sendCar 任务: 错误提示更友好
- 批量自动化 - climbTower 任务: 阵容切换功能可用
注意事项
1. 错误 200400 的根本解决
虽然我们添加了友好的错误提示,但根本解决方法是:
- 确保账号已加入俱乐部
- 在执行
sendCar任务前,先检查账号的俱乐部状态
2. role_getroleinfo 超时时间平衡
- 10000ms 是一个较为保守的超时时间
- 如果服务器响应速度很快,可能会增加整体任务执行时间
- 如果发现超时仍频繁发生,可考虑进一步增加到 15000ms 或 20000ms
3. 并发控制
目前批量自动化的默认并发数为 1(maxConcurrency = 1),这是为了:
- 避免服务器反批量检测
- 减少超时和错误发生的概率
如果用户增加并发数(如 3-6),可能需要进一步优化超时策略或添加更多的延迟。
总结
本次修复解决了批量自动化中的三个关键问题:
- ✅
role_getroleinfo超时 - 增加超时到 10000ms - ✅ 错误 200400 提示不明确 - 添加友好的错误消息
- ✅
presetteam_changeteam未注册 - 注册命令和响应映射
这些修复提高了批量自动化的稳定性和用户体验,尤其是在处理未加入俱乐部的账号时。
版本标识: v3.10.3
后续优化方向:
- 在执行
sendCar任务前,预先检查账号的俱乐部状态 - 根据实际测试情况,动态调整各命令的超时时间
- 为所有 WebSocket 命令建立统一的超时管理机制