Files
xyzw_web_helper/MD说明文件夹/问题修复-俱乐部签到错误码2300190v3.11.1.md

205 lines
5.2 KiB
Markdown
Raw Normal View History

2025-10-17 20:56:50 +08:00
# 问题修复:俱乐部签到错误码 2300190 v3.11.1
**版本**: v3.11.1
**日期**: 2025-10-08
**类型**: Bug Fix
---
## 问题描述
用户反馈批量自动化执行俱乐部签到时失败,显示错误:
```
俱乐部签到
失败
服务器错误: 2300190 - 未知错误
```
但实际检查游戏时,俱乐部已经是"已签到"状态。
---
## 问题分析
### 错误码 2300190 的含义
通过用户反馈和实际状态对比,可以确定:
- **错误码 2300190** 表示 **"今日已签到"**
- 签到操作实际上是**成功的**(或者之前已经签到过)
- 但客户端将其视为错误,导致任务统计中显示为"失败"
### 根本原因
`batchTaskStore.js``legionSignIn` case 中:
```javascript
case 'legionSignIn':
// 俱乐部签到
return await executeSubTask(
tokenId,
'legion_signin',
'俱乐部签到',
async () => await client.sendWithPromise('legion_signin', {}, 1000),
false
)
```
`executeSubTask``catch` 块会捕获所有错误,包括 2300190 错误码,并将其标记为任务失败。
---
## 解决方案
### 修改内容
`legionSignIn` case 的 executor 函数中,添加对错误码 2300190 的特殊处理:
**修改文件**: `src/stores/batchTaskStore.js`
**修改前**:
```javascript
case 'legionSignIn':
// 俱乐部签到
return await executeSubTask(
tokenId,
'legion_signin',
'俱乐部签到',
async () => await client.sendWithPromise('legion_signin', {}, 1000),
false
)
```
**修改后**:
```javascript
case 'legionSignIn':
// 俱乐部签到
return await executeSubTask(
tokenId,
'legion_signin',
'俱乐部签到',
async () => {
try {
const result = await client.sendWithPromise('legion_signin', {}, 1000)
return result
} catch (error) {
const errorMsg = error.message || String(error)
// 错误码 2300190 表示"今日已签到",不应视为错误
if (errorMsg.includes('2300190')) {
console.log(' 俱乐部今日已签到,跳过')
return { alreadySignedIn: true }
}
// 其他错误正常抛出
throw error
}
},
false
)
```
### 修改逻辑
1. **添加 try-catch**: 在 executor 函数内部捕获 `legion_signin` 命令的错误
2. **检查错误码**: 如果错误消息包含 `2300190`,则不抛出错误
3. **返回成功**: 对于 2300190 错误,返回 `{ alreadySignedIn: true }` 表示已签到
4. **其他错误正常处理**: 如果是其他错误码,正常抛出,由 `executeSubTask` 处理
---
## 测试验证
### 测试场景 1首次签到未签到状态
**预期行为**:
- 发送 `legion_signin` 命令
- 服务器返回成功响应
- 任务标记为成功
**预期日志**:
```
✅ 俱乐部签到 - 成功
```
---
### 测试场景 2重复签到已签到状态
**预期行为**:
- 发送 `legion_signin` 命令
- 服务器返回错误码 2300190
- 客户端识别为"已签到",不抛出错误
- 任务标记为成功
**预期日志**:
```
俱乐部今日已签到,跳过
✅ 俱乐部签到 - 成功
```
---
### 测试场景 3其他签到错误如网络错误
**预期行为**:
- 发送 `legion_signin` 命令
- 服务器返回其他错误码(如超时)
- 错误正常抛出
- 任务标记为失败
**预期日志**:
```
❌ 俱乐部签到 - 失败: 请求超时: legion_signin (1000ms)
```
---
## 影响范围
### 修改的文件
1. `src/stores/batchTaskStore.js` - 俱乐部签到逻辑
### 影响的功能
1. **批量自动化 - legionSignIn 任务**: 正确处理"今日已签到"状态
2. **任务统计**: 不再将"已签到"误计为失败
### 不受影响的功能
- 其他批量自动化任务dailyFix, autoStudy, claimHangupReward, addClock, sendCar, climbTower
- 游戏功能模块
---
## 类似问题的处理建议
如果未来遇到类似的"服务器错误"但实际已完成的情况,可以采用相同的模式:
1. **确认错误码含义**: 通过用户反馈和实际游戏状态,确认错误码的真实含义
2. **添加特殊处理**: 在相应的 executor 函数中捕获特定错误码
3. **返回成功**: 对于"已完成"类型的错误码,返回成功状态而不是抛出错误
4. **添加日志**: 使用 `console.log` 输出友好的提示信息
### 常见的"已完成"错误码
根据经验,以下错误码通常表示"已完成"而不是真正的错误:
- **2300190**: 俱乐部今日已签到
- **12000050**: 今日发车次数已达上限v3.10.1 已处理)
- **其他 23xxxxx**: 俱乐部相关的"今日已完成"错误
---
## 总结
本次修复v3.11.1)解决了俱乐部签到的误报问题:
**正确识别**: 错误码 2300190 识别为"今日已签到"
**标记成功**: 不再将"已签到"误计为失败
**友好日志**: 输出 ` 俱乐部今日已签到,跳过`
**统计准确**: 任务统计中不再出现误报的失败
这是一个简单但重要的修复,提高了批量自动化的准确性和用户体验。
---
**版本标识**: v3.11.1
**相关版本**:
- v3.11.0 - 重构发车任务,复用游戏模块逻辑
- v3.10.1 - 修复发车任务中服务器 sendCount 不可靠问题