feat(http): generate client build number instead of hardcoding it

This commit is contained in:
ayn2op 2026-06-14 22:10:16 -04:00
parent 30ee90a8ef
commit 6a2a5fa7fb
4 changed files with 78 additions and 3 deletions

View file

@ -0,0 +1,5 @@
// GENERATED BY go generate; DO NOT EDIT.
package http
const ClientBuildNumber = 562538

View 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)
}
}

View file

@ -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")

View file

@ -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 {