cff831ae4759dbb880724653667dc6002e264c55
huya-go
虎牙活动积分兑换/抢购的 Go 复刻版。支持两种传输层,CLI 与 GUI 默认都走 wss:
wss(默认):浏览器实际使用的通道。先调用launch.queryHttpDns解析可用 host,再走 TAFWebSocketCommand外层与 WSS 初始化流程(launch.wsLaunch→mobileui.getConfig)。host 留空即自动解析,解析失败会回退内置默认 host。http:走https://cdnws.api.huya.com/,作为可回退通道;CLI 用-transport http,GUI 在设置里切换。
构建
CLI:
go test ./...
go build -o huya-go ./cmd/huya-go
GUI:
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 放到本地文件,一行一个账号:
yyuid=...; udb_uid=...; guid=...; ...
不要把 Cookie、token、JWT 提交到仓库或写进文档。
常用命令
GUI 界面提供账号预览、奖品列表、积分查询、兑换记录、直接兑换、监控抢购、实时日志。
CLI 示例:
查询奖品列表:
./huya-go -cmd list -sid 2203 -cookie-file cookie.txt
查询积分:
./huya-go -cmd score -sid 2203 -cookie-file cookie.txt
直接兑换指定 PID:
./huya-go -cmd exchange -sid 2203 -pid 12889 -cookie-file cookie.txt
按奖品名轮询并抢购:
./huya-go -cmd monitor -sid 2203 -name 小黄鸭 -cookie-file cookie.txt -loops 20 -delay 120 -concurrency 5
定时开始:
./huya-go -cmd monitor -sid 2203 -pid 12889 -cookie-file cookie.txt -at "2026-07-06 20:00:00"
以上默认都走 wss。需要回退到 http 传输时,给任意命令加上 -transport http。
多开(多实例)
同一台机器可以同时启动多个实例,互不干扰:
- 启动时按顺序占用「实例槽位」并加独占锁:第 1 个进程是默认实例(沿用历史数据目录),第 2 个及以后分别是
实例 2、实例 3…,数据目录为<数据目录>/instances/instance-N。 - 每个实例独占自己的日志目录与 WebView2 用户数据目录,所以多开时日志不会交错,Windows 上也不会出现「第二个窗口开不出来」。
- 界面本地存储(账号、设置、商品缓存)按实例分片,每个实例各存各的账号;标题栏会显示当前实例名。
- 槽位锁在进程退出时自动释放;若锁目录不可写,会退回到「进程唯一」的临时实例目录(日志降级为仅内存),绝不退回默认目录,以免两个进程互相覆盖。
- 环境变量:
HUYA_DATA_DIR覆盖数据根目录,HUYA_LOG_DIR覆盖日志目录,HUYA_LOG_LEVEL覆盖默认日志等级。
日志
GUI 与 CLI 共用同一套结构化日志(分类 + 等级 + 账号标签),同时输出到界面与磁盘:
- 路径:
<数据目录>/logs/huya-go_<实例标识>_<时间戳>.log。macOS 数据目录为~/Library/Application Support/huya-go,Windows 为%AppData%\huya-go。 - 每次启动创建独立文件(
O_EXCL抢占,重名自动加-2后缀),所以多开或同秒重启都不会写进同一个文件;文件开头写明实例名、数据目录与格式说明。 - 单文件上限 5MB,超出后滚动为
.1~.5,最旧的被丢弃。 - 每行格式:
时间 [分类][等级][账号] 正文。逐条网络请求是debug级,默认不记录,可在界面「日志」页签打开「调试」开关,或 CLI 使用-log-level debug。 - 写盘是异步且队列有界:队列满时丢弃日志并在文件尾部与界面提示丢弃条数,避免磁盘 I/O 拖慢抢购链路。
- 界面「日志」页签支持按等级筛选、按 ID 增量拉取、一键打开日志目录或复制路径。
- GUI 启动失败(例如 WebView2 建不出环境)时,
<用户缓存目录>/huya-go/startup.log会记录原因。
参数说明
-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:wss或http,默认wss。-wss-host:WebSocket host。默认留空,自动调用launch.queryHttpDns解析(带 TTL 缓存、多 host 轮询),解析失败时回退内置默认 host;需要固定时可显式指定。-timeout:单次调用超时秒数。-loops、-delay、-concurrency:轮询次数、轮询间隔、并发账号数。-stop-after-success:monitor中任一账号成功后是否停止。-log-dir:日志目录,默认使用应用数据目录下的logs。-log-level:日志最低等级,debug/info/warn/error,默认info。-v:输出调试日志(等价于-log-level debug,并把网络日志同时打到 stderr)。
已确认的小黄鸭参数
2026-07-06 浏览器手动抢购抓包确认:
sid=2203pid=12889- 奖品名:
套装-潮萌小黄鸭 - 消耗积分:
988
远端配置里的子奖品代码不能直接当兑换 PID,实际兑换以 scoreExchangePrize 请求里的 pid 为准。
精英宝典/幸运币(2026-10-13 抓包)
m-shop.huya.com 积分中心的兑换记录里确认到:
sid=2277pid=13409- 奖品名:
幸运币礼包(小) - 消耗积分:
20 - 订单号格式:
sOrderId_2277_13409_<uid>_<时间戳>_<随机>
该活动的列表/积分/兑换接口与 sid=2203 走同一套 webActUI,可直接用 -cmd list -sid 2277 验证;同一次抓包里「开通精英宝典 / 购买精英币」属于商城付费链路(shopMiddleUI.* + 支付宝),本项目未实现,详见 WSS_NOTES.md。
Languages
Go
72.2%
TypeScript
23.4%
CSS
2.3%
JavaScript
1.8%
Shell
0.2%