Преглед на файлове

Updated VoiceChannelJoin func to use struct for data sent over websocket. Also returns an error now.

Bruce Marriner преди 9 години
родител
ревизия
332141b083
променени са 1 файла, в които са добавени 17 реда и са изтрити 8 реда
  1. 17 8
      wsapi.go

+ 17 - 8
wsapi.go

@@ -448,29 +448,38 @@ type VoiceServerUpdate struct {
 	Endpoint string `json:"endpoint"`
 }
 
+type voiceChannelJoinData struct {
+	GuildID   string `json:"guild_id"`
+	ChannelID string `json:"channel_id"`
+	SelfMute  bool   `json:"self_mute"`
+	SelfDeaf  bool   `json:"self_deaf"`
+}
+
+type voiceChannelJoinOp struct {
+	Op   int                  `json:"op"`
+	Data voiceChannelJoinData `json:"d"`
+}
+
 // VoiceChannelJoin joins the authenticated session user to
 // a voice channel.  All the voice magic starts with this.
-func (s *Session) VoiceChannelJoin(guildID, channelID string) {
+func (s *Session) VoiceChannelJoin(guildID, channelID string) (err error) {
 
 	if s.wsConn == nil {
 		fmt.Println("error: no websocket connection exists.")
 		return // TODO return error
 	}
 
-	// Odd, but.. it works.  map interface caused odd unknown opcode error
-	// Later I'll test with a struct
-	json := []byte(fmt.Sprintf(`{"op":4,"d":{"guild_id":"%s","channel_id":"%s","self_mute":false,"self_deaf":false}}`,
-		guildID, channelID))
-
-	err := s.wsConn.WriteMessage(websocket.TextMessage, json)
+	data := voiceChannelJoinOp{4, voiceChannelJoinData{guildID, channelID, false, false}}
+	err = s.wsConn.WriteJSON(data)
 	if err != nil {
-		fmt.Println("error:", err)
 		return
 	}
 
 	// Probably will be removed later.
 	s.VGuildID = guildID
 	s.VChannelID = channelID
+
+	return
 }
 
 // onVoiceStateUpdate handles Voice State Update events on the data