From b7c7e60fd581a21a92642bfb59eb7f5ac576cbe0 Mon Sep 17 00:00:00 2001 From: Chris Rhodes Date: Sat, 12 Nov 2016 11:59:51 -0800 Subject: [PATCH] Fix presence unmarshalling as the values are inconsistent from Discord. (#287) --- structs.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/structs.go b/structs.go index 6b73e5f..b2d8aad 100644 --- a/structs.go +++ b/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"`