mirror of
https://github.com/diamondburned/arikawa.git
synced 2025-01-08 13:07:43 +00:00
Close voice connections when Close() is called
This commit is contained in:
parent
adb23eeb8e
commit
60346f23bb
|
@ -6,6 +6,7 @@ package voice
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/diamondburned/arikawa/discord"
|
"github.com/diamondburned/arikawa/discord"
|
||||||
|
@ -137,3 +138,65 @@ func (v *Voice) JoinChannel(gID, cID discord.Snowflake, muted, deafened bool) (*
|
||||||
// Connect.
|
// Connect.
|
||||||
return conn, conn.JoinChannel(gID, cID, muted, deafened)
|
return conn, conn.JoinChannel(gID, cID, muted, deafened)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CloseError struct {
|
||||||
|
SessionErrors map[discord.Snowflake]error
|
||||||
|
StateErr error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *CloseError) HasError() bool {
|
||||||
|
if e.StateErr != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, err := range e.SessionErrors {
|
||||||
|
if err == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *CloseError) Error() string {
|
||||||
|
if e.StateErr != nil {
|
||||||
|
return e.StateErr.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
var errorCount int
|
||||||
|
for _, err := range e.SessionErrors {
|
||||||
|
if err == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
errorCount++
|
||||||
|
}
|
||||||
|
|
||||||
|
if errorCount < 1 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return strconv.Itoa(errorCount) + " voice sessions returned errors while attempting to disconnect"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *Voice) Close() error {
|
||||||
|
err := &CloseError{
|
||||||
|
SessionErrors: make(map[discord.Snowflake]error),
|
||||||
|
}
|
||||||
|
|
||||||
|
v.mapmutex.Lock()
|
||||||
|
defer v.mapmutex.Unlock()
|
||||||
|
|
||||||
|
for gID, s := range v.sessions {
|
||||||
|
err.SessionErrors[gID] = s.Disconnect()
|
||||||
|
}
|
||||||
|
|
||||||
|
err.StateErr = v.State.Close()
|
||||||
|
if err.HasError() {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue