feat(http): generate client build number instead of hardcoding it
This commit is contained in:
parent
30ee90a8ef
commit
6a2a5fa7fb
4 changed files with 78 additions and 3 deletions
5
internal/http/generated.go
Normal file
5
internal/http/generated.go
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
// GENERATED BY go generate; DO NOT EDIT.
|
||||
|
||||
package http
|
||||
|
||||
const ClientBuildNumber = 562538
|
||||
66
internal/http/generator.go
Normal file
66
internal/http/generator.go
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
//go:build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"regexp"
|
||||
|
||||
"github.com/diamondburned/arikawa/v3/api"
|
||||
)
|
||||
|
||||
const format = `// GENERATED BY go generate; DO NOT EDIT.
|
||||
|
||||
package %s
|
||||
|
||||
const ClientBuildNumber = %s
|
||||
`
|
||||
|
||||
var buildNumberRegex = regexp.MustCompile(`"BUILD_NUMBER":\s*"(\d+)"`)
|
||||
|
||||
func fetchBuildNumber() (string, error) {
|
||||
resp, err := http.Get(api.BaseEndpoint + "/login")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusMultipleChoices {
|
||||
return "", fmt.Errorf("failed to fetch login page; status=%q", resp.Status)
|
||||
}
|
||||
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
matches := buildNumberRegex.FindSubmatch(body)
|
||||
if len(matches) < 2 {
|
||||
return "", fmt.Errorf("failed to find build number; matches=%v", matches)
|
||||
}
|
||||
return string(matches[1]), nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
out := flag.String("out", "generated.go", "out filename")
|
||||
flag.Parse()
|
||||
|
||||
buildNumber, err := fetchBuildNumber()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
packageName := os.Getenv("GOPACKAGE")
|
||||
if packageName == "" {
|
||||
panic("GOPACKAGE is not set; run with go generate")
|
||||
}
|
||||
|
||||
content := fmt.Appendf(nil, format, packageName, buildNumber)
|
||||
if err := os.WriteFile(*out, content, 0644); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
@ -3,6 +3,8 @@ package http
|
|||
import (
|
||||
"log/slog"
|
||||
stdHttp "net/http"
|
||||
|
||||
"github.com/diamondburned/arikawa/v3/api"
|
||||
)
|
||||
|
||||
func Headers() stdHttp.Header {
|
||||
|
|
@ -11,9 +13,10 @@ func Headers() stdHttp.Header {
|
|||
headers.Set("Accept", "*/*")
|
||||
headers.Set("Accept-Encoding", "gzip, deflate, br, zstd")
|
||||
headers.Set("Accept-Language", "en-US,en;q=0.9")
|
||||
headers.Set("Origin", "https://discord.com")
|
||||
headers.Set("Origin", api.BaseEndpoint)
|
||||
headers.Set("Priority", "u=0, i")
|
||||
headers.Set("Referer", "https://discord.com/channels/@me")
|
||||
|
||||
headers.Set("Sec-Fetch-Dest", "empty")
|
||||
headers.Set("Sec-Fetch-Mode", "cors")
|
||||
headers.Set("Sec-Fetch-Site", "same-origin")
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ import (
|
|||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
//go:generate go run generator.go
|
||||
|
||||
const (
|
||||
OS = "Windows"
|
||||
OSVersion = "10"
|
||||
|
|
@ -17,8 +19,7 @@ const (
|
|||
BrowserVersion = "143.0.0.0"
|
||||
BrowserUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " + Browser + "/" + BrowserVersion + " Safari/537.36"
|
||||
|
||||
ClientBuildNumber = 482285
|
||||
Locale = discord.EnglishUS
|
||||
Locale = discord.EnglishUS
|
||||
)
|
||||
|
||||
func IdentifyProperties() gateway.IdentifyProperties {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue