consts.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package consts
  2. import (
  3. "encoding/json"
  4. "log/slog"
  5. "net/http"
  6. "os"
  7. "path/filepath"
  8. "github.com/diamondburned/arikawa/v3/discord"
  9. "github.com/diamondburned/arikawa/v3/gateway"
  10. )
  11. const Name = "discordo"
  12. const identifyPropertiesURL = "https://cordapi.dolfi.es/api/v2/properties/web"
  13. var defaultIdentifyProps = gateway.IdentifyProperties{
  14. Device: "",
  15. Browser: "Chrome",
  16. BrowserUserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
  17. BrowserVersion: "138.0.0.0",
  18. OS: "Windows",
  19. OSVersion: "10",
  20. ClientBuildNumber: 415522,
  21. ReleaseChannel: "stable",
  22. SystemLocale: discord.EnglishUS,
  23. HasClientMods: false,
  24. }
  25. func GetIdentifyProps() gateway.IdentifyProperties {
  26. resp, err := http.Get(identifyPropertiesURL)
  27. if err != nil {
  28. return defaultIdentifyProps
  29. }
  30. defer resp.Body.Close()
  31. var props struct {
  32. Client struct {
  33. Type string `json:"type"`
  34. BuildNumber int `json:"build_number"`
  35. BuildHash string `json:"build_hash"`
  36. ReleaseChannel string `json:"release_channel"`
  37. } `json:"client"`
  38. Browser struct {
  39. Type string `json:"type"`
  40. UserAgent string `json:"user_agent"`
  41. Version string `json:"version"`
  42. OS struct {
  43. Type string `json:"type"`
  44. Version string `json:"version"`
  45. } `json:"os"`
  46. } `json:"browser"`
  47. }
  48. if err := json.NewDecoder(resp.Body).Decode(&props); err != nil {
  49. return defaultIdentifyProps
  50. }
  51. return gateway.IdentifyProperties{
  52. Device: "",
  53. Browser: props.Browser.Type,
  54. BrowserUserAgent: props.Browser.UserAgent,
  55. BrowserVersion: props.Browser.Version,
  56. OS: props.Browser.OS.Type,
  57. OSVersion: props.Browser.OS.Version,
  58. ClientBuildNumber: props.Client.BuildNumber,
  59. ReleaseChannel: props.Client.ReleaseChannel,
  60. SystemLocale: discord.EnglishUS,
  61. HasClientMods: false,
  62. }
  63. }
  64. var cacheDir string
  65. func CacheDir() string {
  66. return cacheDir
  67. }
  68. func init() {
  69. userCacheDir, err := os.UserCacheDir()
  70. if err != nil {
  71. userCacheDir = os.TempDir()
  72. slog.Warn("failed to get user cache dir; falling back to temp dir", "err", err, "path", userCacheDir)
  73. }
  74. cacheDir = filepath.Join(userCacheDir, Name)
  75. if err := os.MkdirAll(cacheDir, os.ModePerm); err != nil {
  76. slog.Error("failed to create cache dir", "err", err, "path", cacheDir)
  77. }
  78. }