feat: 抖音直播间弹幕监控 - Go+Wails 实现
后端: - SQLite 数据层 (rooms/users/chat_logs/settings/error_logs) - 抖音 WebSocket 抓取器 (proto 解析, 心跳, watchdog) - __ac_signature 算法 (纯 Go 移植) - a_bogus/sign.js 签名 (goja JS 引擎) - Echo HTTP API 服务器 (端口 5000) - SSE 事件广播 - 自动保活 + 授权守护 - PAYS 云授权对接 前端: - 顶栏: 品牌 + 日志/调试/客户名单/授权/文档/房间控制/主题切换 - 添加直播间 (链接解析 + 关键词) - Dashboard (卡片/列表视图, 公开/匿名房筛选, 分页) - 详情页 (多 tab 消息流, 右侧用户面板, 颜色标记, 精准客户, 已看标记) - 精准客户名单 (跨房间汇总) - 订阅授权页面 (登录/注册/购买) - 使用帮助 + 系统调试 - 白昼/黑夜主题切换 (CSS 变量 + iconfont) - 底部版权栏
This commit is contained in:
54
internal/sign/bogus.go
Normal file
54
internal/sign/bogus.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package sign
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/dop251/goja"
|
||||
_ "embed"
|
||||
)
|
||||
|
||||
//go:embed sign.js
|
||||
var signJS []byte
|
||||
|
||||
//go:embed a_bogus.js
|
||||
var abogusJS []byte
|
||||
|
||||
func GenerateSignature(wssURL string) (string, error) {
|
||||
vm := goja.New()
|
||||
vm.Set("console", goja.Null())
|
||||
if _, err := vm.RunString(string(signJS)); err != nil {
|
||||
return "", fmt.Errorf("run sign.js: %w", err)
|
||||
}
|
||||
fn := vm.Get("get_sign")
|
||||
if fn == nil || goja.IsUndefined(fn) {
|
||||
return "", fmt.Errorf("get_sign not found in sign.js")
|
||||
}
|
||||
result, err := fn.Export().(goja.Callable)(goja.Undefined(), vm.ToValue(wssURL))
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("call get_sign: %w", err)
|
||||
}
|
||||
return result.Export().(string), nil
|
||||
}
|
||||
|
||||
func GetABogus(urlParams map[string]string, userAgent string) (string, error) {
|
||||
vm := goja.New()
|
||||
if _, err := vm.RunString(string(abogusJS)); err != nil {
|
||||
return "", fmt.Errorf("run a_bogus.js: %w", err)
|
||||
}
|
||||
fn := vm.Get("get_ab")
|
||||
if fn == nil || goja.IsUndefined(fn) {
|
||||
return "", fmt.Errorf("get_ab not found in a_bogus.js")
|
||||
}
|
||||
dpf := ""
|
||||
for k, v := range urlParams {
|
||||
if dpf != "" {
|
||||
dpf += "&"
|
||||
}
|
||||
dpf += k + "=" + v
|
||||
}
|
||||
result, err := fn.Export().(goja.Callable)(goja.Undefined(), vm.ToValue(dpf), vm.ToValue(userAgent))
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("call get_ab: %w", err)
|
||||
}
|
||||
return result.Export().(string), nil
|
||||
}
|
||||
Reference in New Issue
Block a user