|
@@ -59,8 +59,12 @@ type VoiceConnection struct {
|
|
|
|
|
|
op4 voiceOP4
|
|
op4 voiceOP4
|
|
op2 voiceOP2
|
|
op2 voiceOP2
|
|
|
|
+
|
|
|
|
+ voiceSpeakingUpdateHandlers []VoiceSpeakingUpdateHandler
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+type VoiceSpeakingUpdateHandler func(vc *VoiceConnection, vs *VoiceSpeakingUpdate)
|
|
|
|
+
|
|
// Speaking sends a speaking notification to Discord over the voice websocket.
|
|
// Speaking sends a speaking notification to Discord over the voice websocket.
|
|
// This must be sent as true prior to sending audio and should be set to false
|
|
// This must be sent as true prior to sending audio and should be set to false
|
|
// once finished sending audio.
|
|
// once finished sending audio.
|
|
@@ -151,6 +155,21 @@ func (v *VoiceConnection) Close() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// Adds a Handler for VoiceSpeakingUpdate events.
|
|
|
|
+func (v *VoiceConnection) AddHandler(h VoiceSpeakingUpdateHandler) {
|
|
|
|
+ v.Lock()
|
|
|
|
+ defer v.Unlock()
|
|
|
|
+
|
|
|
|
+ v.voiceSpeakingUpdateHandlers = append(v.voiceSpeakingUpdateHandlers, h)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// VoiceSpeakingUpdate is a struct for a VoiceSpeakingUpdate event.
|
|
|
|
+type VoiceSpeakingUpdate struct {
|
|
|
|
+ UserID string `json:"user_id"`
|
|
|
|
+ SSRC int `json:"ssrc"`
|
|
|
|
+ Speaking bool `json:"speaking"`
|
|
|
|
+}
|
|
|
|
+
|
|
// ------------------------------------------------------------------------------------------------
|
|
// ------------------------------------------------------------------------------------------------
|
|
// Unexported Internal Functions Below.
|
|
// Unexported Internal Functions Below.
|
|
// ------------------------------------------------------------------------------------------------
|
|
// ------------------------------------------------------------------------------------------------
|
|
@@ -345,14 +364,20 @@ func (v *VoiceConnection) wsEvent(messageType int, message []byte) {
|
|
return
|
|
return
|
|
|
|
|
|
case 5:
|
|
case 5:
|
|
- // SPEAKING TRUE/FALSE NOTIFICATION
|
|
|
|
- /*
|
|
|
|
- {
|
|
|
|
- "user_id": "1238921738912",
|
|
|
|
- "ssrc": 2,
|
|
|
|
- "speaking": false
|
|
|
|
- }
|
|
|
|
- */
|
|
|
|
|
|
+ if len(v.voiceSpeakingUpdateHandlers) == 0 {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ voiceSpeakingUpdate := &VoiceSpeakingUpdate{}
|
|
|
|
+ if err := json.Unmarshal(e.RawData, voiceSpeakingUpdate); err != nil {
|
|
|
|
+ fmt.Println("voiceWS.onEvent VoiceSpeakingUpdate Unmarshal error: ", err)
|
|
|
|
+ printJSON(e.RawData)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for _, h := range v.voiceSpeakingUpdateHandlers {
|
|
|
|
+ h(v, voiceSpeakingUpdate)
|
|
|
|
+ }
|
|
|
|
|
|
default:
|
|
default:
|
|
fmt.Println("UNKNOWN VOICE OP: ", e.Operation)
|
|
fmt.Println("UNKNOWN VOICE OP: ", e.Operation)
|