From 40b969d7c3b4db62d36483aba48d8a654e4b7b24 Mon Sep 17 00:00:00 2001 From: Chris Rhodes Date: Mon, 8 Feb 2016 08:05:08 -0800 Subject: [PATCH 1/3] VoiceServerUpdate and VoiceStateUpdate --- structs.go | 1 + wsapi.go | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/structs.go b/structs.go index 46ab11d..7275ed4 100644 --- a/structs.go +++ b/structs.go @@ -46,6 +46,7 @@ type Session struct { OnMessageAck func(*Session, *MessageAck) OnUserUpdate func(*Session, *User) OnPresenceUpdate func(*Session, *PresenceUpdate) + OnVoiceServerUpdate func(*Session, *VoiceServerUpdate) OnVoiceStateUpdate func(*Session, *VoiceState) OnChannelCreate func(*Session, *Channel) OnChannelUpdate func(*Session, *Channel) diff --git a/wsapi.go b/wsapi.go index 7efdf7a..c0cf87a 100644 --- a/wsapi.go +++ b/wsapi.go @@ -316,17 +316,17 @@ func (s *Session) event(messageType int, message []byte) { return } case "VOICE_SERVER_UPDATE": - // TEMP CODE FOR TESTING VOICE var st *VoiceServerUpdate if err = unmarshalEvent(e, &st); err == nil { s.onVoiceServerUpdate(st) + s.OnVoiceServerUpdate(s, st) } return case "VOICE_STATE_UPDATE": - // TEMP CODE FOR TESTING VOICE var st *VoiceState if err = unmarshalEvent(e, &st); err == nil { s.onVoiceStateUpdate(st) + s.OnVoiceStateUpdate(s, st) } return case "USER_UPDATE": From 7858f999b1839052bbe9e18882eeb082257043de Mon Sep 17 00:00:00 2001 From: Chris Rhodes Date: Mon, 8 Feb 2016 10:03:32 -0800 Subject: [PATCH 2/3] Handle nil errors and default handler properly. --- wsapi.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/wsapi.go b/wsapi.go index c0cf87a..dd7837f 100644 --- a/wsapi.go +++ b/wsapi.go @@ -319,16 +319,24 @@ func (s *Session) event(messageType int, message []byte) { var st *VoiceServerUpdate if err = unmarshalEvent(e, &st); err == nil { s.onVoiceServerUpdate(st) - s.OnVoiceServerUpdate(s, st) + if s.OnVoiceServerUpdate != nil { + s.OnVoiceServerUpdate(s, st) + } + } + if s.OnVoiceServerUpdate != nil { + return } - return case "VOICE_STATE_UPDATE": var st *VoiceState if err = unmarshalEvent(e, &st); err == nil { s.onVoiceStateUpdate(st) - s.OnVoiceStateUpdate(s, st) + if s.OnVoiceStateUpdate != nil { + s.OnVoiceStateUpdate(s, st) + } + } + if s.OnVoiceStateUpdate != nil { + return } - return case "USER_UPDATE": if s.OnUserUpdate != nil { var st *User From 7d112b562e5ef9c64a703a475173e90c9a7d1ab0 Mon Sep 17 00:00:00 2001 From: Chris Rhodes Date: Mon, 8 Feb 2016 10:08:24 -0800 Subject: [PATCH 3/3] Mirror the Voice guard. --- wsapi.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/wsapi.go b/wsapi.go index c0b6e33..f2d055c 100644 --- a/wsapi.go +++ b/wsapi.go @@ -321,7 +321,9 @@ func (s *Session) event(messageType int, message []byte) { } var st *VoiceServerUpdate if err = unmarshalEvent(e, &st); err == nil { - s.onVoiceServerUpdate(st) + if s.Voice != nil { + s.onVoiceServerUpdate(st) + } if s.OnVoiceServerUpdate != nil { s.OnVoiceServerUpdate(s, st) } @@ -335,7 +337,9 @@ func (s *Session) event(messageType int, message []byte) { } var st *VoiceState if err = unmarshalEvent(e, &st); err == nil { - s.onVoiceStateUpdate(st) + if s.Voice != nil { + s.onVoiceStateUpdate(st) + } if s.OnVoiceStateUpdate != nil { s.OnVoiceStateUpdate(s, st) } @@ -789,11 +793,6 @@ func (s *Session) onVoiceStateUpdate(st *VoiceState) { // connection and should happen after the VOICE_STATE event. func (s *Session) onVoiceServerUpdate(st *VoiceServerUpdate) { - // This shouldn't ever be the case, I don't think. - if s.Voice == nil { - return - } - // Store values for later use s.Voice.token = st.Token s.Voice.endpoint = st.Endpoint