Files
xyzw_web_helper/MD说明文件夹/问题修复-俱乐部签到错误码2300190v3.11.1.md
2025-10-17 20:56:50 +08:00

205 lines
5.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 问题修复:俱乐部签到错误码 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 不可靠问题