Implement Guild Sharding
This implements the upcoming change (see hammerandchisel/discord-api-docs#17) to add guild-sharding support directly in the Discord Gateways.
This commit is contained in:
parent
33f2fa8d81
commit
92caf31b7f
2 changed files with 19 additions and 1 deletions
|
@ -38,6 +38,10 @@ type Session struct {
|
|||
// Should the session request compressed websocket data.
|
||||
Compress bool
|
||||
|
||||
// Sharding
|
||||
ShardID int
|
||||
NumShards int
|
||||
|
||||
// Should state tracking be enabled.
|
||||
// State tracking is the best way for getting the the users
|
||||
// active guilds and the members of the guilds.
|
||||
|
|
16
wsapi.go
16
wsapi.go
|
@ -39,6 +39,7 @@ type handshakeData struct {
|
|||
Properties handshakeProperties `json:"properties"`
|
||||
LargeThreshold int `json:"large_threshold"`
|
||||
Compress bool `json:"compress"`
|
||||
Shard [2]int `json:"shard"`
|
||||
}
|
||||
|
||||
type handshakeOp struct {
|
||||
|
@ -78,7 +79,20 @@ func (s *Session) Open() (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
err = s.wsConn.WriteJSON(handshakeOp{2, handshakeData{3, s.Token, handshakeProperties{runtime.GOOS, "Discordgo v" + VERSION, "", "", ""}, 250, s.Compress}})
|
||||
handshake := handshakeData{
|
||||
Version: 4,
|
||||
Token: s.Token,
|
||||
Properties: handshakeProperties{runtime.GOOS, "Discordgo v" + VERSION, "", "", ""},
|
||||
LargeThreshold: 250,
|
||||
Compress: s.Compress,
|
||||
}
|
||||
|
||||
// If we've set NumShards, add the shard information to the handshake
|
||||
if s.NumShards > 0 {
|
||||
handshake.Shard = [2]int{s.ShardID, s.NumShards}
|
||||
}
|
||||
|
||||
err = s.wsConn.WriteJSON(handshakeOp{2, handshake})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue