- 日志落盘:新增 internal/gui/logfile.go,写到 <用户配置目录>/huya-go/logs/huya-go.log,单文件 5MB 后滚动保留 5 个备份;「日志」页签顶部显示路径并支持打开目录/复制路径;写盘失败自动降级为仅界面输出 - 修复重复兑换:界面选品会同时提交 pid、名称与 targetText 里的同一 pid,normalizeTargets 现按 pid/名称去重;runState 再按「账号+奖品」记账,多个 target 命中同一奖品时只兑换一次(新增 skip_duplicate 结果) - 修复 use of closed network connection:成功后的异步刷新改为 runState.refresh 等待,RunTargets 返回前不再提前关闭连接 - queryHttpDns 增加 single-flight 与失败冷却,多账号并发建连只解析一次 - 新增 internal/gui/logfile_test.go 与 sniper/huya 回归测试;README 补日志说明
121 lines
3.9 KiB
Markdown
121 lines
3.9 KiB
Markdown
# huya-go
|
||
|
||
虎牙活动积分兑换/抢购的 Go 复刻版。支持两种传输层,CLI 与 GUI 默认都走 `http`:
|
||
|
||
- `http`(默认):走 `https://cdnws.api.huya.com/`,兼容原有命令。
|
||
- `wss`:实验实现。CLI 需要显式指定 `-transport wss`,GUI 在设置里切换;已按浏览器 HAR 改为 TAF `WebSocketCommand` 外层和 WSS 初始化流程,仍建议先用真实 Cookie 小流量验证。
|
||
|
||
## 构建
|
||
|
||
CLI:
|
||
|
||
```bash
|
||
go test ./...
|
||
go build -o huya-go ./cmd/huya-go
|
||
```
|
||
|
||
GUI:
|
||
|
||
```bash
|
||
cd frontend
|
||
npm install
|
||
npm run typecheck
|
||
cd ..
|
||
wails build -debug -nopackage
|
||
```
|
||
|
||
GUI 二进制输出到 `build/bin/huya-gui`。开发时可以使用 `wails dev` 启动 Wails + React + Ant Design 界面。
|
||
|
||
## Cookie
|
||
|
||
推荐把账号 Cookie 放到本地文件,一行一个账号:
|
||
|
||
```text
|
||
yyuid=...; udb_uid=...; guid=...; ...
|
||
```
|
||
|
||
不要把 Cookie、token、JWT 提交到仓库或写进文档。
|
||
|
||
## 常用命令
|
||
|
||
GUI 界面提供账号预览、奖品列表、积分查询、兑换记录、直接兑换、监控抢购、实时日志。
|
||
|
||
CLI 示例:
|
||
|
||
查询奖品列表:
|
||
|
||
```bash
|
||
./huya-go -cmd list -sid 2203 -cookie-file cookie.txt
|
||
```
|
||
|
||
查询积分:
|
||
|
||
```bash
|
||
./huya-go -cmd score -sid 2203 -cookie-file cookie.txt
|
||
```
|
||
|
||
直接兑换指定 PID:
|
||
|
||
```bash
|
||
./huya-go -cmd exchange -sid 2203 -pid 12889 -cookie-file cookie.txt -transport http
|
||
```
|
||
|
||
按奖品名轮询并抢购:
|
||
|
||
```bash
|
||
./huya-go -cmd monitor -sid 2203 -name 小黄鸭 -cookie-file cookie.txt -transport http -loops 20 -delay 120 -concurrency 5
|
||
```
|
||
|
||
定时开始:
|
||
|
||
```bash
|
||
./huya-go -cmd monitor -sid 2203 -pid 12889 -cookie-file cookie.txt -transport http -at "2026-07-06 20:00:00"
|
||
```
|
||
|
||
## 日志
|
||
|
||
GUI 日志同时输出到界面和磁盘:
|
||
|
||
- 路径:`<系统用户配置目录>/huya-go/logs/huya-go.log`(macOS 为 `~/Library/Application Support/huya-go/logs/huya-go.log`,Windows 为 `%AppData%\huya-go\logs\huya-go.log`)。
|
||
- 单文件上限 5MB,超出后滚动为 `huya-go.log.1` ~ `huya-go.log.5`,最旧的被丢弃。
|
||
- 界面「日志」页签顶部显示当前路径,可一键打开日志目录或复制路径。
|
||
|
||
## 参数说明
|
||
|
||
- `-cmd`:`list`、`score`、`records`、`exchange`、`monitor`。
|
||
- `-sid`:活动 SID,必填。
|
||
- `-pid`:奖品 PID。`exchange` 必填,`monitor` 可用 `-pid` 或 `-name`。
|
||
- `-max-price`:目标奖品最高积分,`0` 表示不限制(CLI 与 GUI 设置都支持)。
|
||
- `-min-left`:目标奖品最少剩余库存,`0` 表示不限制(CLI 与 GUI 设置都支持)。
|
||
- `-cookie`:单账号 Cookie。
|
||
- `-cookie-file`:多账号 Cookie 文件。
|
||
- `-transport`:`http` 或 `wss`,默认 `http`;WSS 仍为实验通道。
|
||
- `-wss-host`:WebSocket host。默认留空,自动调用 `launch.queryHttpDns` 解析(带 TTL 缓存、多 host 轮询),解析失败时回退内置默认 host;需要固定时可显式指定。
|
||
- `-timeout`:单次调用超时秒数。
|
||
- `-loops`、`-delay`、`-concurrency`:轮询次数、轮询间隔、并发账号数。
|
||
- `-stop-after-success`:`monitor` 中任一账号成功后是否停止。
|
||
- `-v`:输出调试日志。
|
||
|
||
## 已确认的小黄鸭参数
|
||
|
||
2026-07-06 浏览器手动抢购抓包确认:
|
||
|
||
- `sid=2203`
|
||
- `pid=12889`
|
||
- 奖品名:`套装-潮萌小黄鸭`
|
||
- 消耗积分:`988`
|
||
|
||
远端配置里的子奖品代码不能直接当兑换 PID,实际兑换以 `scoreExchangePrize` 请求里的 `pid` 为准。
|
||
|
||
## 精英宝典/幸运币(2026-10-13 抓包)
|
||
|
||
`m-shop.huya.com` 积分中心的兑换记录里确认到:
|
||
|
||
- `sid=2277`
|
||
- `pid=13409`
|
||
- 奖品名:`幸运币礼包(小)`
|
||
- 消耗积分:`20`
|
||
- 订单号格式:`sOrderId_2277_13409_<uid>_<时间戳>_<随机>`
|
||
|
||
该活动的列表/积分/兑换接口与 `sid=2203` 走同一套 `webActUI`,可直接用 `-cmd list -sid 2277` 验证;同一次抓包里「开通精英宝典 / 购买精英币」属于商城付费链路(`shopMiddleUI.*` + 支付宝),本项目未实现,详见 `WSS_NOTES.md`。
|