diff --git a/structs.go b/structs.go index 70c4844..f364fa4 100644 --- a/structs.go +++ b/structs.go @@ -215,24 +215,14 @@ type Member struct { // A User stores all data for an individual Discord user. type User struct { - ID string `json:"id"` - Email string `json:"email"` - Username string `json:"username"` - Avatar string `json:"Avatar"` - Verified bool `json:"verified"` - //Discriminator int `json:"discriminator,string"` // TODO: See below + ID string `json:"id"` + Email string `json:"email"` + Username string `json:"username"` + Avatar string `json:"Avatar"` + Verified bool `json:"verified"` + Discriminator string `json:"discriminator"` } -// TODO: Research issue. -// Discriminator sometimes comes as a string -// and sometimes it comes as a int. Weird. -// to avoid errors I've just commented it out -// but it doesn't seem to just kill the whole -// program. Heartbeat is taken on READY even -// with error and the system continues to read -// it just doesn't seem able to handle this one -// field correctly. Need to research this more. - // A Settings stores data for a specific users Discord client settings. type Settings struct { RenderEmbeds bool `json:"render_embeds"` @@ -274,7 +264,7 @@ type RateLimit struct { // A ReadState stores data on the read state of channels. type ReadState struct { - MentionCount int + MentionCount int `json:"mention_count"` LastMessageID string `json:"last_message_id"` ID string `json:"id"` } diff --git a/wsapi.go b/wsapi.go index 2337916..7e4ad19 100644 --- a/wsapi.go +++ b/wsapi.go @@ -284,8 +284,11 @@ func (s *Session) event(messageType int, message []byte) { // Attempt to unmarshal our event. // If there is an error we should handle the event itself. if err = unmarshal(e.RawData, i); err != nil { - fmt.Println("Unable to unmarshal event data.") - i = e + fmt.Println("Unable to unmarshal event data.", err) + // Ready events must fire, even if they are empty. + if e.Type != "READY" { + i = e + } } } else { fmt.Println("Unknown event.")