Преглед изворни кода

Fix presence unmarshalling as the values are inconsistent from Discord. (#287)

Chris Rhodes пре 8 година
родитељ
комит
b7c7e60fd5
1 измењених фајлова са 32 додато и 0 уклоњено
  1. 32 0
      structs.go

+ 32 - 0
structs.go

@@ -14,6 +14,7 @@ package discordgo
 import (
 	"encoding/json"
 	"reflect"
+	"strconv"
 	"sync"
 	"time"
 
@@ -290,6 +291,37 @@ type Game struct {
 	URL  string `json:"url"`
 }
 
+func (g *Game) UnmarshalJSON(bytes []byte) error {
+	temp := &struct {
+		Name string          `json:"name"`
+		Type json.RawMessage `json:"type"`
+		URL  string          `json:"url"`
+	}{}
+	err := json.Unmarshal(bytes, temp)
+	if err != nil {
+		return err
+	}
+	g.Name = temp.Name
+	g.URL = temp.URL
+
+	if temp.Type != nil {
+		err = json.Unmarshal(temp.Type, &g.Type)
+		if err == nil {
+			return nil
+		}
+
+		s := ""
+		err = json.Unmarshal(temp.Type, &s)
+		if err == nil {
+			g.Type, err = strconv.Atoi(s)
+		}
+
+		return err
+	}
+
+	return nil
+}
+
 // A Member stores user information for Guild members.
 type Member struct {
 	GuildID  string   `json:"guild_id"`