fix: 时间校准接口全局复用旧 peace/storedetail,修正活动名称

- 从 Activity 结构体移除 TimeAPIURL 字段,时间校准与活动无关,
  统一用 constants.DefaultTimeAPI(peace/storedetail 能稳定返回 currentTime)
- 旧活动 peace DisplayName 从"和平手册"修正为"精英手册"
- 更改项目默认端口避免冲突:Vite 5173→15173,Wails dev 34115→34215
This commit is contained in:
yml2213
2026-07-29 10:48:42 +08:00
parent f4d33d19c0
commit 8e52e12005
7 changed files with 17 additions and 16 deletions
+1 -1
View File
@@ -625,7 +625,7 @@ func (a *App) SwitchActivity(id string) map[string]any {
return map[string]any{"success": false, "error": "未知活动: " + id}
}
a.cfg.Activity = act.ID
a.cfg.TimeAPIURL = act.TimeAPIURL
a.cfg.TimeAPIURL = constants.DefaultTimeAPI
if err := config.SaveConfig(a.paths.ConfigFile, a.cfg); err != nil {
logger.LogEvent("活动", "error", "切换活动配置保存失败: %v", err)
return map[string]any{"success": false, "error": "配置保存失败: " + err.Error()}
+1
View File
@@ -15,6 +15,7 @@ export default defineConfig({
sourcemap: false
},
server: {
port: 15173,
strictPort: true
}
})
+4 -8
View File
@@ -4,7 +4,7 @@ import "douyu_go/internal/constants"
// Activity 描述一个斗鱼手册活动的全部接口参数。
//
// 不同活动(和平手册 / 电竞手册)的 manualID、roomID、actAlias 以及接口路径段都不同,
// 不同活动(精英手册 / 电竞手册)的 manualID、roomID、actAlias 以及接口路径段都不同,
// 集中在这里可以让调度核心逻辑保持活动无关,新增活动只需在 registry 中加一项。
//
// 注意:peacematch 的 exchange / preExchange / batchExchangeLimit / storedetail 端点
@@ -21,8 +21,6 @@ type Activity struct {
BaseURL string
ShopReferer string
TimeAPIURL string // 服务端时间校准接口(storedetail)
StoreHomeURL string
CSRFURL string
@@ -38,16 +36,15 @@ type Activity struct {
const douyuBase = constants.BaseURL
// peace 和平手册(旧活动,ActAlias=20260120QYOOB)。
// peace 精英手册(旧活动,ActAlias=20260120QYOOB)。
var peace = &Activity{
ID: "peace",
DisplayName: "和平手册",
DisplayName: "精英手册",
ManualID: "G4KA4Qnz4LDp7",
RoomID: "9263298",
ActAlias: "20260120QYOOB",
BaseURL: douyuBase,
ShopReferer: douyuBase + "/pages/live-peace-handbook/web/shop?ditchname=pass0&roomId=9263298",
TimeAPIURL: douyuBase + "/wgapi/ordnc/activity/peace/storedetail?manualID=G4KA4Qnz4LDp7&commodityID=20260120QYOOB_bag274&rid=9263298",
StoreHomeURL: douyuBase + "/wgapi/ordnc/activity/peace/storehome?manualID=G4KA4Qnz4LDp7&rid=9263298",
CSRFURL: douyuBase + "/japi/carnival/nc/common/generateCsrf",
BatchLimitURL: douyuBase + "/wgapi/ordnc/activity/peace/batchExchangeLimit",
@@ -69,7 +66,6 @@ var peacematch = &Activity{
ActAlias: "20260226ZMGDG",
BaseURL: douyuBase,
ShopReferer: douyuBase + "/pages/live-peace-pel/web/shop?roomId=9263298&isAnchorSide=0",
TimeAPIURL: douyuBase + "/wgapi/ordnc/activity/peacematch/storedetail?manualID=1W0yGkOdDbAXb&commodityID=20260226ZMGDG_bag139&rid=9263298",
StoreHomeURL: douyuBase + "/wgapi/ordnc/activity/peacematch/storehome?manualID=1W0yGkOdDbAXb&rid=9263298",
// generateCsrf 为嘉年华平台级接口,抓包未单独出现,沿用 peace 同款端点。
CSRFURL: douyuBase + "/japi/carnival/nc/common/generateCsrf",
@@ -91,7 +87,7 @@ var registry = map[string]*Activity{
// DefaultActivityID 默认活动,新分支默认启用「电竞手册」。
const DefaultActivityID = "peacematch"
// List 返回所有注册活动,按注册顺序(和平手册在前)。
// List 返回所有注册活动,按注册顺序(精英手册在前)。
func List() []*Activity {
return []*Activity{peace, peacematch}
}
+2 -2
View File
@@ -29,13 +29,13 @@ type DouyuClient struct {
}
// New 创建斗鱼客户端。act 决定使用哪个活动的接口参数;
// timeAPIURL 为空时回退到 act.TimeAPIURL。
// timeAPIURL 为空时回退到 constants.DefaultTimeAPI(全局共享的服务端时间接口)。
func New(act *activity.Activity, timeAPIURL string, tr *trace.Recorder) *DouyuClient {
if act == nil {
act = activity.Default()
}
if timeAPIURL == "" {
timeAPIURL = act.TimeAPIURL
timeAPIURL = constants.DefaultTimeAPI
}
return &DouyuClient{
Activity: act,
+2 -4
View File
@@ -77,7 +77,7 @@ func envInt(key string, fallback int) int {
func defaultConfig() types.Config {
return types.Config{
Activity: activity.DefaultActivityID,
TimeAPIURL: activity.Default().TimeAPIURL,
TimeAPIURL: constants.DefaultTimeAPI,
TraceEnabled: false,
TraceMaxBody: 0,
LogLevel: "info",
@@ -124,9 +124,7 @@ func LoadConfig(path string) types.Config {
cfg.Activity = activity.DefaultActivityID
}
if cfg.TimeAPIURL == "" {
if act := activity.Get(cfg.Activity); act != nil {
cfg.TimeAPIURL = act.TimeAPIURL
}
cfg.TimeAPIURL = constants.DefaultTimeAPI
}
if cfg.Concurrency <= 0 {
cfg.Concurrency = constants.DefaultConcurrency
+5
View File
@@ -19,6 +19,11 @@ const (
DefaultAccountFile = "data/user.txt"
DefaultLogDir = "logs"
DefaultSuccessDir = "success_images"
// DefaultTimeAPI 服务端时间校准接口。
// 斗鱼服务器时间与活动无关,统一用精英手册的 storedetail(能稳定返回
// data.preExchange.currentTime),所有活动共用。
DefaultTimeAPI = BaseURL + "/wgapi/ordnc/activity/peace/storedetail?manualID=G4KA4Qnz4LDp7&commodityID=20260120QYOOB_bag274&rid=9263298"
)
// CST 中国标准时间 UTC+8。
+2 -1
View File
@@ -7,7 +7,8 @@
"frontend:install": "npm install",
"frontend:build": "npm run build",
"frontend:dev:watcher": "npm run dev",
"frontend:dev:serverUrl": "auto",
"frontend:dev:serverUrl": "http://localhost:15173",
"devserver": "localhost:34215",
"wailsjsdir": "frontend",
"author": {
"name": "yml",